Android 在颤振中用于for循环时,如何更改OnTap函数中的值
我的代码是这样的:Android 在颤振中用于for循环时,如何更改OnTap函数中的值,android,ios,flutter,dart,flutter-layout,Android,Ios,Flutter,Dart,Flutter Layout,我的代码是这样的: List<Widgets> abc = []; for(int a = 0;a<5;a++) { abc.add(FlatButton(onTap:(){ print(a);}, child:Text("Hello - ${a}") )
List<Widgets> abc = [];
for(int a = 0;a<5;a++)
{
abc.add(FlatButton(onTap:(){ print(a);},
child:Text("Hello - ${a}")
)
);
}
列出abc=[];
对于(inta=0;a,您的代码运行得很好
列出abc=[];
@凌驾
小部件构建(构建上下文){
对于(int a=0;a<5;a++){
abc.add(扁平按钮(
已按下:(){
印刷品(a);
},
孩子:文本(“你好-$a”);
}
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:中(
子项:ListView.builder(
itemCount:abc.length,
itemBuilder:(上下文,索引){
返回abc[索引];
},
),
),
);
当a
的最大值为4时,它如何返回5
列出abc=[];
@凌驾
小部件构建(构建上下文){
对于(int a=0;a<5;a++){
abc.add(扁平按钮(
已按下:(){
印刷品(a);
},
孩子:文本(“你好-$a”);
}
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:中(
子项:ListView.builder(
itemCount:abc.length,
itemBuilder:(上下文,索引){
返回abc[索引];
},
),
),
);
当a
的最大值为4时,它如何返回5
。您需要在每个按钮中存储数字。类似这样。我不知道如何使用颤振,所以无论您如何操作,都要这样做
class customButton extends StatelessWidget {
int number = 0;
@override
customButton(int num){
this.number = num;
}
@override
Widget build(BuildContext context){
return Text('button content' + number.toString());
}
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
List<customButton> buttons = new List();
for(int a = 0; a < 5; a++){
buttons.add(new customButton(a));
}
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: buttons
),
)
);
}
}
class customButton扩展了无状态小部件{
整数=0;
@凌驾
自定义按钮(int num){
this.number=num;
}
@凌驾
小部件构建(构建上下文){
返回文本('按钮内容'+number.toString());
}
}
类_MyHomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
列表按钮=新建列表();
对于(int a=0;a<5;a++){
按钮。添加(新自定义按钮(a));
}
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:中(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:按钮
),
)
);
}
}
您需要在每个按钮中存储数字。类似于这样。我不知道如何使用颤振,所以无论您如何操作,都要这样做
class customButton extends StatelessWidget {
int number = 0;
@override
customButton(int num){
this.number = num;
}
@override
Widget build(BuildContext context){
return Text('button content' + number.toString());
}
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
List<customButton> buttons = new List();
for(int a = 0; a < 5; a++){
buttons.add(new customButton(a));
}
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: buttons
),
)
);
}
}
class customButton扩展了无状态小部件{
整数=0;
@凌驾
自定义按钮(int num){
this.number=num;
}
@凌驾
小部件构建(构建上下文){
返回文本('按钮内容'+number.toString());
}
}
类_MyHomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
列表按钮=新建列表();
对于(int a=0;a<5;a++){
按钮。添加(新自定义按钮(a));
}
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:中(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:按钮
),
)
);
}
}
看起来您并没有为每个按钮存储a变量。您只是将其转换为字符串以生成按钮名称,但当按下按钮时为“a”仍然是指您的递增变量。是的,这正是上次我检查编辑时发生的情况,看起来您没有为每个按钮存储a变量。您只是将其转换为字符串以使按钮名,但当按钮被按下“a”时仍然是指您的递增变量。是的,这正是上次我检查时发生的情况。我不知道为什么以及如何工作良好,但上次我检查时,它没有存储a的值。它只是取a的最后一个值,不知怎的是5。当时系统可能正在取垃圾值(idk,可能是).在最初的问题中,我以列表的形式显示结果并单击这些结果块,我想使用Hero小部件将其动画显示到新屏幕。因此,我使用for循环创建了一个函数,并使用循环变量值作为Hero小部件的标记,但如果使用上述循环,则每次标记都取值“5”。我我不知道为什么会发生这种情况。那么这个解决方案对您有效吗?或者必须在这里解决其他问题?如果您有问题,请更新您的问题,或者如果这个答案正确地解决了您的问题,请接受答案。我不知道为什么以及如何工作良好,但最后当我检查它没有存储。它只是获取a的最后一个值,不知何故是5。当时系统可能正在获取垃圾值(idk,可能是).在最初的问题中,我以列表的形式显示结果并单击这些结果块,我想使用Hero小部件将其动画显示到新屏幕。因此,我使用for循环创建了一个函数,并使用循环变量值作为Hero小部件的标记,但如果使用上述循环,则每次标记都取值“5”。我我不知道为什么会发生这种情况。那么这个解决方案对您有效吗?或者必须在这里解决其他问题?如果您有问题,请更新您的问题,如果这个答案正确地解决了您的问题,请接受答案。