我刚开始使用Flutter,正在制作计算器。我想为按钮设置不同的回调方法以执行各种操作。事实是,我想获取被单击的按钮的文本以知道应该执行的操作,但是回调方法似乎不包含“发送器小部件”的任何信息。
在C#中,我可以执行下一个操作,其中“发送者”是被单击的按钮。
var button1 = new Button();
var button2 = new Button();
public MyClassConstructor() {
button1.Clicked += foo;
button2.Clicked += foo;
}
public void foo (object sender, EventArgs e)
{
var button = sender as Button;
string id = button.ID;
if (id == "1")
{
// do something
}
else if (id == "2")
{
// do something else
}
...
}
类似地,在Java中,“事件”包含单击的按钮。
private JButton button1 = new JButton("1");
private JButton button2 = new JButton("2");
public MyClassConstructor() {
Listener listener = new Listener();
button1.addActionListener(listener);
button2.addActionListener(listener);
}
private class Listener implements ActionListener {
@Override
public void actionPerformed(ActionEvent event) {
if (event.getSource().equals(button1)) {
// do something
} else if (event.getSource().equals(button2)) {
// do something else
}
...
}
}
Flutter中有类似的东西吗?我知道我可以执行以下操作:
VoidCallback foo = () {
// do something
};
var button1 = RaisedButton(
onPressed: foo,
child: Text("1"),
);
var button2 = RaisedButton(
onPressed: foo,
child: Text("2"),
);
但是问题是我无法获得按下的按钮,因为Flutter的RaisedButton小部件的“ onPressed”定义是VoidCallback,它不接收任何参数。是否有解决方法,或者还有另一种方法?
答案 0 :(得分:0)
但是您可以简单地创建函数并发送正确的参数,如下所示:
例如
double calculate(String operation, double val1, double val2) {
if(operation == 'add') {
return val1 + val2;
}
if(operation == 'multiply') {
return val1 * val2;
}
return 0;
}
var button1 = RaisedButton(
onPressed: (){
calculate('add', 3,4);
},
child: Text("1"),
);
var button2 = RaisedButton(
onPressed: (){
calculate('multiply', 3,4);
},
child: Text("2"),
);
看到您可以调用所需的任何函数。
答案 1 :(得分:0)
您可以添加按钮并设置 onPressed 回调,以调用收集值为按下的函数
// Call back function
onButtonPressed(int buttonValue){
print('You clicked $buttonValue');
// do your code here
}
// Button Widget
RaisedButton(onPressed: (){
setState(()
{
onButtonPressed(1);
});
},child: Text('1'),),