簡體   English   中英

重新加載小部件樹時未重新創建顫動 BlocProvider

[英]flutter BlocProvider not recreated when widget tree is reloaded

我在我的應用程序中使用 Flutter Bloc ( https://bloclibrary.dev ),但是當重新加載小部件樹時,我無法重新初始化 bloc 提供程序。

我的應用程序中樹結構的簡化版本如下所示

[BlocProviderA]
  -> [BlocBuilderA]
    -> [PageView] // this shouldn't really matter but showing it here anyway in case it does :) 
      -> [BlocProviderB]
        -> [BlocBuilderB]

在某些情況下,BlocA 的狀態會發生變化,因此 BlocBuilderA 將重建並返回一個新的子節點(PageView),樹結構相同但帶有一些新數據。 但是,當我用 BlocBuilderA 替換小部件樹時,永遠不會重新創建 BlocProviderB(永遠不會調用 BlocProvider.create)。 雖然 BlocBuilderB 被調用。

任何人都可以解釋為什么會發生這種情況嗎? 舊小部件樹是否只是簡單地重用,這就是為什么 BlocProvider.create 永遠不會被 BlocProviderB 調用的原因?

如果新子樹中的鍵和小部件相等,則該元素似乎被重用。 我設法通過為 PageView 分配一個新鍵來“強制”重新創建子樹。

您希望如何在項目中包含 BLoC 有兩種用法。

  • 首先你有一個包含多個事件的組件
  • 其次,你有一個小部件樹,你想在兩者之間傳遞你的集團

您需要在小部件的 init 中為它們創建一個實例,並直接在父組件中使用它,並在子組件的 build 方法中傳遞它。

如果您還沒有找到答案,請在回復中添加更多詳細信息!

暫無
暫無

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

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