如何在颤动中将商品计数从购物车屏幕更新到餐厅详细信息屏幕并返回到餐厅详细信息屏幕?
Posted
技术标签:
【中文标题】如何在颤动中将商品计数从购物车屏幕更新到餐厅详细信息屏幕并返回到餐厅详细信息屏幕?【英文标题】:How to update item count from cartscreen to and back to restaurant detail screen in flutter? 【发布时间】:2021-09-06 15:40:18 【问题描述】:我正在开发一个送餐应用程序,用户在该应用程序中单击从 restaurantDetail 屏幕添加项目并将项目添加到购物车。当用户更改特定项目计数时,在购物车屏幕中。我想在 restaurantDetail 屏幕上更新每个项目的相同项目数?
我正在通过来自购物车列表的回调传递整个购物车列表,并在 restaurantDetail 屏幕上获取相同的列表。如何更新其中的项目数?
在回调中,我将返回此函数,并将总和 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();
【问题讨论】:
您应该考虑实现应用状态管理小部件,例如provider
【参考方案1】:
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
.....
),
);
【讨论】:
以上是关于如何在颤动中将商品计数从购物车屏幕更新到餐厅详细信息屏幕并返回到餐厅详细信息屏幕?的主要内容,如果未能解决你的问题,请参考以下文章