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

Flutter 跨类传递列表始终为空 底部导航关联页面传值异常

问题根源
  • onPressed回调中创建的MesFavorisOn实例未实际生效:该代码仅在回调作用域内生成了新的页面对象,既未绑定路由跳转逻辑,也未更新底部导航的页面列表,不会产生实际作用。
  • 底部导航页面列表配置写死了空数组:_buildScreens方法中直接传入MesFavorisOn(arr: []),底部导航切换时永远使用这个传了空数组的实例,因此获取到的列表始终为空。
解决方案

根据使用场景分为两种实现方式:

场景1:点击按钮跳转至独立的MesFavorisOn页面(不使用底部导航的预置标签)

直接修改onPressed逻辑,通过路由传递列表并打开新页面即可:

onPressed: () {
  Navigator.of(context).push(MaterialPageRoute(
    builder: (context) => MesFavorisOn(arr: Items),
  ));
}

该场景无需修改底部导航的原有配置。

场景2:点击按钮切换至底部导航的MesFavorisOn标签,且标签页需拿到更新后的列表

需要将共享列表抽到底部导航的父组件做状态管理,修改步骤如下:

  1. 在底部导航父组件的State类中定义可更新的列表变量:
List<Item> favorisArr = [];
  1. 修改_buildScreens方法,使用上述变量传值,替换写死的空数组:
List<Widget> _buildScreens() {
  return [
    ProchainesState(),
    MesEncheres(),
    MesFavorisOn(arr: favorisArr),
    Autres(),
  ];
}
  1. 在Prochaines类中增加更新回调,点击按钮时将列表同步到父组件:
// Prochaines类构造函数新增参数
final Function(List<Item>) onFavorisUpdate;
const Prochaines({super.key, required this.onFavorisUpdate});

// 按钮点击事件逻辑
onPressed: () {
  // 同步列表到父组件
  onFavorisUpdate(Items);
  // 若需要同时切换到底部导航的MesFavorisOn标签,补充以下代码(currentIndex为底部导航当前选中索引的变量)
  // setState(() { currentIndex = 2; });
}
  1. 父组件初始化Prochaines时传入回调,更新列表后触发重建:
List<Widget> _buildScreens() {
  return [
    Prochaines(
      onFavorisUpdate: (list) {
        setState(() {
          favorisArr = list;
        });
      }
    ),
    MesEncheres(),
    MesFavorisOn(arr: favorisArr),
    Autres(),
  ];
}

如果后续需要对列表做增删改操作,也可以直接修改父组件的favorisArr并调用setState,MesFavorisOn会自动拿到最新的列表数据。

内容的提问来源于stack exchange,提问作者Wassef Hassine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:36:01