簡體   English   中英

根據參數更改 BlocBuilder 的塊

[英]Changing the bloc of a BlocBuilder depending on a parameter

我有一個 BlocBuilder,它允許我構建元素列表。 BlocBuilder 所考慮的 Bloc 在其 state 中包含要顯示的元素的List<T>

現在我想使用相同的 BlocBuilder 但使用不同的 Bloc 為其提供不同的數據源(另一個 Bloc 也將在其狀態下保存List<T> )。 這個新的小部件將以與另一個小部件完全相同的方式顯示信息,唯一改變的是內容,即數據。

問題是我不想僅僅因為 Bloc 不同就復制/粘貼我的整個 BlocBuilder。 我唯一需要改變的是,它必須是BlocBuilder<BlocB, BlocBState>而不是BlocBuilder<BlocA, BlocAState> <BlocA, BlocBState> ,為此,我認為復制/粘貼整個文件不值得。

我想知道是否可以僅使用三元運算符來更改 Bloc 的類型。 就像是

bool isTypeA;

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

如果我在 BlocBuilder 之前檢查,我將不得不復制/粘貼我試圖避免的全部內容。

bool isTypeA;

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

首先,創建一個方法(甚至可以是構建函數中的本地方法)從您的項目中返回一個小部件,無論它們來自何處:

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

然后在您的構建 function 中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM