Mar*_*ary 6 parameters listview button parameter-passing flutter
我有一个RaisedButtons的ListView,其中每个RaisedButton都是这样的.name每个RaisedButton 的变量都不同:
new RaisedButton(
onPressed: _navigateToRoute,
child: new Text(name),
),
Run Code Online (Sandbox Code Playgroud)
点击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'),
);
},
));
}
Run Code Online (Sandbox Code Playgroud)
当一个特定的RaisedButton被点击时(例如,让我们说我们点击ListView中的第一个RaisedButton,在哪里name = 'Hello'),我想将name变量传递给新路由.我怎么做?是否有存储的方式name在context变?我应该使用另一个小部件而不是RaisedButton吗?
我可以使用命名导航器路由,但我不想为ListView中的每个项目硬编码路由.
我发现了这个Github问题,我不确定这是否与我遇到的情况相同.
Mar*_*ary 10
您可以将名称作为输入传递给onPressed函数.即
new RaisedButton(
onPressed: () => _navigateToRoute(name),
child: new Text(name),
),
Run Code Online (Sandbox Code Playgroud)
函数签名将是:
void _navigateToRoute(String name)
Run Code Online (Sandbox Code Playgroud)
您可以将任何变量传递给方法:
new RaisedButton(
onPressed: () => _navigateToRoute(name),
child: new Text(name),
),
Run Code Online (Sandbox Code Playgroud)
只要你定义你的方法就可以接收变量。你可以用那个变量做任何你想做的事情。
void _navigateToRoute(String name) {
Navigator.of(context).push(new MaterialPageRoute<Null>(
builder: (BuildContext context) {
return new Scaffold(
body: new Text(name),
);
},
));
}
Run Code Online (Sandbox Code Playgroud)
你甚至可以在你的类层次结构中进一步向下传递它:
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
}
Run Code Online (Sandbox Code Playgroud)