所以我目前正在使用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;
}
}
我正在尝试按照网络上的一些教程进行操作,但并没有解决。 我在这里有任何澄清或更多细节。
答案 0 :(得分: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
我希望这会有所帮助,不要让您感到困惑。