【问题标题】:Changing the bloc of a BlocBuilder depending on a parameter根据参数更改 BlocBuilder 的块
【发布时间】:2021-06-22 01:19:58
【问题描述】:

我有一个 BlocBuilder,它允许我构建元素列表。 BlocBuilder 的所考虑的 Bloc 在其状态中具有要显示的元素的 List<T>

现在我想使用相同的 BlocBuilder 但使用不同的 Bloc 为其提供不同的数据源(另一个 Bloc 也将在其状态下保存 List<T>)。这个新的小部件将以与另一个小部件完全相同的方式显示信息,唯一改变的是内容,即数据。

问题是我不想仅仅因为 Bloc 不同就复制/粘贴整个 BlocBuilder。我唯一需要改变的是,它必须是BlocBuilder<BlocB, BlocBState>,而不是BlocBuilder<BlocA, BlocAState>,为此,我认为复制/粘贴整个文件是不值得的。

我想知道是否可以仅使用三元运算符来更改 Bloc 的类型。类似的东西

bool isTypeA;

BlocBuilder<isTypeA ? BlocA, BlocAState : BlocB, BlocBState>

如果我在 BlocBuilder 之前检查,我将不得不复制/粘贴我试图避免的整个内容。

bool isTypeA;

isTypeA ? return BlocBuilder< BlocA, BlocAState>(...) : return BlocBuilder< BlocB, BlocBState>(...) 

【问题讨论】:

    标签: flutter dart conditional-operator bloc


    【解决方案1】:

    首先,创建一个方法(甚至可以是构建函数中的本地方法)以从您的项目中返回一个小部件,无论它们来自何处:

    Widget buildFromItems(List<ItemType> items) {
        return // something that creates a view of your items, maybe a ListView
    }
    

    然后在你的构建函数中:

    return isTypeA 
        ?  BlocBuilder<BlocA, BlocAState>(builder:
              (context, Astate) => buildFromItems(Astate.ItemList))
        :  BlocBuilder<BlocB, BlocBState>(builder:
              (context, Bstate) => buildFromItems(Bstate.ItemList));
    

    【讨论】:

      猜你喜欢
      • 2021-04-21
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多