【问题标题】:flutter_bloc 4.0.0 how to get event properties/parametrsflutter bloc 4.0.0 如何获取事件属性/参数
【发布时间】:2020-08-06 19:44:25
【问题描述】:

我对这个库和 BLOC 模式也很陌生,我需要根据特定 id 获取所有产品和单个产品。

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

在我的情况下它不起作用。

问。如何在扩展 equatable 时获取事件属性?集团内部。

events.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();
      }
    }
  }
}

【问题讨论】:

  • 当你传递事件时,它会进入任何 try bloc 吗?
  • 尝试为两者添加,但没有接受。论据。
  • Thanx @VirenVVarasadiya,我的错,我正在扩展到所有事件而不是事件类型的平等。通过扩展事件类型 Everthing 现在工作正常
  • 如果有用,请接受我的回答。@techieasif

标签: flutter bloc flutter-bloc


【解决方案1】:

你应该扩展 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];
}

【讨论】:

    【解决方案2】:

    您需要像下面这样扩展 ProductsEvent 并且还必须将 props 传递给超类。

    @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]);
    
    }
    

    【讨论】:

      猜你喜欢
      • 2019-11-15
      • 2021-05-17
      • 2021-06-17
      • 2022-07-26
      • 2023-02-17
      • 2020-09-19
      • 2021-12-07
      • 2020-08-17
      • 2021-06-07
      相关资源
      最近更新 更多