flutter_bloc 4.0.0 как получить свойства / параметры события

Я новичок в этой библиотеке и шаблоне BLOC, мне нужно получить все продукты и один продукт на основе определенного идентификатора.

Я видел много примеров, созданных с использованием этой библиотеки, эти люди получают параметр по событию.

В моем случае это не работает.

В. Как получить свойства события при расширении 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();
      }
    }
  }
}

person techieasif    schedule 23.04.2020    source источник
comment
когда вы проходите событие, входит ли он в какой-либо блок попыток?   -  person Viren V Varasadiya    schedule 23.04.2020
comment
Пытался добавить для обоих, но никто не принимал. аргументы.   -  person techieasif    schedule 23.04.2020
comment
Спасибо @VirenVVarasadiya, мой плохой, я расширял до equatable для всех событий вместо типа события. Расширяя тип события Everthing теперь работает нормально   -  person techieasif    schedule 23.04.2020
comment
Примите мой ответ, если он будет полезен. @ Techieasif   -  person Viren V Varasadiya    schedule 23.04.2020


Ответы (2)


Вы должны расширять 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];
}
person Federick Jonathan    schedule 23.04.2020

Вам нужно расширить 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]);

}
person Viren V Varasadiya    schedule 23.04.2020