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如何获取事件属性参数。的主要内容,如果未能解决你的问题,请参考以下文章

使用flutter_bloc提交时如何验证表单?

从 v7.2.1 迁移到 flutter_bloc v 8.0.0 后不会触发 flutter_bloc 事件

flutter_bloc(在事件处理程序正常完成后调用发出

在使用 flutter_bloc 库调度事件之前等待一些结果

如何在颤振中使用 BlocProvider

如何在 Flutter App 中正确使用 BlocListener 和 BlocProvider