如何使用回调方法获取Flutter中的按钮文本?

问题描述 投票:0回答:2

我刚开始使用Flutter,我正在制作一个计算器。我想为我的按钮设置不同的回调方法来执行各种操作。问题是,我想获取单击按钮的文本以了解我应该执行的操作,但回调方法似乎不包含“发送方窗口小部件”的任何信息。

在C#中,我可以执行下一步操作,其中“sender”是单击的按钮。

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中,“event”包含单击的按钮。

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,它不接收任何参数。有没有针对此的解决方法,还是有其他方法可以做到这一点?

flutter
2个回答
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"),
);

看你可以调用你想要的任何功能。


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'),),
© www.soinside.com 2019 - 2024. All rights reserved.