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