[英]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.