我正在开发一个外卖应用程序,用户点击add items from restaurantDetail screen并将项目添加到购物车中。在购物车屏幕中,当用户在特定商品计数中进行更改时。我想在restaurantDetail屏幕上更新每个项目中的相同项目计数?
我正在从cartlist的回调中传递整个购物车列表,并在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();
}
}
发布于 2021-06-23 06:21:08
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
.....
),
);
}
}
https://stackoverflow.com/questions/68093806
复制