根据参数更改 BlocBuilder 的 bloc
Changing the bloc of a BlocBuilder depending on a parameter
我有一个 BlocBuilder,它允许我构建一个元素列表。所考虑的 BlocBuilder Bloc 在其状态下有 List<T>
个要显示的元素。
现在我想使用相同的 BlocBuilder,但使用不同的 Bloc 为其提供不同的数据源(另一个 Bloc 也将在其状态下保存 List<T>
)。这个新小部件将以与另一个小部件完全相同的方式显示信息,唯一改变的是内容和数据。
问题是我不想 copy/paste 我的整个 BlocBuilder 只是因为 Bloc 不同。我唯一需要更改的是,它必须是 BlocBuilder<BlocB, BlocBState>
而不是 BlocBuilder<BlocA, BlocAState>
,为此,我认为 copy/pasting 整个文件不值得。
我想知道是否可以仅使用三元运算符更改 Bloc 的类型。像
bool isTypeA;
BlocBuilder<isTypeA ? BlocA, BlocAState : BlocB, BlocBState>
如果我在 BlocBuilder 之前检查,我将不得不 copy/paste 我试图避免的全部内容。
bool isTypeA;
isTypeA ? return BlocBuilder< BlocA, BlocAState>(...) : return BlocBuilder< BlocB, BlocBState>(...)
首先,创建一个方法(甚至可以是构建函数中的本地方法)到 return 来自您的项目的小部件,无论它们来自哪里:
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));
我有一个 BlocBuilder,它允许我构建一个元素列表。所考虑的 BlocBuilder Bloc 在其状态下有 List<T>
个要显示的元素。
现在我想使用相同的 BlocBuilder,但使用不同的 Bloc 为其提供不同的数据源(另一个 Bloc 也将在其状态下保存 List<T>
)。这个新小部件将以与另一个小部件完全相同的方式显示信息,唯一改变的是内容和数据。
问题是我不想 copy/paste 我的整个 BlocBuilder 只是因为 Bloc 不同。我唯一需要更改的是,它必须是 BlocBuilder<BlocB, BlocBState>
而不是 BlocBuilder<BlocA, BlocAState>
,为此,我认为 copy/pasting 整个文件不值得。
我想知道是否可以仅使用三元运算符更改 Bloc 的类型。像
bool isTypeA;
BlocBuilder<isTypeA ? BlocA, BlocAState : BlocB, BlocBState>
如果我在 BlocBuilder 之前检查,我将不得不 copy/paste 我试图避免的全部内容。
bool isTypeA;
isTypeA ? return BlocBuilder< BlocA, BlocAState>(...) : return BlocBuilder< BlocB, BlocBState>(...)
首先,创建一个方法(甚至可以是构建函数中的本地方法)到 return 来自您的项目的小部件,无论它们来自哪里:
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));