【问题标题】: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

标签: flutter dart flutter-layout flutter-widget flutter-listview


【解决方案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
      .....
      ),
     );
  }
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    相关资源
    最近更新 更多