You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:45:07