![](/img/trans.png)
[英]flutter_bloc/provider RepositoryProvider vs Provider
[英]Flutter Bloc vs Provider State Manament for "InProgress"
我可以通過Flutter Bloc 中的“yield”操作符管理 InProgress 狀態,
我的集團:
@override
Stream<ContentState> mapEventToState(
ContentEvent event,
) async* {
if (event is ContentStarted) {
yield ContentLoadInProgress(); //yeah
var content= await repository.getContent();
yield ContentLoadSuccess(content);
}
...
}
頁:
builder: (context, state) {
if (state is ContentInProgress) {
return LoadingWidget(); //showing CircularProgressIndicator Widget
} else if (state is ContentLoadSuccess) {
return Text(state.content);
}
(狀態:InitState、ContentLoadInProgress、ContentLoadSuccess、ContentLoadFailure)
如何在Provider State Management 中管理“ContentLoadInProgress”狀態?
您可以將狀態保留為enum
enum ContentStates {
InitState,
ContentLoadInProgress,
ContentLoadSuccess,
ContentLoadFailure,
}
在您的提供者類中:
class ContentProvider with ChangeNotifier {
ContentState state = ContentStates.InitState;
Content content;
yourEvent() {
state = ContentStates.ContentLoadInProgress;
notifyListeners(); // This will notify your listeners to update ui
yourOperations();
updateYourContent();
state = ContentStates.ContentLoadSuccess;
notifyListeners();
}
}
在您的小部件中,您可以使用Consumer
(假設您已經在小部件樹中使用了上面的ChangeNotifierProvider
)
Consumer(
builder: (context, ContentProvider provider, _) {
if (provider.state == ContentStates.ContentLoadInProgress) {
return LoadingWidget();
} else if (provider.state == ContentStates.ContentLoadSucces) {
// use provider.content to get your content
return correspondingWidget();
} else if .... // widgets for other states
}
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.