flutter_blo c 4.0.0 как получить свойства / параметры события - PullRequest
0 голосов
/ 23 апреля 2020

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

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

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

Q. Как получить свойства события при расширении равных ?? внутри бл c.

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

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

Ответы [ 2 ]

0 голосов
/ 23 апреля 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]);

}
0 голосов
/ 23 апреля 2020

Вы должны продлить 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];
}
...