Flutter 同一类中的单独函数不起作用
我试着减少和增加这个数字,效果很好。这里的问题是,当我为我的onTapDown函数创建一个单独的函数时,的数字减量不起作用。我在这里犯了什么错误吗?但当我把它放在我的onTap函数中时,它就像add INCO中的函数一样工作良好Flutter 同一类中的单独函数不起作用,flutter,dart,Flutter,Dart,我试着减少和增加这个数字,效果很好。这里的问题是,当我为我的onTapDown函数创建一个单独的函数时,的数字减量不起作用。我在这里犯了什么错误吗?但当我把它放在我的onTap函数中时,它就像add INCO中的函数一样工作良好 import 'dart:async'; import 'package:flutter/material.dart'; class Container1 extends StatefulWidget { @override _Container1State
import 'dart:async';
import 'package:flutter/material.dart';
class Container1 extends StatefulWidget {
@override
_Container1State createState() => _Container1State();
}
class _Container1State extends State<Container1> {
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
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'$num',
style: TextStyle(fontSize: 30.0),
),
SizedBox(
height: 50.0,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
GestureDetector(
onTapDown: (TapDownDetails details) {
minusOnTapDown(num);
},
onTapUp: (TapUpDetails details) {
cancelTimer(num);
},
onTapCancel: () {
cancelTimer(num);
},
child: Container(
height: 50.0,
width: 50.0,
color: Colors.grey,
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(
height: 50.0,
width: 50.0,
color: Colors.grey,
child: Icon(Icons.add),
),
),
],
)
],
),
);
}
}
导入'dart:async';
进口“包装:颤振/材料.省道”;
类Container1扩展了StatefulWidget{
@凌驾
_Container1State createState()=>\u Container1State();
}
类_Container1State扩展状态{
int num=20;
定时器;
void minusOnTapDown(int参数){
计时器=计时器。周期性(持续时间(毫秒:100),(计时器){
设置状态(){
参数--;
如果(parameter这是因为当您创建单独的方法时,您正在传递一个名为parameter
的参数,并增加或减少该参数。而反映在UI中的变量num
变量完全不受影响。因此,在单独的方法中,您也需要增加或减少num
变量直接。并且不需要传递参数
void minusOnTapDown() {
timer = Timer.periodic(Duration(milliseconds: 100), (timer) {
setState(() {
num--;
if (num <= 1) {
timer.cancel();
num = 1;
}
});
});
}
这是因为当您创建单独的方法时,您正在传递一个名为parameter
的参数,并增加或减少该参数。而反映在UI中的变量num
变量完全不受影响。因此,在单独的方法中,您也需要直接增加或减少num
变量。并且不需要传递参数
void minusOnTapDown() {
timer = Timer.periodic(Duration(milliseconds: 100), (timer) {
setState(() {
num--;
if (num <= 1) {
timer.cancel();
num = 1;
}
});
});
}
我认为出现错误是因为您试图减少参数而不是实际的num。参数——不会反映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;
}
});
});
}
void minusOnTapDown(){
计时器=计时器。周期性(持续时间(毫秒:100),(计时器){
设置状态(){
num--;
如果(num我认为发生错误是因为您试图减少参数而不是实际的num.parameter——不会反映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;
}
});
});
}
void minusOnTapDown(){
计时器=计时器。周期性(持续时间(毫秒:100),(计时器){
设置状态(){
num--;
如果(num当我有多个参数(如年龄和体重)时,我能做什么?在这种情况下,我该怎么做?你可以将大小写字符串作为参数传递到方法中。并根据它是否是年龄、体重等。在方法中切换大小写,并相应地增加/减少相应的变量。@Arud抱歉,我不明白你的意思。“我应该?当我有多个参数(如年龄和体重)时,我该怎么办?在这种情况下,我该怎么办?您可以将大小写字符串作为参数传递到方法中。并根据它是否是年龄、体重等。在方法中切换大小写,并相应地增加/减少相应的变量。@Arud抱歉,我不理解您的意思。“我应该这样做…”?只是为了补充已经提供的答案。虽然dart中的所有内容都是对象,因此也是原语,但在实践中,它将显示的行为就像是通过值传递的一样。(我不太确定为什么,但我在堆栈溢出中看到了一个很好的解释)。除非传递类的实例,否则只会更改保存在函数参数内的复制值。只需添加已提供的答案即可。虽然dart中的所有内容都是对象,因此也是原语,但在实践中,它将显示的行为就像是通过值传递一样。(我不太清楚为什么,但我在Stack Overflow中看到了一个很好的解释)。除非传递类的实例,否则只会更改函数参数内的复制值。当我有多个参数(如年龄和体重)时,我该怎么办?在这种情况下,我该怎么办?当我有多个参数(如年龄和体重)时,我该怎么办?在这种情况下,我该怎么办?