首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flutter_bloc 4.0.0如何获取事件属性/参数

flutter_bloc 4.0.0如何获取事件属性/参数
EN

Stack Overflow用户
提问于 2020-04-23 21:04:30
回答 2查看 815关注 0票数 0

我对这个库和区块模式也很陌生,我需要获取所有产品和基于特定id的单个产品。

我看过很多使用这个库创建的例子,这些人都是通过event.paramter获取参数的

在我的情况下,它不工作。

问:如何在扩展equatable时获取事件属性?在区块内部。

events.dart

代码语言:javascript
复制
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

代码语言:javascript
复制
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();
      }
    }
  }
}
EN

回答 2

Stack Overflow用户

发布于 2020-04-23 21:27:58

你应该扩展ProductsEvent

代码语言:javascript
复制
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];
}
票数 0
EN

Stack Overflow用户

发布于 2020-04-23 21:35:49

你需要像下面这样扩展ProductsEvent,并且你还必须将道具传递给超类。

代码语言:javascript
复制
@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]);

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61387972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档