【问题标题】:How to change values in OnTap Function when used in a for loop in Flutter在 Flutter 的 for 循环中使用时如何更改 OnTap 函数中的值
【发布时间】:2020-10-30 04:24:33
【问题描述】:

这就是我的代码的样子:

        List<Widgets> abc = [];

        for(int a = 0;a<5;a++)
        {
        abc.add(FlatButton(onTap:(){ print(a);},
                           child:Text("Hello - ${a}")
                           )
                 );
        }

当用户单击“Hello - 2”按钮时,我希望控制台上的输出为 2,但显示的输出为 5。

我以这个小编程问题的形式简化了原始问题。我在互联网上查了很多,但无法得到任何答案。请帮帮我!!

【问题讨论】:

  • 看起来您没有为每个按钮存储 a 变量。您只是将其转换为字符串以创建按钮名称,但是当按下按钮时,“a”仍然是指您的递增变量。
  • 是的,这正是我上次检查时发生的情况

标签: android ios flutter dart flutter-layout


【解决方案1】:

您的代码运行良好。

List<Widget> abc = [];

  @override
  Widget build(BuildContext context) {
    for (int a = 0; a < 5; a++) {
      abc.add(FlatButton(
          onPressed: () {
            print(a);
          },
          child: Text("Hello - $a")));
    }
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: ListView.builder(
          itemCount: abc.length,
          itemBuilder: (context, index) {
            return abc[index];
          },
        ),
      ),
    );

a的最大值为4时,它如何返回5

【讨论】:

  • 我不知道为什么以及如何正常工作,但最后当我检查它没有存储 a 的值时。它只是取 a 的最后一个值,不知何故为 5。那时系统可能正在取垃圾值(idk,可能是)。
  • 在最初的问题中,我以列表的形式显示结果并单击这些结果图块,我想使用 Hero 小部件为新屏幕设置动画。因此,我使用 for 循环创建了一个函数,并使用循环变量值作为 hero 小部件的标记,但如果使用上述循环,则每次标记都取值为 '5'。我不知道为什么会这样。
  • 那么这个解决方案对你有用吗?还是必须在这里解决其他问题?如果您遇到问题,请更新您的问题;如果此答案正确解决并解决了您的问题,请接受答案。
【解决方案2】:

您需要将数字存储在每个按钮中。像这样的东西。我不知道如何使用颤振,所以无论如何你应该这样做,那样做。

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
    ),
  )
);
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多