是否可以在颤振的 onTap GestureDetector 函数中获取额外信息

问题描述

Flutter 对我来说很陌生,所以可能 Flutter 专家会将其视为一个非常基本的问题。 我有许多文本按钮,当它们被按下时,我想用相同的功能处理它们。 但该函数必须知道按下了哪个按钮。它可能是一个额外的参数,或者函数应该以某种方式检索按下按钮的 Widget。 我试过的相关代码如下所示。使用此代码,handledigit 中的参数 i 始终为 10。 这样做的正确方法是什么?

class MijnWidget extends StatelessWidget
{
     void handledigit(i)
     {
         print(i.toString());
     }

     Widget build(BuildContext context)
     {
         int i;
         Row row;

         List<Widget> footerbuttons;
         String str;
         footerbuttons = new List<Widget>();
         for (i=1; i<= 9; i++)
         {
             str = i.toString();

             footerbuttons.add
             (
                 GestureDetector
                 (
                     child:Text(str),onTap:() {handledigit(i);},)
             );
        }
        row = Row(children: footerbuttons,mainAxisAlignment: MainAxisAlignment.spaceBetween);

        // Here a MaterialApp with a Scaffold containg row is returned

     }
}

解决方法

传递给 i 的所有 lambda 都引用同一个 final localI = i,它在循环结束时为 9。如果您在循环中创建一个新变量 onTap 并在您的 Row( children: List.generate(10,(index) => GestureDetector( child: Text("$index"),onTap: () => handledigit(index),),) 回调中使用它,它应该可以工作。

最好避免可变变量并使用类似的东西:

loc

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...