используя шаблон BLoC с Flutter?

поэтому в настоящее время я работаю над проектом, использующим флаттер и шаблон BloC для обработки состояния, но я изо всех сил пытаюсь найти метод getBloc, поэтому, если есть кто-нибудь, кто может мне помочь, я буду очень благодарен.

itemContainerClass:

class ItemContainer extends StatelessWidget {
  final FoodItem foodItem;

  ItemContainer(@required this.foodItem);


  final CartListBloc bloc=CartProvider.getBloc<CartListBloc>();

  addToCart(FoodItem fooditem){
    bloc.addToList(foodItem);
  }

cartListBloc класс:

    import 'dart:async';
import 'package:bloc_pattern/bloc_pattern.dart';
import 'package:rxdart/rxdart.dart';

import 'package:fooddelivery/Food/foodItem.dart';
import 'provider.dart';

class CartListBloc extends BlocBase {
  CartListBloc();

//Stream that receives a number and changes the count;

  CartProvider _cartProvider = CartProvider();
  final _cartItemController= BehaviorSubject<List<FoodItem>>.seeded([]);

//output
  Stream<List<FoodItem>> get listStream => _cartItemController.stream;

  Sink<List<FoodItem>> get listSink => _cartItemController.sink;



//Business logic
  addToList(FoodItem _foodItem) {
    _cartItemController.sink.add(_cartProvider.addToList(_foodItem));
  }

  removeFromList(FoodItem _foodItem) {
    _cartItemController.sink.add(_cartProvider.removeFromList(_foodItem));
  }

//dispose will be called automatically by closing its streams
  @override
  void dispose() {
    _cartItemController.close();
    super.dispose();
  }
}

класс поставщика корзины:

import 'package:flutter/material.dart';
import 'package:fooddelivery/BLoC/cartListBloc.dart';

import 'package:fooddelivery/Food/foodItem.dart';


class CartProvider{
  List<FoodItem> _foodItems=[];


  List<FoodItem> addToList(FoodItem _foodItem){
    _foodItems.add(_foodItem);
    return _foodItems;
  }

  List<FoodItem> removeFromList(FoodItem _foodItem){
    _foodItems.remove(_foodItem);
    return _foodItems;
  }

}

Я пытаюсь выполнить какое-то руководство в Интернете, но я не смог его решить. Я здесь для любых разъяснений или более подробной информации.


person khaliloos benk    schedule 10.07.2019    source источник
comment
Я настоятельно не рекомендую использовать шаблон Bloc, он грязный и непонятный, используйте Архитектура поставщика. Поставщик - это ближе к шаблону mvvm, также проверьте это видео, в котором провайдер с прокси: D   -  person FabriBertani    schedule 10.07.2019
comment
Спасибо, братан, ты можешь сказать мне разницу между ними?   -  person khaliloos benk    schedule 10.07.2019


Ответы (1)


Я знаю, что этот пост старый, но на всякий случай, если кто-то это увидит.

Прежде всего, почему вы используете CartProvider.getBloc для получения блока? Поскольку вы определили CartProvider внутри блока, лучше просто объявить блок следующим образом:

последний блок = CartListBloc ();

Во-вторых, заявленные вами события не очень ясны. Кажется, вы хотите иметь возможность добавлять и удалять элемент из списка, верно?

Таким образом, добавление событий должно вызываться на уровне пользовательского интерфейса всякий раз, когда пользователь нажимает кнопку (например, при обратном вызове onTap).

onTap: () => bloc.addToList (новыйItem)

Но если это просто список, вам, вероятно, не нужен Блок. Потому что Bloc предназначен для управления потоком данных, который может поступать в любое время. Или управление состояниями в зависимости от потока данных. Или, возможно, у вас есть другие варианты использования?

В любом случае, для блоков с Flutter я настоятельно рекомендую пакет flutter_bloc (https://pub.dev/packages/flutter_bloc) и реализовать все классы состояний и событий вместе. Сначала определите свои события и состояния, а затем реализуйте свои логические компоненты.

Или для более простой версии Bloc есть хорошее руководство по этому поводу, которое можно найти здесь:

person Zenko    schedule 26.12.2019