【问题标题】:Flutter passing list to another class is always empty颤振传递列表到另一个类总是空的
【发布时间】:2021-10-28 19:21:58
【问题描述】:

我正在尝试将一个列表从一个类发送到另一个类,但它总是空的,我有一个名为 Prochaines() 的类,它有一个名为 Items 的列表,我想将它发送到另一个名为 MesFavorisOn() 的类并且有它是自己的构造函数

List<Item> arr;
  MesFavorisOn({required this.arr});

我正在尝试使用按钮单击传递列表

     onPressed: () {  
            MesFavorisOn(arr: Items);
}

顺便说一句,从底部导航栏访问 MesFavorisOn 的唯一方法,我在底部导航栏的屏幕列表中有这个,我不确定,但我认为这个列表是空的

 List<Widget> _buildScreens() {
      return [
        ProchaineState(),
        MesEncheres(),
        MesFavorisOn(arr: []),
        Autres(),
      ];
    }

【问题讨论】:

    标签: list flutter class


    【解决方案1】:

    你需要提升状态。

    1. 确保包含 _buildScreens 方法的 Widget 也具有 items 属性/字段

    2. 确保包含 _buildScreens 方法的 Widget 具有名为 updateItems 的新方法

    3. 通过其参数将updateItems传递给 ProchaineState,作为回调。

    4. 在 ProchaineState 中的 onPressed 方法上,确保它调用回调 updateItems

    这是 Flutter 中状态管理的基础。使用这种方法的缺点是,所有内置在 _buildScreens 方法中的小部件都会在触发 onPressed 的同时重新渲染

    如果需要,我们可以使用其他库进行改进,例如 Riverpod 或 Bloc

    【讨论】:

      【解决方案2】:

      您的onPressed 并没有真正做任何事情,相反,您可以在_buildScreens() 处将Items 分配给MesFavoritesOn(arr:Items),然后如果您想用Items 的更新来更新MesFavoriteOn,您可以只需在您的onPressed 中添加setState

      【讨论】:

      • 我明白,但问题是我需要从列表项中填写一个新列表并将其发送到 MesFavorisOn 类,当用户单击添加按钮时需要填写新列表跨度>
      • 这就是setState 将要做的,将重建_buildScreens,从而用新数据传递MesFavoritesOn。当您按下按钮时,我假设 Items 已经充满了新数据,对吧?
      • 但在 _buildScreens() 处执行 MesFavoritesOn(arr:Items) 的唯一方法是在此处声明整个列表,
      猜你喜欢
      • 2021-10-23
      • 2021-10-02
      • 2020-10-08
      • 1970-01-01
      • 2020-02-11
      • 2021-09-20
      • 1970-01-01
      • 2021-08-07
      • 2020-07-25
      相关资源
      最近更新 更多