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

Posted

技术标签:

【中文标题】如何通过 Flutter 中的 RaisedButton 传递/绑定值?【英文标题】:How do you pass/bind a value through a RaisedButton in Flutter? 【发布时间】:2018-03-14 02:22:58 【问题描述】:

我有一个 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,但我不确定它是否与我遇到的相同。

【问题讨论】:

【参考方案1】:

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

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

函数签名将是:

  void _navigateToRoute(String name)

【讨论】:

我想强调() =&gt; 部分是必不可少的。否则,您的方法将在构建期间立即被调用。【参考方案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

【讨论】:

以上是关于如何通过 Flutter 中的 RaisedButton 传递/绑定值?的主要内容,如果未能解决你的问题,请参考以下文章

我们如何使用 Flutter 中的底部导航栏触发有状态小部件以通过导航重建自身?

如何通过与 Flutter Cloud Firestore 插件中的日期进行比较来获取记录?

Flutter 如何遍历 ListView 中的每个项目?

如何通过 Dart/Flutter 中的“application/octet-stream”将 png 文件发送到 Microsoft Custom Vision?

如何保护 Flutter 中的代码篡改?

如何通过 Flutter 应用启动 whatsapp 视频通话?