flutter_bloc 4.0.0如何获取事件属性参数。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flutter_bloc 4.0.0如何获取事件属性参数。相关的知识,希望对你有一定的参考价值。
我对这个库和BLOC模式也很陌生,我需要根据一个特定的id来获取所有产品和一个产品。
我看到很多使用这个库的例子,那些人都是通过event.paramter来获取参数。
在我的情况下,它不工作。
Q. 在bloc.dart.events.dart中扩展equatable时如何获取事件属性?
event.dart
abstract class ProductsEvent extends Equatable {
const ProductsEvent();
}
class FetchProducts extends Equatable{
@override
List<Object> get props => [];
}
class FetchSingleProduct extends Equatable{
final int id;
const FetchSingleProduct({@required this.id}) : assert(id !=null);
@override
List<Object> get props => [id];
}
Bloc.dart
class ProductsBloc extends Bloc<ProductsEvent, ProductsState> {
final AbstractProductsRepository abstractProductsRepository;
ProductsBloc(this.abstractProductsRepository);
@override
ProductsState get initialState => InitialProductsState();
@override
Stream<ProductsState> mapEventToState(
ProductsEvent event,
) async* {
yield ProductsLoadingState();
if(event is FetchProducts){
try{
final productsData = await abstractProductsRepository.fetchProducts();
yield ProductsLoadedState(productsData);
}on Error{
print("Error in Block");
yield ProductErrorState();
}
}else if(event is FetchSingleProduct){
try{
//Event.id - not working.
final productData = await abstractProductsRepository.fetchSingleProduct(**event.id**);
yield SingleProductLoaded(productData);
}on Error{
print("Error in Block");
yield ProductErrorState();
}
}
}
}
答案
你应该扩展ProductsEvent
abstract class ProductsEvent extends Equatable {
const ProductsEvent();
}
class FetchProducts extends ProductsEvent {
@override
List<Object> get props => [];
}
class FetchSingleProduct extends ProductsEvent {
final int id;
const FetchSingleProduct({@required this.id}) : assert(id !=null);
@override
List<Object> get props => [id];
}
另一答案
你需要扩展ProductsEvent,如下图所示,并且你必须将道具传递给超级类。
@immutable
abstract class ProductsEvent extends Equatable {
ProductsEvent([List props = const []]) : super(props);
}
class FetchProducts extends ProductsEvent {
@override
String toString() => 'LoadTodos';
}
class FetchSingleProduct extends ProductsEvent {
final int id;
AddTodo(this.id) : super([id]);
}
以上是关于flutter_bloc 4.0.0如何获取事件属性参数。的主要内容,如果未能解决你的问题,请参考以下文章
从 v7.2.1 迁移到 flutter_bloc v 8.0.0 后不会触发 flutter_bloc 事件