Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 颤振列表视图项单击侦听器_Dart_Flutter - Fatal编程技术网

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)
);