import 'dart:convert'; import 'dart:math'; import 'package:bbyyy/beans/goods_bean_entity.dart'; import 'package:bbyyy/beans/my_shop_bean_entity.dart'; import 'package:bbyyy/beans/new_order_bean_entity.dart'; import 'package:bbyyy/beans/smart_order_bean_entity.dart'; import 'package:bbyyy/beans/store_bean_entity.dart'; import 'package:bbyyy/https/MyDio.dart'; import 'package:bbyyy/https/url.dart'; import 'package:bbyyy/my_tools/const.dart'; import 'package:bbyyy/my_tools/dims.dart'; import 'package:bbyyy/my_tools/event_bus.dart'; import 'package:bbyyy/my_tools/my_colors.dart'; import 'package:bbyyy/my_tools/my_cookie.dart'; import 'package:bbyyy/my_tools/my_tools.dart'; import 'package:bbyyy/my_tools/my_views.dart'; import 'package:bbyyy/paegs/chat_page/chat_page.dart'; import 'package:bbyyy/paegs/gang_page/gang_in_page/pay_to_the_helper_page/pay_to_the_helper_page.dart'; import 'package:bbyyy/paegs/pay_page/order_information_page.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_slidable/flutter_slidable.dart'; import 'package:flutter_svg/svg.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:url_launcher/url_launcher.dart'; import 'gang_information_page/gang_information_page.dart'; import 'package:bbyyy/my_tools/pop_up_queue.dart'; class GangInPage extends StatefulWidget { MyShopBeanDataData data; NewOrderBeanContent order; GangInPage(this.data, this.order); @override _GangInPageState createState() => _GangInPageState(); } class _GangInPageState extends State { int selectedIndex = 0; RefreshController controller = RefreshController(initialRefresh: true); int page = 1; _GangInPageState(); List goods = []; List orders = []; @override void initState() { // TODO: implement initState super.initState(); EventBus().on('payAnOrder', (arg) { controller.requestRefresh(); }); EventBus().on('reNoPayOrder', (arg) { controller.requestRefresh(); }); EventBus().on('刷新未付订单', (arg) { controller.requestRefresh(); }); Future.delayed(Duration.zero, () { if (widget.order != null) { setState(() { selectedIndex = 2; payTheOrder(); }); } }); if (widget.data.ownerUid == MyCookie().getUID()) { selectedIndex = 1; } queryStoreInformation(); } @override void dispose() { // TODO: implement dispose super.dispose(); EventBus().off('payAnOrder'); EventBus().off('reNoPayOrder'); EventBus().off('刷新未付订单'); } @override Widget build(BuildContext context) { return Scaffold( body: Column( children: [ MyViews().myAppBar(widget.data.shopName, context, [ Visibility( visible: widget.data.ownerUid == MyCookie().getUID(), child: IconButton( icon: Icon(Icons.more_horiz), onPressed: () { MyTools().toPage(context, GangInformationPage(widget.data), (then) { if (then == '删除货帮') { Navigator.pop(context, '删除货帮'); } }); }), ) ]), Container( color: MyColors.cF7F7F7, child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(4), color: Colors.white), margin: EdgeInsets.all(10), child: Column( children: [ GestureDetector( onTap: () { showDialog( context: context, builder: (BuildContext context) { return Material( color: Colors.black12, child: Center( child: Column( children: [ Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(16), color: Colors.white, ), height: 510, margin: EdgeInsets.symmetric(horizontal: 28), padding: EdgeInsets.symmetric( horizontal: 14, vertical: 15), child: Column( children: [ Container( height: MediaQuery.of(context) .size .width - 71, width: MediaQuery.of(context) .size .width - 56, child: ClipRRect( child: MyViews().netImg( imgURL(widget.data.shopPic), MediaQuery.of(context) .size .width - 84, MediaQuery.of(context) .size .width - 84), borderRadius: BorderRadius.circular(4), ), ), Row( children: [ SvgPicture.asset( 'images/svg/店铺.svg', height: 21, width: 21, ), Container( width: 6, ), Expanded( child: Text( widget.data.shopName, style: TextStyle( color: MyColors.c333333, fontSize: 16), )) ], ), Container( height: 10, ), Text( store == null && store.introduction.isNotEmpty ? '货帮介绍:${store.introduction}' : '货帮介绍:暂无', style: TextStyle( color: MyColors.c333333, fontSize: 12, ), maxLines: 3, overflow: TextOverflow.ellipsis, softWrap: true, ), Container( height: 10, ), Row( children: [ SvgPicture.asset( 'images/svg/地址.svg', color: MyColors.c666666, height: 12, width: 12, ), Container( width: 5, ), Expanded( child: Text( store != null && store.address.isNotEmpty ? store.address : '暂无', style: TextStyle( color: MyColors.c666666, fontSize: 11), maxLines: 1, overflow: TextOverflow.ellipsis, softWrap: true, ), ), ], ), Container( height: 10, ), Visibility( visible: store != null && store.mobile.isNotEmpty, child: GestureDetector( onTap: () { launch('tel:${store.mobile}'); }, behavior: HitTestBehavior.translucent, child: Container( decoration: BoxDecoration( color: MyColors.cFF4233, borderRadius: BorderRadius.circular(20), ), height: 40, child: Row( children: [ SvgPicture.asset( 'images/svg/电话.svg', color: Colors.white, height: 24, width: 24, ), Container( width: 4, ), Text( store == null ? '' : store.mobile, style: TextStyle( color: Colors.white, fontSize: 15), ), ], mainAxisAlignment: MainAxisAlignment.center, ), alignment: Alignment.center, ), ), ) ], mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.start, ), ), Container( margin: EdgeInsets.only(top: 20), child: IconButton( icon: Icon( Icons.cancel, color: MyColors.cC9C9C9, size: 24, ), onPressed: () { Navigator.pop(context); }), ) ], mainAxisAlignment: MainAxisAlignment.center, ), ), ); }, ); }, behavior: HitTestBehavior.translucent, child: Row( children: [ Container( margin: EdgeInsets.only( right: 10, top: 6, left: 6, bottom: 6), child: ClipRRect( child: MyViews() .netImg(imgURL(widget.data.shopPic), 65, 65), borderRadius: BorderRadius.circular(4), ), ), Expanded( child: Container( height: 65, margin: EdgeInsets.only(right: 6), child: Column( children: [ Text( widget.data.shopName, style: TextStyle( color: MyColors.c333333, fontSize: 13), maxLines: 1, overflow: TextOverflow.ellipsis, softWrap: true, ), Row( children: [ Expanded( child: Text( store != null && store.introduction.isNotEmpty ? '货帮介绍:${store.introduction}' : '货帮介绍:暂无', style: TextStyle( color: MyColors.c666666, fontSize: 11), maxLines: 1, overflow: TextOverflow.ellipsis, softWrap: true, ), ), SvgPicture.asset( 'images/svg/箭头.svg', color: MyColors.c666666, height: 10, width: 10, ) ], crossAxisAlignment: CrossAxisAlignment.center, ), Row( children: [ SvgPicture.asset( 'images/svg/地址.svg', color: MyColors.c666666, height: 12, width: 12, ), Container( width: 5, ), Expanded( child: Text( store != null && store.address.isNotEmpty ? store.address : '暂无', style: TextStyle( color: MyColors.c666666, fontSize: 11), maxLines: 1, overflow: TextOverflow.ellipsis, softWrap: true, ), ), ], ), ], crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, ), ), ) ], ), ), Container( height: 0.5, color: MyColors.cE7E7E7, ), Visibility( visible: store != null && store.mobile.isNotEmpty, child: Container( margin: EdgeInsets.all(6), child: Row( children: [ Row( children: [ SvgPicture.asset( 'images/svg/电话.svg', height: 18, width: 18, ), Container( width: 5, ), Text( store == null ? '暂无' : store.mobile, style: TextStyle( color: MyColors.cFF4233, fontSize: 12), ), ], ), GestureDetector( onTap: () { launch('tel:${store.mobile}'); }, behavior: HitTestBehavior.translucent, child: Container( decoration: BoxDecoration( color: MyColors.cFF4233, borderRadius: BorderRadius.circular(10), ), height: 20, width: 50, child: MyViews().myText('点击拨打', Colors.white, 9), alignment: Alignment.center, ), ) ], mainAxisAlignment: MainAxisAlignment.spaceBetween, ), ), ) ], ), ), ), Visibility( visible: widget.data.privateShop || widget.data.ownerUid == MyCookie().getUID(), child: Container( height: 40, color: Colors.white, child: Row( children: [ GestureDetector( onTap: () { setState(() { selectedIndex = 0; controller.requestRefresh(); }); }, behavior: HitTestBehavior.translucent, child: Padding( padding: EdgeInsets.only(left: 10, right: 10), child: Column( children: [ Text( '货帮商品', style: TextStyle( color: selectedIndex == 0 ? MyColors.cFF4233 : MyColors.c666666, fontSize: 15), ), Container( height: 10, child: Visibility( child: SvgPicture.asset('images/svg/tab.svg'), visible: selectedIndex == 0, ), ) ], mainAxisAlignment: MainAxisAlignment.end, ), ), ), GestureDetector( onTap: () { setState(() { selectedIndex = 1; controller.requestRefresh(); }); }, behavior: HitTestBehavior.translucent, child: Padding( padding: EdgeInsets.only(left: 10, right: 10), child: Column( children: [ Text( widget.data.ownerUid == MyCookie().getUID() ? '未付订单' : '未收订单', style: TextStyle( color: selectedIndex == 1 ? MyColors.cFF4233 : MyColors.c666666, fontSize: 15), ), Container( height: 10, child: Visibility( child: SvgPicture.asset('images/svg/tab.svg'), visible: selectedIndex == 1, ), ) ], mainAxisAlignment: MainAxisAlignment.end, ), ), ), GestureDetector( onTap: () { setState(() { selectedIndex = 2; controller.requestRefresh(); }); }, behavior: HitTestBehavior.translucent, child: Padding( padding: EdgeInsets.only(left: 10, right: 10), child: Column( children: [ Text( widget.data.ownerUid == MyCookie().getUID() ? '已付订单' : '未付订单', style: TextStyle( color: selectedIndex == 2 ? MyColors.cFF4233 : MyColors.c666666, fontSize: 15), ), Container( height: 10, child: Visibility( child: SvgPicture.asset('images/svg/tab.svg'), visible: selectedIndex == 2, ), ) ], mainAxisAlignment: MainAxisAlignment.end, ), ), ) ], mainAxisAlignment: MainAxisAlignment.spaceAround, ), ), ), body(), Container( color: Colors.white, child: SafeArea( top: false, child: Container( padding: EdgeInsets.symmetric(horizontal: 37), color: Colors.white, width: double.infinity, height: 60, child: Row( children: [ Expanded( child: GestureDetector( onTap: () { queryShopMembers(); }, behavior: HitTestBehavior.translucent, child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.only( topLeft: Radius.circular(20), bottomLeft: Radius.circular(20), ), border: Border.all( color: MyColors.cFF4233, width: 1)), height: 40, child: MyViews().myText('联系帮主', MyColors.cFF4233, 14), alignment: Alignment.center), ), ), Expanded( child: GestureDetector( onTap: () { MyTools().toPage(context, PayToTheHelperPage(widget.data), (then) {}); }, behavior: HitTestBehavior.translucent, child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.only( topRight: Radius.circular(20), bottomRight: Radius.circular(20), ), color: MyColors.cFF4233), height: 40, child: MyViews().myText('到店付款', Colors.white, 14), alignment: Alignment.center), ), ) ], ), ), ), ) ], ), ); } body() { if (selectedIndex == 0) { return Expanded( child: SmartRefresher( controller: controller, onRefresh: onRefresh, onLoading: onLoading, enablePullDown: true, enablePullUp: true, child: goods.length == 0 ? SingleChildScrollView(child: noData()) : GridView.builder( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 2, //每行三列 childAspectRatio: 164 / 261, //显示区域宽高相等 mainAxisSpacing: 8, crossAxisSpacing: 8), itemCount: goods.length, padding: EdgeInsets.only(left: 14, right: 14, top: 14, bottom: 65), itemBuilder: (context, index) { return MyViews().getGoodsItem(goods[index], context); }), ), ); } else if (selectedIndex == 1) { return Expanded( child: SmartRefresher( controller: controller, onRefresh: onRefresh, onLoading: onLoading, enablePullDown: true, enablePullUp: true, child: orders.length == 0 ? SingleChildScrollView(child: noData()) : ListView.builder( itemBuilder: (c, index) { return Slidable( child: MyViews().getNoPayGoodsItem( orders[index], context, widget.data.ownerUid), actionPane: SlidableDrawerActionPane(), enabled: widget.data.ownerUid == MyCookie().getUID(), actionExtentRatio: 0.25, secondaryActions: [ SlideAction( child: Container( child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(30), color: MyColors.cFF4233, ), height: 60, width: 60, child: SvgPicture.asset( 'images/svg/del.svg', height: 40, width: 40, ), alignment: Alignment.center, ), ), onTap: () { showSimpleDialog( '将删除订单(${orders[index].uid})', context, () { Navigator.pop(context); deleteOrder(orders[index]); }); }, ) ], ); }, itemCount: orders.length, padding: EdgeInsets.only(left: 10, right: 10, top: 10), ), ), ); } else if (selectedIndex == 2) { return Expanded( child: SmartRefresher( controller: controller, onRefresh: onRefresh, onLoading: onLoading, enablePullDown: true, enablePullUp: true, child: orders.length == 0 ? SingleChildScrollView(child: noData()) : ListView.builder( itemBuilder: (c, index) { return MyViews().getNoPayGoodsItem( orders[index], context, widget.data.ownerUid); }, itemCount: orders.length, padding: EdgeInsets.only(left: 10, right: 10, top: 10), ), ), ); } else { return SingleChildScrollView(child: noData()); } } void onRefresh() { page = 1; if (selectedIndex == 0) { queryProducts(); } else if (selectedIndex == 1) { unreceivedOrder(); } else { unpaidOrder(); } } void onLoading() { page++; if (selectedIndex == 0) { queryProducts(); } else if (selectedIndex == 1) { unreceivedOrder(); } else { unpaidOrder(); } } //查询商品 void queryProducts() { MyDio().query({ "key": "commodity", "filters": { "conditions": ["shop_uid == ${widget.data.shopUid}", "on_sale == true"] }, "dims": commodityDims, "order_by": ["id,desc", "no,desc"], "paging": [page, 20] }, (response, hasError) { if (!hasError) { GoodsBeanEntity entity = GoodsBeanEntity().fromJson(json.decode(response.data.toString())); if (page == 1) { goods.clear(); } goods.addAll(entity.data.data); } setState(() { endRe(controller); }); }, (error) { setState(() { endRe(controller); }); }); } //查询未收订单 void unreceivedOrder() { var conditions = []; if (widget.data.ownerUid == MyCookie().getUID()) { conditions.add('state == $orderStateUnpaid'); conditions.add('shop_uid == ${widget.data.shopUid}'); } else { conditions.add('state == $orderStateUnpaid'); conditions.add('shop_uid == ${widget.data.shopUid}'); conditions.add('seller_uid == ${MyCookie().getUID()}'); } MyDio().query({ "key": "order", "filters": {"conditions": conditions}, "dims": orderDims, "paging": [page, 20], "order_by": ["create_time,DESC"] }, (response, hasError) { if (!hasError) { SmartOrderBeanEntity entity = SmartOrderBeanEntity() .fromJson(json.decode(response.data.toString())); if (page == 1) { orders.clear(); } orders.addAll(entity.data.data); setState(() {}); } endRe(controller); }, (error) {}); } //查询未付订单 void unpaidOrder() { var conditions = []; if (widget.data.ownerUid == MyCookie().getUID()) { conditions.add('state == $orderStatePaid'); conditions.add('shop_uid == ${widget.data.shopUid}'); } else { conditions.add('state == $orderStateUnpaid'); conditions.add('shop_uid == ${widget.data.shopUid}'); conditions.add('buyer_name LIKE ${MyCookie().getName()}'); } MyDio().query({ "key": "order", "filters": {"conditions": conditions}, "dims": orderDims, "paging": [page, 20], "order_by": ["create_time,DESC"] }, (response, hasError) { if (!hasError) { SmartOrderBeanEntity entity = SmartOrderBeanEntity() .fromJson(json.decode(response.data.toString())); if (page == 1) { orders.clear(); } orders.addAll(entity.data.data); setState(() {}); } endRe(controller); }, (error) {}); } payTheOrder() { SmartOrderBeanDataData data = SmartOrderBeanDataData(); data.sellerUid = widget.order.sellerUID; data.sellerName = widget.order.sellerName; data.sellerPic = widget.order.sellerPic; data.buyerUid = 0; data.buyerName = widget.order.buyerName; data.buyerPic = ''; data.amount = widget.order.amount; data.uid = widget.order.uID; MyTools().toPage( context, OrderInformationPage( false, orderType: orderTypeAdvertise, amount: widget.order.amount, uid: widget.order.uID, buyerUid: MyCookie().getUID(), buyerName: widget.order.buyerName, buyerPic: MyCookie().getPic(), commodityCount: 1, commodityTitle: '第三方订单', commodityCover: '', sellName: widget.order.sellerName, sellPic: widget.order.sellerPic, sellUid: widget.order.sellerUID, ), (then) { controller.requestRefresh(); PopUpQueue().onShow = false; PopUpQueue().showNext(); }); // showPayDialog(data, context, () { // Navigator.pop(context); // // MyTools().toPage(context, // // PayPage(widget.order.uID, false, widget.order.amount), (then) {}); // // }); } List member = []; List helper = []; queryShopMembers() { MyDio().query({ "key": "shop_user", "filters": { "conditions": ["shop_uid==${widget.data.shopUid}", "review_state==1"] }, "dims": shopUserDims, "paging": [1, 2000] }, (response, hasError) { if (!hasError) { MyShopBeanEntity entity = MyShopBeanEntity().fromJson(json.decode(response.data.toString())); member = entity.data.data; helper.clear(); member.forEach((element) { if (element.role == shopUserStaff) { helper.add(element); } }); MyShopBeanDataData chatWith; if (helper.length == 0) { chatWith = member[ member.indexWhere((element) => element.role == shopUserOwner)]; } else { chatWith = helper[Random().nextInt(helper.length)]; } MyTools().toPage(context, ChatPage(chatWith, null), (then) {}); } }, (error) {}); } void deleteOrder(SmartOrderBeanDataData order) { MyDio().del({ 'key': 'order', 'ids': [order.id] }, (response, hasError) { if (!hasError) { orders.remove(order); setState(() {}); } }, (error) {}); } StoreBeanDataData store; queryStoreInformation() { MyDio().query({ "key": "shop", "filters": { "conditions": ["uid == ${widget.data.shopUid}"] }, "dims": shopDims, "paging": [1, 5] }, (response, hasError) { if (!hasError) { StoreBeanEntity entity = StoreBeanEntity().fromJson(json.decode(response.data.toString())); store = entity.data.data[0]; setState(() {}); } endRe(controller); }, (error) {}); } }