在BLoC中,仅保留一个状态类通常是不好的做法。原因是如果您有多个状态,可能会更难查找问题或调试代码。 另外,如果您决定添加新状态,您必须要更新Bloc的状态类,这可能会导致代码变得混乱或难以维护。
可以采用以下方法解决:
abstract class MyBlocState {
const MyBlocState();
}
class InitialState extends MyBlocState {}
class LoadingState extends MyBlocState {}
class LoadedState extends MyBlocState {
final List items;
LoadedState({@required this.items}) : assert(items != null);
}
class ErrorState extends MyBlocState {}
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:meta/meta.dart';
import 'my_event.dart';
import 'my_state.dart';
import 'my_repository.dart';
class MyBloc extends Bloc {
final MyRepository repository;
MyBloc({@required this.repository}) : assert(repository != null);
@override
MyBlocState get initialState => InitialState();
@override
Stream mapEventToState(
MyEvent event,
) async* {
try {
yield LoadingState();
if (event is FetchItems) {
final items = await repository.getItems();
yield LoadedState(items: items);
}
} catch (_) {
yield ErrorState();
}
}
}
这样,您就可以在BLoC中更好地管理状态,而不会将所有状态与BLoC混合在一起。它更容易扩展和维护,也更易于阅读和调试。