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

如何获取数组中两个数组项的序列?

Linux 如何通过 iscsi target name 获取 ip

2021-07-13 R包安装出错与解决方法

android checkbox 能不能拦截点击事件

node.js createserver获取请求值

iOS遭遇最大危机?Xcode事件危及微信滴滴等主流App数亿用户,你中招了吗?