Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 颤振:我可以将参数传递给按钮上的onPress事件中定义的函数吗?_Dart_Flutter - Fatal编程技术网

Dart 颤振:我可以将参数传递给按钮上的onPress事件中定义的函数吗?

Dart 颤振:我可以将参数传递给按钮上的onPress事件中定义的函数吗?,dart,flutter,Dart,Flutter,我有一个带按钮的简单表单来计算表单。我认为,与其让函数知道不需要知道的文本字段,不如按下按钮开始计算并将变量传递给哑函数。我可以这样做吗?或者我的计算函数需要访问我的文本字段吗 new Container( color: Colors.grey.shade300, padding: new EdgeInsets.all(15.0), child: new Column( chil

我有一个带按钮的简单表单来计算表单。我认为,与其让函数知道不需要知道的文本字段,不如按下按钮开始计算并将变量传递给哑函数。我可以这样做吗?或者我的计算函数需要访问我的文本字段吗

         new Container(
            color: Colors.grey.shade300,
            padding: new EdgeInsets.all(15.0),
            child: new Column(
              children: <Widget>[
                new TextField(
                  controller: _ageController,
                  decoration: new InputDecoration(
                      icon: new Icon(Icons.person_outline), labelText: "Age"),
                ),
                new TextField(
                  controller: _heightController,
                  decoration: new InputDecoration(
                      icon: new Icon(Icons.insert_chart),
                      labelText: "Height (in feet)"),
                ),
                new TextField(
                  controller: _weightController,
                  decoration: new InputDecoration(
                      icon: new Icon(Icons.line_weight),
                      labelText: "Weight (in lbs)"),
                ),
                new Padding(padding: new EdgeInsets.only(top: 20.0)),
                new RaisedButton(
                  onPressed: calculate(1, 2),
                  color: Colors.pinkAccent,
                  child: new Text(
                    "Calculate",
                    style: new TextStyle(color: Colors.white),
                  ),
                )
              ],
            ),
          ),

        ],
      ),
    );
  }

  void calculate(num1, num2) {

  }
}
新容器(
颜色:Colors.grey.shade300,
填充:新的边缘设置。全部(15.0),
子:新列(
儿童:[
新文本字段(
控制器:_ageController,
装饰:新的输入装饰(
图标:新图标(图标。人物轮廓),标签文字:“年龄”),
),
新文本字段(
控制器:_高度控制器,
装饰:新的输入装饰(
图标:新图标(图标。插入图表),
标签文字:“高度(英尺)”,
),
新文本字段(
控制器:\ u控制器,
装饰:新的输入装饰(
图标:新图标(图标。线条重量),
标签文字:“重量(磅)”,
),
新填充(填充:仅限新边集(顶部:20.0)),
新升起的按钮(
按下:计算(1,2),
颜色:Colors.pinkAccent,
儿童:新文本(
“计算”,
样式:新文本样式(颜色:Colors.white),
),
)
],
),
),
],
),
);
}
计算空隙率(num1,num2){
}
}
刚刚找到答案。不 根据全班同学的意见,, onPressed属性有一种类型,返回void,根据docs VoidCallBack,它是没有参数且不返回数据的回调的签名

编辑:谢谢你们。要解决这个问题,可以使用匿名函数,如下所示

(){您的代码在这里}

使用

onPressed: (){calculate(1, 2);},
e、 g


你还记得《颤栗》的第一行吗 那是

其中
=>
表示单行函数方法 这是调用带有参数的函数时的关键

例:

我们可以通过以下方式调用上述函数:

IconButton(icon: Icon(Icons.add), onPressed: display)
这里我们不能将
()
显示一起包含

但是,当要传递一个或多个参数时,它如下所示

void addition(int value1, int value2) {
    value1 + value2
}

IconButton(icon: Icon(Icons.add), onPressed: ()=>addition(2, 4))

速记函数的设计允许它返回本文中提到的类型为void的函数-->

因此,您可以使用两种方法:

使用


请显示添加到帖子中的编解码器。那么您是如何解决这个问题的<代码>按下:()=>计算(1,2),
?是的,这就是解决方案。我只是回来更新它,但你们比我快。所以实际上我们并没有将函数本身(回想一下,Dart中的所有东西都是对象,甚至是函数)传递给
onPressed
属性,我们创建了一个匿名函数来调用我们的函数。与按下时相同:(){calculate(1100);}这是唯一的方法吗?或者还有其他方法吗?第二种方法对我有效,我需要通过BuildContext:)
void display() {

}
IconButton(icon: Icon(Icons.add), onPressed: display)
void addition(int value1, int value2) {
    value1 + value2
}

IconButton(icon: Icon(Icons.add), onPressed: ()=>addition(2, 4))
onPressed: () => calculate(1, 2),
onPressed: (){calculate(1, 2);},