#flutter #dart
#flutter #dart
Вопрос:
Я пытаюсь уменьшать и увеличивать число, и это работает хорошо. Здесь вопрос в том, что когда я создаю отдельную функцию для моей функции onTapDown, уменьшение числа не работает. Допустил ли я здесь какую-либо ошибку? Но когда я помещаю это в свою функцию onTap, она работает точно так же, как функция в add incon.
import 'dart:async';
import 'packa&e:flutter/material.dart';
class Container1 extends StatefulWid&et {
@override
_Container1State createState() =&&t; _Container1State();
}
class _Container1State extends State<Container1&&t; {
int num = 20;
Timer timer;
void minusOnTapDown(int parameter) {
timer = Timer.periodic(Duration(milliseconds: 100), (timer) {
setState(() {
parameter--;
if (parameter <= 1) {
timer.cancel();
parameter = 1;
}
});
});
}
void plusOnTapDown(int parameter) {
timer = Timer.periodic(Duration(milliseconds: 100), (timer) {
setState(() {
parameter--;
if (parameter <= 0) {
timer.cancel();
}
});
});
}
void cancelTimer(int parameter) {
setState(() {
timer.cancel();
});
}
@override
Wid&et build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAli&nment: MainAxisAli&nment.center,
children: <Wid&et&&t;[
Text(
'$num',
style: TextStyle(fontSize: 30.0),
),
SizedBox(
hei&ht: 50.0,
),
Row(
mainAxisAli&nment: MainAxisAli&nment.center,
children: <Wid&et&&t;[
GestureDetector(
onTapDown: (TapDownDetails details) {
minusOnTapDown(num);
},
onTapUp: (TapUpDetails details) {
cancelTimer(num);
},
onTapCancel: () {
cancelTimer(num);
},
child: Container(
hei&ht: 50.0,
width: 50.0,
color: Colors.&rey,
child: Icon(Icons.minimize),
),
),
SizedBox(
width: 50.0,
),
GestureDetector(
onTapDown: (TapDownDetails details) {
print('Down');
timer = Timer.periodic(Duration(milliseconds: 100), (timer) {
setState(() {
num ;
});
});
},
onTapUp: (TapUpDetails details) {
setState(() {
print('Up');
timer.cancel();
});
},
onTapCancel: () {
print('Cancel');
timer.cancel();
},
child: Container(
hei&ht: 50.0,
width: 50.0,
color: Colors.&rey,
child: Icon(Icons.add),
),
),
],
)
],
),
);
}
}
Комментарии:
1. Просто чтобы добавить к предоставленным ответам. Хотя все в dart является объектом и, следовательно, примитивами тоже, на практике поведение, которое он будет демонстрировать, такое, как если бы оно было передано по значению. (Я не слишком уверен, почему, но я видел хорошее объяснение в Stack Overflow). Если вы не передаете, скажем, экземпляр класса, вы измените только скопированное значение, которое находится внутри параметра функции.
Ответ №1:
Я думаю, ошибка возникает из-за того, что вы пытаетесь уменьшить параметр вместо фактического числа. параметр — не будет отражаться на num.
Вызовите ее следующим образом:
onTapDown: (TapDownDetails details) {
minusOnTapDown();
},
onTapUp: (TapUpDetails details) {
cancelTimer();
и внесите изменения в функцию:
void minusOnTapDown() {
timer = Timer.periodic(Duration(milliseconds: 100), (timer) {
setState(() {
num--;
if (num<= 1) {
timer.cancel();
num= 1;
}
});
});
}
Надеюсь, это сработает!
Комментарии:
1. Что я могу сделать, если у меня есть более одного параметра, такого как возраст и вес? Что мне делать в этом случае?
Ответ №2:
Это потому, что при создании отдельного метода вы передаете параметр с именем parameter
и увеличиваете или уменьшаете его. В то время как num
переменная, которая является переменной, отражающейся в пользовательском интерфейсе, полностью не затронута. Таким образом, и в отдельном методе вам нужно напрямую увеличивать или уменьшать num
переменную. И нет необходимости передавать parameter
.
void minusOnTapDown() {
timer = Timer.periodic(Duration(milliseconds: 100), (timer) {
setState(() {
num--;
if (num <= 1) {
timer.cancel();
num = 1;
}
});
});
}
И вызовите ее в onTapDown
обратном вызове.
onTapDown: (TapDownDetails details) {
minusOnTapDown();
},
Комментарии:
1.Что я могу сделать, если у меня есть более одного параметра, такого как возраст и вес? Что мне делать в этом случае?
2. Вы можете передать строку case в качестве параметра в методе. И в зависимости от того, является ли это возрастом, весом и т.д. переключайте регистры внутри метода и соответственно увеличивайте / уменьшайте соответствующую переменную.
3. @Arud извините, я не понял, что вы имеете в виду. «Я должен это ….» ??