Flutter搜索功能中如何在SearchDelegate的buildResults内跳转页面
Flutter SearchDelegate的buildResults中实现页面跳转的方法
场景1:点击搜索结果项跳转(最常用场景)
直接在搜索结果组件的交互回调(如onTap)中调用Navigator即可,示例代码如下:
@override Widget buildResults(BuildContext context) { // 假设这是你的搜索结果列表 final List<String> searchResults = ['结果1', '结果2', '结果3']; return ListView.builder( itemCount: searchResults.length, itemBuilder: (context, index) { return ListTile( title: Text(searchResults[index]), onTap: () { // 这里执行页面跳转逻辑 Navigator.push( context, MaterialPageRoute(builder: (context) => const YourTargetPage()), ); // 如果跳转后需要关闭搜索页,可以同时调用 close 方法 // close(context, searchResults[index]); }, ); }, ); }
场景2:进入buildResults后自动跳转
不能直接在buildResults方法体内调用Navigator,因为build方法执行阶段属于组件渲染流程,不能直接执行导航类副作用操作,需要将导航逻辑延迟到当前帧渲染完成后执行,示例如下:
@override Widget buildResults(BuildContext context) { WidgetsBinding.instance.addPostFrameCallback((_) { // 帧渲染完成后执行跳转 Navigator.push( context, MaterialPageRoute(builder: (context) => const YourTargetPage()), ); // 可选:关闭当前搜索页 // close(context, null); }); // 跳转前可以先展示加载占位UI return const Center(child: CircularProgressIndicator()); }
内容的提问来源于stack exchange,提问作者mossZmossZ
相关产品推荐
相关产品推荐

