diff --git a/lib/pages/market/market_cart_page/market_cart_page.dart b/lib/pages/market/market_cart_page/market_cart_page.dart index 044c20e4..28172f65 100644 --- a/lib/pages/market/market_cart_page/market_cart_page.dart +++ b/lib/pages/market/market_cart_page/market_cart_page.dart @@ -1,15 +1,96 @@ +import 'package:akuCommunity/model/aku_shop_class_model.dart'; +import 'package:akuCommunity/model/aku_shop_model.dart'; +import 'package:akuCommunity/utils/screenutil.dart'; +import 'package:akuCommunity/widget/cached_image_wrapper.dart'; +import 'package:akuCommunity/widget/cart_count.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; +import 'package:flutter_slidable/flutter_slidable.dart'; import 'package:provider/provider.dart'; import 'package:akuCommunity/provider/cart.dart'; -import 'package:akuCommunity/routers/page_routers.dart'; -import 'package:akuCommunity/model/aku_shop_model.dart'; import 'widget/market_cart_app_bar.dart'; -import 'widget/market_cart_card.dart'; -import 'widget/market_cart_bottom_bar.dart'; -class MarketCartPage extends StatelessWidget { - MarketCartPage({Key key}) : super(key: key); +class MarketCartPage extends StatefulWidget { + final AkuShopModel cartItem; + + MarketCartPage({Key key, this.cartItem}) : super(key: key); + + @override + _MarketCartPageState createState() => _MarketCartPageState(); +} + +class _MarketCartPageState extends State { + Widget _cardRadio( + BuildContext context, AkuShopModel cartItem, CartProvidde model,index) { + return InkWell( + onTap: () { + setState(() { + cartItem.isCheck = !cartItem.isCheck; + int _goods = shopList.indexWhere( + (element) => element.itemid == _cartList[index].itemid); + _goods > -1 + ? shopList.removeAt(_goods) + : shopList.add(_cartList[index]); + print(shopList); + }); + }, + child: Container( + alignment: Alignment.center, + child: Icon( + Icons.check_circle, + color: cartItem.isCheck ? Color(0xffdb0000) : Color(0xff999999), + size: Screenutil.length(36), + ), + ), + ); + } + + Widget _image(String imagePath) { + return Container( + margin: EdgeInsets.symmetric(horizontal: Screenutil.length(20)), + child: ClipRRect( + borderRadius: BorderRadius.all(Radius.circular(2)), + child: CachedImageWrapper( + url: imagePath, + width: Screenutil.length(180), + height: Screenutil.length(180), + ), + ), + ); + } + + Widget _content(String content, specs, price) { + return Container( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: Screenutil.length(394), + child: Text( + content, + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: Screenutil.size(24), + color: Color(0xff333333), + ), + ), + ), + Container( + margin: EdgeInsets.only(top: Screenutil.length(40)), + child: Text( + '¥${price}', + style: TextStyle( + fontSize: Screenutil.size(28), + color: Color(0xffe60e0e), + ), + ), + ), + ], + ), + ); + } // List> _listGoods = [ // { // 'imagePath': @@ -108,36 +189,252 @@ class MarketCartPage extends StatelessWidget { // // isAll = !isAll; // // }); // } + List shopList = []; + bool get _selectALl { + for (var element in _cartList) { + int _selectGoods = + shopList.indexWhere((index) => element.itemid == index.itemid); + if (_selectGoods == -1) return false; + } + return true; + } + + double get _allprice{ + double _price=0; + for(var element in shopList){ + _price+=double.parse(element.itemprice)*element.count; + } + return _price; + } + int get _goodsCount=>shopList.length; + + List _cartList; + Future _getCartInfo(BuildContext context) async { - await Provider.of(context, listen: false).getCartInfo(); + await Provider.of(context, listen: true).getCartInfo(); return 'end'; } + Widget _selectAll(CartProvidde model,) { + return InkWell( + onTap: () { + for(var element in _cartList){ + element.isCheck=!element.isCheck; + } + model.changeALlCheckState(true); + setState(() { + if (_selectALl == true) + shopList.clear(); + else { + shopList.clear(); + shopList.addAll(_cartList); + } + }); + }, + child: Container( + margin: EdgeInsets.symmetric(vertical: Screenutil.length(29)), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Icon( + _selectALl + ? Icons.radio_button_checked + : Icons.radio_button_unchecked, + color: model.isAllCheck ? Color(0xffdb0000) : Color(0xff999999), + size: Screenutil.length(40), + ), + Container( + margin: EdgeInsets.only(left: Screenutil.length(18)), + child: Text( + '全选', + style: TextStyle( + fontSize: Screenutil.size(28), + color: Color(0xff333333), + ), + ), + ), + ], + ), + ), + ); + } + + Widget _settlement(CartProvidde model, BuildContext context) { + return Row( + children: [ + model.allPrice != null + ? Container( + margin: EdgeInsets.only(right: Screenutil.length(10)), + child: Text( + '合计:¥${_allprice.toStringAsFixed(2)}', + style: TextStyle( + fontSize: Screenutil.size(28), + color: Color(0xffe60e0e), + ), + ), + ) + : SizedBox(), + InkWell( + onTap: model.allGoodsCount != 0 ? () {} : null, + child: Container( + alignment: Alignment.center, + decoration: BoxDecoration( + color: model.allGoodsCount != 0 + ? Color(0xffffc40c) + : Color(0xffd8d8d8), + borderRadius: BorderRadius.all(Radius.circular(30)), + ), + width: Screenutil.length(198), + margin: EdgeInsets.symmetric(vertical: Screenutil.length(16)), + padding: EdgeInsets.symmetric(vertical: Screenutil.length(12)), + child: Text( + '结算(${_goodsCount})', + style: TextStyle( + fontSize: Screenutil.size(30), + color: + model.allGoodsCount != 0 ? Color(0xff333333) : Colors.white, + ), + ), + ), + ), + ], + ); + } + + Widget _marketCartCard(AkuShopModel cartItem,index) { + return Consumer(builder: (context, model, child) { + return Container( + margin: EdgeInsets.only( + top: Screenutil.length(20), + left: Screenutil.length(32), + right: Screenutil.length(32), + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(6)), + ), + child: Slidable.builder( + actionPane: SlidableBehindActionPane(), + actionExtentRatio: 0.25, + secondaryActionDelegate: SlideActionBuilderDelegate( + actionCount: 2, + builder: (context, index, animation, renderingMode) { + if (index == 0) { + return SlideAction( + child: Text( + '移至收藏夹', + style: TextStyle( + fontSize: Screenutil.size(28), color: Colors.white), + ), + color: renderingMode == SlidableRenderingMode.slide + ? Color(0xffffc40c).withOpacity(animation.value) + : Color(0xffffc40c), + // onTap: () => _showSnackBar(context, 'More'), + closeOnTap: false, + ); + } else { + return SlideAction( + onTap: () { + model.deleteGoods(cartItem.itemid); + }, + decoration: BoxDecoration( + color: renderingMode == SlidableRenderingMode.slide + ? Color(0xffe60e0e).withOpacity(animation.value) + : Color(0xffe60e0e), + borderRadius: BorderRadius.only( + topRight: Radius.circular(6), + bottomRight: Radius.circular(6), + ), + ), + child: Text( + '删除', + style: TextStyle( + fontSize: Screenutil.size(28), color: Colors.white), + ), + // onTap: () => _showSnackBar(context, 'Delete'), + ); + } + }, + ), + child: Container( + color: Colors.white, + padding: EdgeInsets.only( + top: Screenutil.length(30), + left: Screenutil.length(15), + bottom: Screenutil.length(37), + ), + child: Stack( + children: [ + Row( + children: [ + _cardRadio(context, cartItem, model,index), + _image(cartItem.itempic), + _content(cartItem.itemtitle, '默认', cartItem.itemprice), + ], + ), + Positioned( + bottom: 0, + right: Screenutil.length(16), + child: CartCount( + cartItem: cartItem, + // goodsNum: widget.goodsNum, + // index: widget.index, + // reduce: widget.reduce, + // add: widget.add, + ), + ), + ], + ), + ), + ), + ); + }); + } + @override Widget build(BuildContext context) { return Scaffold( appBar: PreferredSize( - child: MarketCartAppBar(), preferredSize: Size.fromHeight(kToolbarHeight), + child: MarketCartAppBar(), ), + bottomNavigationBar: + Consumer(builder: (context, model, child) { + return Container( + color: Colors.white, + height: Screenutil.length(98), + width: MediaQuery.of(context).size.width, + padding: EdgeInsets.symmetric(horizontal: Screenutil.length(32)), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + _selectAll(model), + _settlement( + model, + context, + ) + ], + ), + ); + }), body: Stack( children: [ Consumer( builder: (context, model, child) { - List cartList = model.cartList; + List cartList = model.cartList; + _cartList = model.cartList; return ListView.builder( itemCount: cartList.length, itemBuilder: (BuildContext context, int index) { - return MarketCartCard( - cartItem: cartList[index], - ); + return _marketCartCard(cartList[index],index); }); }, ), - Positioned( - bottom: 0, - child: MarketCartBottomBar(), - ), + // Positioned( + // bottom: 0, + // child: MarketCartBottomBar( + // selectAll: _selectALl, + // ), + // ), ], )); } diff --git a/lib/pages/market/market_cart_page/widget/market_cart_bottom_bar.dart b/lib/pages/market/market_cart_page/widget/market_cart_bottom_bar.dart deleted file mode 100644 index ec530d4b..00000000 --- a/lib/pages/market/market_cart_page/widget/market_cart_bottom_bar.dart +++ /dev/null @@ -1,107 +0,0 @@ - -import 'package:akuCommunity/pages/confirm_order_page/confirm_order_page.dart'; -import 'package:akuCommunity/routers/page_routers.dart'; -import 'package:ani_route/ani_route.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:provider/provider.dart'; -import 'package:akuCommunity/utils/screenutil.dart'; -import 'package:akuCommunity/provider/cart.dart'; - -class MarketCartBottomBar extends StatelessWidget { - const MarketCartBottomBar({Key key}) : super(key: key); - - Widget _selectAll(CartProvidde model) { - return InkWell( - onTap: () { - model.changeALlCheckState(!model.isAllCheck); - }, - child: Container( - margin: EdgeInsets.symmetric(vertical: Screenutil.length(29)), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Icon( - model.isAllCheck - ? Icons.radio_button_checked - : Icons.radio_button_unchecked, - color: model.isAllCheck ? Color(0xffdb0000) : Color(0xff999999), - size: Screenutil.length(40), - ), - Container( - margin: EdgeInsets.only(left: Screenutil.length(18)), - child: Text( - '全选', - style: TextStyle( - fontSize: Screenutil.size(28), - color: Color(0xff333333), - ), - ), - ), - ], - ), - ), - ); - } - - Widget _settlement(CartProvidde model,BuildContext context) { - return Row( - children: [ - model.allPrice != 0 - ? Container( - margin: EdgeInsets.only(right: Screenutil.length(10)), - child: Text( - '合计:¥${model.allPrice.toStringAsFixed(2)}', - style: TextStyle( - fontSize: Screenutil.size(28), - color: Color(0xffe60e0e), - ), - ), - ) - : SizedBox(), - InkWell( - onTap: model.allGoodsCount != 0 ? () {} : null, - child: Container( - alignment: Alignment.center, - decoration: BoxDecoration( - color: model.allGoodsCount != 0 - ? Color(0xffffc40c) - : Color(0xffd8d8d8), - borderRadius: BorderRadius.all(Radius.circular(30)), - ), - width: Screenutil.length(198), - margin: EdgeInsets.symmetric(vertical: Screenutil.length(16)), - padding: EdgeInsets.symmetric(vertical: Screenutil.length(12)), - child: Text( - '结算(${model.allGoodsCount})', - style: TextStyle( - fontSize: Screenutil.size(30), - color: - model.allGoodsCount != 0 ? Color(0xff333333) : Colors.white, - ), - ), - ), - ), - ], - ); - } - - @override - Widget build(BuildContext context) { - return Consumer(builder: (context, model, child) { - return Container( - color: Colors.white, - height: Screenutil.length(98), - width: MediaQuery.of(context).size.width, - padding: EdgeInsets.symmetric(horizontal: Screenutil.length(32)), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - _selectAll(model), - _settlement(model,context,) - ], - ), - ); - }); - } -} diff --git a/lib/pages/market/market_cart_page/widget/market_cart_card.dart b/lib/pages/market/market_cart_page/widget/market_cart_card.dart deleted file mode 100644 index f0f1b831..00000000 --- a/lib/pages/market/market_cart_page/widget/market_cart_card.dart +++ /dev/null @@ -1,225 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter_icons/flutter_icons.dart'; -import 'package:flutter_slidable/flutter_slidable.dart'; -import 'package:akuCommunity/widget/cached_image_wrapper.dart'; -import 'package:akuCommunity/widget/cart_count.dart'; -import 'package:akuCommunity/utils/screenutil.dart'; -import 'package:akuCommunity/widget/goods_specs_sheet.dart'; -import 'package:akuCommunity/model/aku_shop_model.dart'; -import 'package:provider/provider.dart'; -import 'package:akuCommunity/provider/cart.dart'; - -class MarketCartCard extends StatelessWidget { - final AkuShopModel cartItem; - MarketCartCard({Key key, this.cartItem}) : super(key: key); - - void _showGoodsSpecsSheet() { - // showModalBottomSheet( - // isScrollControlled: true, - // context: context, - // backgroundColor: Colors.white, - // builder: (context) { - // return GoodsSpecsSheet( - // goodsNum: widget.goodsNum, - // index: widget.index, - // reduce: widget.reduce, - // add: widget.add, - // ); - // }, - // ); - } - - Widget _cardRadio( - BuildContext context, AkuShopModel cartItem, CartProvidde model) { - return InkWell( - onTap: () { - cartItem.isCheck = !cartItem.isCheck; - model.changeCheckState(cartItem); - }, - child: Container( - alignment: Alignment.center, - child: Icon( - Icons.check_circle, - color: cartItem.isCheck ? Color(0xffdb0000) : Color(0xff999999), - size: Screenutil.length(36), - ), - ), - ); - } - - Widget _image(String imagePath) { - return Container( - margin: EdgeInsets.symmetric(horizontal: Screenutil.length(20)), - child: ClipRRect( - borderRadius: BorderRadius.all(Radius.circular(2)), - child: CachedImageWrapper( - url: imagePath, - width: Screenutil.length(180), - height: Screenutil.length(180), - ), - ), - ); - } - - Widget _content(String content, specs, price) { - return Container( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - width: Screenutil.length(394), - child: Text( - content, - maxLines: 2, - overflow: TextOverflow.ellipsis, - style: TextStyle( - fontSize: Screenutil.size(24), - color: Color(0xff333333), - ), - ), - ), - // InkWell( - // onTap: _showGoodsSpecsSheet, - // child: Container( - // margin: EdgeInsets.only(top: Screenutil.length(10)), - // padding: EdgeInsets.symmetric( - // vertical: Screenutil.length(5), - // horizontal: Screenutil.length(19), - // ), - // alignment: Alignment.center, - // decoration: BoxDecoration( - // color: Color(0xfff5f5f5), - // border: Border.all(color: Color(0xffd3d3d3), width: 0.5), - // borderRadius: BorderRadius.all(Radius.circular(15)), - // ), - // child: Row( - // mainAxisAlignment: MainAxisAlignment.center, - // crossAxisAlignment: CrossAxisAlignment.center, - // children: [ - // Text( - // specs, - // style: TextStyle( - // fontSize: Screenutil.size(18), - // color: Color(0xff333333), - // ), - // ), - // Container( - // alignment: Alignment.center, - // margin: EdgeInsets.only(left: Screenutil.length(16)), - // child: Icon( - // AntDesign.down, - // color: Color(0xff333333), - // size: Screenutil.size(22), - // ), - // ), - // ], - // ), - // ), - // ), - Container( - margin: EdgeInsets.only(top: Screenutil.length(40)), - child: Text( - '¥${price}', - style: TextStyle( - fontSize: Screenutil.size(28), - color: Color(0xffe60e0e), - ), - ), - ), - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - return Consumer(builder: (context, model, child) { - return Container( - margin: EdgeInsets.only( - top: Screenutil.length(20), - left: Screenutil.length(32), - right: Screenutil.length(32), - ), - decoration: BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(6)), - ), - child: Slidable.builder( - actionPane: SlidableBehindActionPane(), - actionExtentRatio: 0.25, - secondaryActionDelegate: SlideActionBuilderDelegate( - actionCount: 2, - builder: (context, index, animation, renderingMode) { - if (index == 0) { - return SlideAction( - child: Text( - '移至收藏夹', - style: TextStyle( - fontSize: Screenutil.size(28), color: Colors.white), - ), - color: renderingMode == SlidableRenderingMode.slide - ? Color(0xffffc40c).withOpacity(animation.value) - : Color(0xffffc40c), - // onTap: () => _showSnackBar(context, 'More'), - closeOnTap: false, - ); - } else { - return SlideAction( - onTap: () { - model.deleteGoods(cartItem.itemid); - }, - decoration: BoxDecoration( - color: renderingMode == SlidableRenderingMode.slide - ? Color(0xffe60e0e).withOpacity(animation.value) - : Color(0xffe60e0e), - borderRadius: BorderRadius.only( - topRight: Radius.circular(6), - bottomRight: Radius.circular(6), - ), - ), - child: Text( - '删除', - style: TextStyle( - fontSize: Screenutil.size(28), color: Colors.white), - ), - // onTap: () => _showSnackBar(context, 'Delete'), - ); - } - }, - ), - child: Container( - color: Colors.white, - padding: EdgeInsets.only( - top: Screenutil.length(30), - left: Screenutil.length(15), - bottom: Screenutil.length(37), - ), - child: Stack( - children: [ - Row( - children: [ - _cardRadio(context, cartItem, model), - _image(cartItem.itempic), - _content(cartItem.itemtitle, '默认', cartItem.itemprice), - ], - ), - Positioned( - bottom: 0, - right: Screenutil.length(16), - child: CartCount( - cartItem: cartItem, - // goodsNum: widget.goodsNum, - // index: widget.index, - // reduce: widget.reduce, - // add: widget.add, - ), - ), - ], - ), - ), - ), - ); - }); - } -} diff --git a/lib/provider/cart.dart b/lib/provider/cart.dart index 97e17af1..a634e3dd 100644 --- a/lib/provider/cart.dart +++ b/lib/provider/cart.dart @@ -141,7 +141,8 @@ class CartProvidde with ChangeNotifier { }); cartString = json.encode(newList).toString(); prefs.setString("cartInfo", cartString); - await getCartInfo(); + // await getCartInfo(); + notifyListeners(); } ///商品数量加减