使用“bloc”,您需要构建您的事件,Bloc 中的状态将是这样的:
事件将是触发 Bloc 的地方。
part of 'something_bloc.dart';
@immutable
abstract class SomethingEvent{}
class ListOfSomething extends SomethingEvent{}
class SomethingElse extends SomethingEvent{
final String input;
SomethingElse({this.input});
List<Object> get props => [input];
}
状态是事件中触发的结果将在哪里表现出来,无论成功还是不成功:
part of 'Something_bloc.dart';
@immutable
abstract class SomethingState{}
class SomethingInitial extends SomethingState{}
class SomethingLoading extends SomethingState{}
class SomethingSuccess extends SomethingState{
final String success;
SomethingSuccess({this.success});
}
“块”是管理这些事件和状态的地方:
part 'something_event.dart';
part 'something_state.dart';
class SomethingBloc extends Bloc<SomethingEvent,SomethingState>{
final ServiceFacade service;
SomethingBloc({this.service});
@override
SomethingState get initialState => SomethingInitial();
@override
Stream<SomethingState> mapEventToState(SomethingEvent event) async* {
if(event is SomethingEvent){
final failureOrSuccess = await service.call(event.cardId);
yield failureOrSuccess.fold(
(failure) => (failure is GeneralFailure)
? SomethingErrorState(error: failure.message)
: null,
(list) => SomethingState(success: list)
);
}
}
}
屏幕将如下所示,您可以在OnPressed 中触发事件,或者在initState() 中对其进行初始化:
BlocConsumer<SomethingBloc, SomethingState>(
listener: (context, state) {
if (state is SomethingLoadingState) {
} else if (state is SomethingErrorState) {
} else if (state is SomethingSuccess) {
}
},
builder: (context, state) {
if (state is SomethingSuccess) {
return Padding(
padding: paddingHorizontal,
child: Column(
children: <Widget>[
for (var item in state.list)
Container(
child: Text('${item}')
)
]
),
);
} else {
return Container();
}
},
),
我希望我在一般方面有所帮助。