我正在开发一个送餐应用,用户在该应用中点击从 restaurantDetail 屏幕添加商品并将商品添加到购物车。当用户更改特定项目计数时在购物车屏幕中。我想在 restaurantDetail 屏幕上更新每个项目的相同项目计数?
我正在从购物车列表的回调中传递整个购物车列表,并在 restaurantDetail 屏幕上获取相同的列表。如何更新其中的项目计数?
在回调中,我返回这个函数,并以一个 total 和 callbackFromCart 作为参数。
final Function(double, List<CartModel>) callbackFromCart;
在 RestaturantDetailScreen 上,我在以下函数中得到相同的结果:
onCartBackPress(totalPriceFromCart, List<CartModel> _listFromCartItem) {
print("LIST FROM CART :${_listFromCartItem}");
for (var item in _listFromCartItem) {
for (var mainrestaurantItem in _itemList) {
if (mainrestaurantItem.id == item.restaurantItemId) {
mainrestaurantItem.totalQty = item.totalQty;
updatedItemCount = mainrestaurantItem.totalQty;
print("UPDATED ITEM COUNT : $updatedItemCount");
}
}
}
setState(() {
_totalPrice = totalPriceFromCart;
});
print(_itemList);
if (_listFromCartItem.isEmpty == true) {
getRestaurantDetail();
}
}
答案 0 :(得分:0)
class _RestaurantState extends State<RestaurantPage> {
StreamController<List<YourItemModel> itemsController = StreamController<List<YourItemModel>>();
List<YoutItemModel> itemsList = [];
@override
Widget build(BuildContext context) {
.....
StreamBuilder<List<YourItemModel>(
stream: itemsController.stream,
builder: (con, data){
//check for loading or empty data here
//else return listview
return ListView.builder(
......
);
}
),
.....
override
void dispose(){
itemsController.close();
super.dispose();
}
}
void gotoCartPage() async {
List<YourItemModel> newList = await Navigator.push(
context, builder: (c)=> CartPage(items: itemsList));
if(newList != null){
itemsList.clear();
itemsList.addAll(newList);
itemsController.sink.add(itemsList);
}
}
}
// In CartPage
class CartPage extends StatefulWidget{
final List<YourItemModel> list;
CartPage({Key k, required this.list}) : super(key:k);
@override
_CartPageState createState() => _CartPageState(list);
}
class _CartPageState extends State<CartPage> {
_CartPageState(this.modifiedList);
List<YourItemModel> modifiedList;
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: (){
Navigator.of(context).pop(modifiedList);
return Future.value(true);
},
child: Scaffold(
//Increase or decrease your items from itemsList in CartPage
//and return modified list to the parent/restaurant screen
.....
),
);
}
}