如何通过Flutter中的RaisedButton传递/绑定值?

时间:2017-10-02 23:49:20

标签: listview button parameters parameter-passing flutter

我有一个RaisedButtons的ListView,其中每个RaisedButton都是这样的。每个RaisedButton的name变量都不同:

  new RaisedButton(
      onPressed: _navigateToRoute,
      child: new Text(name),
  ),

点击RaisedButton调用_navigateToRoute():

  void _navigateToRoute() {
    Navigator.of(context).push(new MaterialPageRoute<Null>(
      builder: (BuildContext context) {
        return new Scaffold(
          body: new Text('A value with the word "Hello" should go here'),
        );
      },
    ));
  }

当点击特定的RaisedButton时(例如,假设我们点击ListView中的第一个RaisedButton,其中name = 'Hello'),我想将name变量传递给新路由。我怎么做?有没有办法将name存储在context变量中?我应该使用另一个小部件而不是RaisedButton吗?

我可以使用Named Navigator Route,但我不想为ListView中的每个项目硬编码路径。

我发现this Github issue,我不确定这是否与我遇到的情况相同。

2 个答案:

答案 0 :(得分:8)

您可以将名称作为输入传递给onPressed函数。即

  new RaisedButton(
      onPressed: () => _navigateToRoute(name),
      child: new Text(name),
  ),

函数签名将是:

  void _navigateToRoute(String name)

答案 1 :(得分:2)

您可以将任何变量传递给方法:

new RaisedButton(
  onPressed: () => _navigateToRoute(name),
  child: new Text(name),
),

只要您定义您的方法以便能够接收变量。你可以用你的变量做任何你想做的事。

void _navigateToRoute(String name) {
  Navigator.of(context).push(new MaterialPageRoute<Null>(
    builder: (BuildContext context) {
      return new Scaffold(
        body: new Text(name),
      );
    },
  ));
}

您甚至可以在类层次结构中向下传递它:

void _navigateToRoute(String name) {
  Navigator.of(context).push(new MaterialPageRoute<Null>(
    builder: (BuildContext context) {
      return new MyNewPage(name);
    },
  ));
}

class MyNewPage extends StatelessWidget {
  String name;
  MyNewPage(this.name);

  ...rest of the widget code
}