Dart 颤振列表视图项单击侦听器
我有一个Dart 颤振列表视图项单击侦听器,dart,flutter,Dart,Flutter,我有一个列表视图,我想导航到单击项目的下一页 我需要我的列表视图的已单击项的索引。 我知道这可以使用控制器完成。但是我找不到任何示例。您应该在ListView中的项目中使用onPressed方法(或添加一个手势检测器),然后使用Navigator,类似于下面的代码段,其中AboutScreen是您要转到的下一页 onPressed: () { Navigator.push( context, MaterialPageRoute(builder: (context) => Ab
列表视图
,我想导航到单击项目的下一页
我需要我的列表视图的已单击项的索引。
我知道这可以使用控制器完成。但是我找不到任何示例。您应该在ListView中的项目中使用onPressed方法(或添加一个手势检测器),然后使用Navigator,类似于下面的代码段,其中AboutScreen是您要转到的下一页
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => AboutScreen()),
);
}
为GestureRecognitor(或按钮)添加onTap时,闭包可以捕获在itemBuilder中传递的索引
例如
此代码将显示一个包含您点击的ListItem索引的快餐店
一旦您有了该项目的索引,您就可以使用此问题的其他答案提供的代码导航到新页面 如果使用的是ListView.builder
,则可以使用listile
添加onTap
。这将确保您具有材质涟漪效应
ListView.builder(
itemBuilder:(u,i){
返回列表块(
标题:文本(“$i”),
onTap:(){},//在这里处理您的onTap。
);
},
)
颤振文档中有一个例子,实际上就是这种情况(导航到下一页,点击项目)
正如其他人所说,在ListView.builder
中的项目上使用onTap
。我只是想把这个例子的链接贴出来,以防其他人需要更全面的解释
。。。
最后的待办事项清单;
...
ListView.builder(
itemCount:todos.length,
itemBuilder:(上下文,索引){
返回列表块(
标题:文本(todos[index].title),
onTap:(){
//使用Navigator.push转到下一屏幕
},
);
},
);
另一种选择是使用InkWell
InkWell
在水龙头上有一个很好的涟漪效果,这是GestureDetector
没有的
这样使用:
return Scaffold(
appBar: AppBar(title: Text("Hello World")),
body: ListView.builder(
itemBuilder: (BuildContext context, int index) {
return InkWell(
child: Text(index.toString()),
onTap: () => Scaffold.of(context)
.showSnackBar(SnackBar(content: Text(index.toString()))),
);
},
itemCount: 10)
);
为什么投票被否决?对于从ListView中的项目导航到另一个屏幕(或至少一种方式),答案是正确的。也许您应该解释一下,或者提供一个不同的解决方案。回调的名称取决于如何实现,如果ListView中的项是某种类型的按钮(FlatButton、IconButton等),则使用onPressed作为示例。如果使用手势检测器,则可以使用onTap。您需要查看类文档,以查看哪个回调最适合您的用例。不需要flatter sdk
标记,请参阅标记的说明i将用于InkWell
而不是GestureDetector
,因为它添加了点击涟漪并具有onTap()
还有一个不同之处,就是包含了来自颤振文档的链接和示例代码。请注意,InkWell是一个重要的小部件,在iOS中不起作用
...
final List<Todo> todos;
...
ListView.builder(
itemCount: todos.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(todos[index].title),
onTap: () {
//Go to the next screen with Navigator.push
},
);
},
);
return Scaffold(
appBar: AppBar(title: Text("Hello World")),
body: ListView.builder(
itemBuilder: (BuildContext context, int index) {
return InkWell(
child: Text(index.toString()),
onTap: () => Scaffold.of(context)
.showSnackBar(SnackBar(content: Text(index.toString()))),
);
},
itemCount: 10)
);