使用带有Flutter的BLoC模式吗?

问题描述 投票:0回答:1

所以我目前正在使用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;
  }

}

我正在尝试遵循网络上的一些教程,但是我没有解决。我在这里有任何澄清或更多详细信息。

flutter bloc
1个回答
0
投票

我知道这篇文章很旧,但是以防万一有人看到了。

首先,为什么要使用CartProvider.getBloc来获取集团?由于您已在集团内部定义了CartProvider,因此最好这样声明集团:

最终块= CartListBloc();

然后,您声明的事件不是很清楚。似乎您想添加和删除列表中的内容,对吗?

因此,每当用户单击按钮时(例如,在onTap回调上),都应在UI级别中调用事件添加。

onTap:()=> bloc.addToList(newItem)

但是如果只是列表,则可能不需要Bloc。因为Bloc用于管理随时可能出现的数据流。或根据数据流管理状态也许您还有其他用例?

无论如何,对于具有Flutter的Bloc,我强烈建议使用flutter_bloc软件包(https://pub.dev/packages/flutter_bloc),并完全实现所有状态和事件类。首先定义事件和状态,然后实现逻辑组件。

或者对于Bloc的简单版本,可以在这里找到一个很好的教程:https://www.youtube.com/watch?v=Un7eG5hHNPg&list=PLRAV69dS1uWT_JKom7xDKdHl1gp3o_AH1

我希望这会有所帮助,不要让您感到困惑。

© www.soinside.com 2019 - 2024. All rights reserved.