簡體   English   中英

Flutter State 管理(BloC):無狀態與有狀態小部件

[英]Flutter State Management (BloC): Stateless vs Stateful widget

所以我正在閱讀Bloc的 state 管理flutter

既然 Bloc 允許你下沉和 stream (根據輸入重建一個小部件),那么是否可以構建一個主要使用無狀態小部件的應用程序?

例如,假設我制作了許多單個無狀態 class 小部件,因此幾乎所有東西都被划分為自己的無狀態小部件。

使用 Bloc state 管理,我可以簡單地重建某個無狀態子小部件以反映更改。

在這種方法中,我認為不需要使用有狀態小部件。 當然,作為flutter的初學者,我想知道這種方法是否有任何優點。

這是一個好方法嗎? 任何信息將不勝感激。

你是對的,你只能使用 StatelessWidgets。 你只需要知道你在哪里創建你的集團。 某些實例化方式比其他方式更容易測試,例如將 bloc 作為參數傳遞給 StatelessWidget。

但是對於實現,我最喜歡flutter_bloc庫: https://pub.dev/packages/flutter_bloc

它包括自動處理塊的創建和處置的BlocProvider

要注意的另一件事是,您通常必須在一個塊中啟動一個事件才能執行某些操作,而StatefulWidget可能有助於在initState方法中運行它。

您可以在StatefulWidget中說:

initState(){
   _myBloc = SomeBloc()..add(SomeEvent());
}

// Then somewhere in your widget tree
BlocProvider<MyBloc>(
  create: (context) => _myBloc,
  builder: (context, state) {},
)

或者,在您的StatelessWidget中:

BlocProvider<MyBloc>(
  create: (context) => MyBloc()..add(SomeEvent()),
  builder: (context, state) {},
)

你會找到最適合你的,但我發現 Flutter 主要取決於特定功能的情況和目標。 沒有必要讓自己養成總是需要使用 StatelessWidget 的習慣,但你是對的,它是可能的。

您只能使用無狀態小部件。 但是有一個問題是你應該在應用程序被處理之前關閉流。 可以通過兩種方式處理:

  1. 首先,您可以在 stateful 的 dispose 方法中使用 Stateful 小部件並關閉 bloc 流。

  2. 使用 BlocProvider。 在這種情況下,Bloc Provider 只是一個有狀態的小部件。 它會自動關閉流。 然后你可以在 Stateless Widget 中使用 BlocProvider 來使用 bloc。

但這並不意味着我們不需要有狀態的小部件。 例如,有狀態的小部件在 animation 中很重要。 Animation、文本輸入或小部件本身的任何本地更改不應在 bloc 或其他 state 管理中處理。 這是小部件本身的職責。

使用 flutter bloc 模式的最佳方法是使用有狀態小部件,因為只要有更改,您就可以收聽 stream 和 setstate。

暫無
暫無

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

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