import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'package:amap_location/amap_location.dart'; import 'package:bbyyy/beans/template_bean_entity.dart'; import 'package:bbyyy/https/url.dart'; import 'package:bbyyy/my_tools/event_bus.dart'; import 'package:bbyyy/my_tools/my_cookie.dart'; import 'package:bbyyy/my_tools/my_tools.dart'; import 'package:bbyyy/paegs/gang_page/gang_in_page/gang_in_page.dart'; import 'package:bbyyy/paegs/login_page/login_page.dart'; import 'package:bbyyy/paegs/root_page/root_page_view.dart'; import 'package:bbyyy/paegs/welcome_page/welcome_page.dart'; import 'package:flustars/flustars.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:rxdart/rxdart.dart'; import 'beans/coupon_bean_entity.dart'; import 'beans/my_shop_bean_entity.dart'; import 'beans/new_order_bean_entity.dart'; import 'beans/system_information_bean_entity.dart'; import 'https/MyDio.dart'; import 'https/my_request.dart'; import 'my_tools/const.dart'; import 'my_tools/dims.dart'; import 'my_tools/easy_loading/easy_loading.dart'; import 'my_tools/easy_loading/loading.dart'; import 'my_tools/global.dart'; import 'my_tools/my_colors.dart'; import 'my_tools/my_views.dart'; import 'my_tools/order.dart'; import 'my_tools/pop_up_queue.dart'; final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); final BehaviorSubject didReceiveLocalNotificationSubject = BehaviorSubject(); final BehaviorSubject selectNotificationSubject = BehaviorSubject(); class ReceivedNotification { ReceivedNotification({ @required this.id, @required this.title, @required this.body, @required this.payload, }); final int id; final String title; final String body; final String payload; } Future main() async { if (Platform.isIOS) { AMapLocationClient.setApiKey('548414a843a2ec9c383e34341b8c84df'); } WidgetsFlutterBinding.ensureInitialized(); const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('@mipmap/app_logo'); /// Note: permissions aren't requested here just to demonstrate that can be /// done later final IOSInitializationSettings initializationSettingsIOS = IOSInitializationSettings( requestAlertPermission: true, requestBadgePermission: true, requestSoundPermission: true, onDidReceiveLocalNotification: (int id, String title, String body, String payload) async { didReceiveLocalNotificationSubject.add(ReceivedNotification( id: id, title: title, body: body, payload: payload)); }); const MacOSInitializationSettings initializationSettingsMacOS = MacOSInitializationSettings( requestAlertPermission: true, requestBadgePermission: true, requestSoundPermission: true); final InitializationSettings initializationSettings = InitializationSettings( android: initializationSettingsAndroid, iOS: initializationSettingsIOS, macOS: initializationSettingsMacOS); await flutterLocalNotificationsPlugin.initialize(initializationSettings, onSelectNotification: (String payload) async { if (payload != null) { if (payload == notifyTypeNewMsg) { RootPageView().bNIndex = 2; EventBus().emit('ChangePage'); } debugPrint('notification payload: $payload'); } selectNotificationSubject.add(payload); }); /// STEP 1. Create catcher configuration. /// Debug configuration with dialog report mode and console handler. It will show dialog and once user accepts it, error will be shown /// in console. // CatcherOptions debugOptions = CatcherOptions(SilentReportMode(), [ // EmailManualHandler(["1033661004@qq.com"]), // ]); // // /// Release configuration. Same as above, but once user accepts dialog, user will be prompted to send email with crash to support. // CatcherOptions releaseOptions = CatcherOptions(DialogReportMode(), [ // EmailManualHandler(["1033661004@qq.com"]) // ]); /// STEP 2. Pass your root widget (MyApp) along with Catcher configuration: // Catcher( // rootWidget: MyApp(), // debugConfig: debugOptions, // releaseConfig: releaseOptions); runApp(MyApp()); } class MyApp extends StatelessWidget with WidgetsBindingObserver { BuildContext buildContext; StateSetter ss; List shops = []; int shopIndex = 0; String clipboardT; int amountCompleted = 0; NewOrderBeanEntity newOrder; @override StatelessElement createElement() { // TODO: implement createElement WidgetsBinding.instance.addObserver(this); MyCookie().initP(); EventBus().on('hasNewOrder', (arg) { newOrder = arg; displayPendingOrders(); }); EventBus().on('systemInformation', (arg) { if (arg is SystemInformationBeanEntity) { showSystemMessages(arg); } }); EventBus().on('检查粘贴板', (arg) { Timer(Duration(seconds: 1), () { getClipboardData(); }); }); EventBus().on('hasCoupon', (arg) { if (arg is CouponBeanDataData) { couponBulletBox(arg); } }); return super.createElement(); } @override Widget build(BuildContext context) { return RefreshConfiguration( child: MaterialApp( navigatorKey: navigatorKey, theme: ThemeData(fontFamily: 'PingFang'), debugShowCheckedModeBanner: false, home: WelcomePage(), routes: { '/loginPage': (context) => LoginPage(), }, supportedLocales: [const Locale('zh', 'CH')], localizationsDelegates: [ RefreshLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, const FallbackCupertinoLocalisationsDelegate(), ], builder: (BuildContext context, Widget child) { buildContext = context; return MediaQuery( data: MediaQuery.of(context) .copyWith(textScaleFactor: 1.0), //设置字体不随系统字体大小改变 child: FlutterEasyLoading( child: child, ), ); }, ), hideFooterWhenNotFull: true, footerBuilder: () { return ClassicFooter( loadStyle: LoadStyle.ShowWhenLoading, ); }, ); } @override void didChangeAppLifecycleState(AppLifecycleState state) { super.didChangeAppLifecycleState(state); if (state == AppLifecycleState.paused) { print('went to Background'); } if (state == AppLifecycleState.resumed) { print('came back to Foreground'); if (MyCookie().loginInformation != null) { Timer(Duration(seconds: 1), () { getClipboardData(); }); } } } //获取剪切板文字 Future getClipboardData() async { PopUpQueue().onShow = true; ClipboardData text = await Clipboard.getData(Clipboard.kTextPlain); try { print('Clipboard-----\n${text.text}'); clipboardT = text.text; Clipboard.setData(ClipboardData(text: '')); getOnlineTemplate(); } catch (e) { PopUpQueue().onShow = false; PopUpQueue().showNext(); } } //获取线上模板 void getOnlineTemplate() { MyDio().query({ 'key': 'order_template', "dims": ["id", "sid", "template"], "filters": {} }, (response, hasError) { if (!hasError) { TemplateBeanEntity entity = TemplateBeanEntity() .fromJson(json.decode(response.data.toString())); checkOrder(entity.data); } else { PopUpQueue().onShow = false; PopUpQueue().showNext(); } }, (error) { PopUpQueue().onShow = false; PopUpQueue().showNext(); }); } var orderHash; //匹配模板去除不是自己的订单 void checkOrder(List data) { bool hasMatch = false; w: for (int i = 0; i < data.length; i++) { try { var res = parseString2( data[i].template.replaceAll('\r', ''), '''$clipboardT'''); if (res != null) { print(data[i].template); print(json.encode(res)); var order = parse2(res); order.removeWhere((element) => !element.seller.name .contains(MyCookie().loginInformation.data.extra.name) && !MyCookie() .loginInformation .data .extra .name .contains(element.seller.name)); if (order.length > 0) { hasMatch = true; orderHash = computeOrderHash(res); getShop(order); } break w; } } catch (e) {} } if (!hasMatch) { PopUpQueue().onShow = false; PopUpQueue().showNext(); } } //订单视图 items(List order) { List items = []; order.forEach((element) { items.add(Container( child: Column( children: [ Row( children: [ Container( margin: EdgeInsets.only(left: 8, right: 7), child: ClipRRect( child: MyViews().netImg( imgURL(MyCookie().loginInformation.data.extra.picture), 35, 35), borderRadius: BorderRadius.circular(17.5), ), ), Expanded( child: Container( height: 35, child: Column( children: [ Text( '付款人:${element.payer.name}', style: TextStyle( color: MyColors.c333333, fontSize: 13, decoration: TextDecoration.none, ), ), Text( '订单时间:${element.time}', style: TextStyle( color: MyColors.c666666, fontSize: 10, decoration: TextDecoration.none, ), ), ], mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, ), ), ), Container( margin: EdgeInsets.only(right: 10), child: Text( '¥${(element.payer.amount * element.factor).toStringAsFixed(2)}', style: TextStyle( color: MyColors.cFF4233, fontSize: 14, decoration: TextDecoration.none, ), ), ), ], crossAxisAlignment: CrossAxisAlignment.center, ), Container( height: 0.5, margin: EdgeInsets.only(right: 10, left: 50, top: 5), color: MyColors.cE7E7E7, ) ], ), margin: EdgeInsets.only(top: 5), )); }); return items; } //获取用户所在店铺 void getShop(List order) { shopIndex = 0; MyDio().query({ "key": "shop_user", "filters": { "or": true, "conditions": [ "role!=0", "user_uid==${MyCookie().getUID()}", "review_state==1" ], "filters": [ { "conditions": ["role==0", "user_uid==${MyCookie().getUID()}"] } ] }, "dims": shopUserDims, "paging": [1, 20000] }, (response, hasError) { if (!hasError) { MyShopBeanEntity entity = MyShopBeanEntity().fromJson(json.decode(response.data.toString())); shops = entity.data.data; shops.removeWhere((element) => !element.privateShop); if (shops.length == 0) { showToast('你还没有添加任何货帮,暂时不能发送智能订单'); PopUpQueue().onShow = false; PopUpQueue().showNext(); } else { EasyLoading.instance ..contentPadding = EdgeInsets.symmetric(horizontal: 0, vertical: 12) ..alignment = Alignment.bottomCenter ..loadingStyle = EasyLoadingStyle.light ..contentMargin = EdgeInsets.fromLTRB(20, 20, 20, 65); EasyLoading.show( indicator: Material( color: Colors.white, child: StatefulBuilder( builder: (c, s) { ss = s; return Column( children: [ Container( child: Stack( children: [ Container( child: MyViews() .myText('智能订单', MyColors.c333333, 14), alignment: Alignment.center, height: 22, ), Positioned( right: 0, child: GestureDetector( onTap: () { PopUpQueue().onShow = false; PopUpQueue().showNext(); }, behavior: HitTestBehavior.translucent, child: Container( child: Icon( Icons.close, size: 20, color: Colors.white, ), decoration: BoxDecoration( color: MyColors.cB6B6B6, borderRadius: BorderRadius.circular(11)), height: 22, width: 22, ), ), ) ], alignment: Alignment.center, ), height: 30, padding: EdgeInsets.symmetric(horizontal: 12), ), Container( height: 5, color: MyColors.cF7F7F7, margin: EdgeInsets.only(top: 10), ), Column( children: items(order), ), Container( height: 5, color: MyColors.cF7F7F7, margin: EdgeInsets.only(top: 10), ), Visibility( child: Column( children: [ Container( child: MyViews() .myText('货帮选择', MyColors.c333333, 13), margin: EdgeInsets.only(left: 7, top: 11), ), Container( margin: EdgeInsets.symmetric( horizontal: 7, vertical: 10), height: (shops.length * 1.0 / 2).ceil() * (double.parse( '${MediaQuery.of(buildContext).size.width - 74}') / 2 / 3.8 + 10) - 10, child: GridView( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 2, //横轴三个子widget childAspectRatio: 3.8, crossAxisSpacing: 10, mainAxisSpacing: 8 //宽高比为1时,子widget ), children: shop(shops), padding: EdgeInsets.all(0), ), ), ], crossAxisAlignment: CrossAxisAlignment.start, ), visible: shops.length != 1, ), Container( height: 0.5, color: MyColors.cF7F7F7, margin: EdgeInsets.only(bottom: 10), ), Container( child: GestureDetector( onTap: () { EventBus().on('saveOrder', (arg) { amountCompleted++; if (amountCompleted == order.length) { amountCompleted = 0; EasyLoading.dismiss(); showToast('发送成功'); clipboardT = ''; EventBus().off('saveOrder'); PopUpQueue().onShow = false; PopUpQueue().showNext(); } }); order.forEach((element) { sendOrder(element); }); }, behavior: HitTestBehavior.translucent, child: Container( decoration: BoxDecoration( color: MyColors.cFF4233, borderRadius: BorderRadius.circular(20), ), height: 40, width: 150, child: MyViews().myText('发送订单', Colors.white, 14), alignment: Alignment.center, ), ), alignment: Alignment.center, ) ], mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, ); }, ), ), ); } } else { PopUpQueue().onShow = false; PopUpQueue().showNext(); } }, (error) { PopUpQueue().onShow = false; PopUpQueue().showNext(); }); } //店铺视图 shop(List shops) { List items = []; for (int i = 0; i < shops.length; i++) { items.add(GestureDetector( onTap: () { shopIndex = i; ss(() {}); }, behavior: HitTestBehavior.translucent, child: Container( child: Row( children: [ Container( margin: EdgeInsets.only(right: 5), child: ClipRRect( child: MyViews().netImg(imgURL(shops[i].shopPic), 30, 30), borderRadius: BorderRadius.circular(15), ), ), Expanded( child: Column( children: [ Text( shops[i].shopName, style: TextStyle( color: i == shopIndex ? MyColors.cFF4233 : MyColors.c666666, fontSize: 12, ), maxLines: 1, overflow: TextOverflow.ellipsis, softWrap: true, ), Text( 'ID:${shops[i].shopUid}', style: TextStyle( color: i == shopIndex ? MyColors.cFF4233 : MyColors.c666666, fontSize: 10, ), maxLines: 1, overflow: TextOverflow.ellipsis, softWrap: true, ), ], crossAxisAlignment: CrossAxisAlignment.start, ), ), ], ), decoration: BoxDecoration( color: i == shopIndex ? MyColors.cFFECEB : MyColors.cEDEDED, borderRadius: BorderRadius.circular(4), ), constraints: BoxConstraints(maxWidth: 150), padding: EdgeInsets.symmetric(horizontal: 6, vertical: 6), ), )); } return items; } //发送订单 void sendOrder(OrderInfo2 element) { MyDio().save({ 'key': 'order', 'object': { 'uuid':orderHash, 'shop_uid': shops[shopIndex].shopUid, 'shop_pic': shops[shopIndex].shopPic, 'shop_name': shops[shopIndex].shopName, 'seller_pic': MyCookie().loginInformation.data.extra.picture, 'seller_uid': MyCookie().getUID(), 'seller_name': MyCookie().loginInformation.data.extra.name, 'buyer_name': element.payer.name, 'type': orderTypeThirdPlatform, 'amount': NumUtil.multiply(element.payer.amount, element.factor) } }, (response, hasError) { if (!hasError) { EventBus().emit('saveOrder'); } }, (error) {}); } //待支付订单视图 void displayPendingOrders() { EasyLoading.instance ..contentPadding = EdgeInsets.symmetric(horizontal: 0, vertical: 12) ..alignment = Alignment.bottomCenter ..loadingStyle = EasyLoadingStyle.light ..contentMargin = EdgeInsets.fromLTRB(20, 20, 20, 65); EasyLoading.show( indicator: Material( color: Colors.white, child: Column( children: [ Container( padding: EdgeInsets.symmetric(horizontal: 12), child: Row( children: [ Container( margin: EdgeInsets.only(right: 7), child: ClipRRect( child: MyViews() .netImg(imgURL(newOrder.content.shopPic), 25, 25), borderRadius: BorderRadius.circular(12.5), ), ), MyViews().myText( '${newOrder.content.shopName}(${newOrder.content.shopUID})', MyColors.c333333, 14), ], ), ), Container( margin: EdgeInsets.only(top: 11, left: 12, right: 12, bottom: 11), height: 0.5, color: MyColors.cE7E7E7, ), Container( margin: EdgeInsets.symmetric(horizontal: 12), child: Row( children: [ Container( child: SvgPicture.asset( newOrder.content.buyerPic==null?'images/svg/第三方.svg':'images/svg/线下付款.svg', height: 27, width: 27, ), margin: EdgeInsets.only(right: 8), height: 45, width: 45, decoration: BoxDecoration( border: Border.all(color: MyColors.cEBEBEB, width: 1)), alignment: Alignment.center, ), Expanded( child: Container( height: 45, child: Column( children: [ MyViews().myText(newOrder.content.buyerPic==null?'第三方订单':'线下付款', MyColors.c333333, 13), Row( children: [ MyViews().myText('¥${newOrder.content.amount}', MyColors.cFF4233, 12), MyViews().myText('x1', MyColors.c999999, 12), ], mainAxisAlignment: MainAxisAlignment.spaceBetween, ) ], mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, ), ), ), ], ), ), Container( height: 0.5, color: MyColors.cE7E7E7, margin: EdgeInsets.symmetric(horizontal: 12, vertical: 11), ), Container( margin: EdgeInsets.symmetric(horizontal: 12), child: Row( children: [ MyViews().myText('卖家信息:', MyColors.c333333, 13), Row( children: [ Container( margin: EdgeInsets.only(right: 5), child: ClipRRect( child: MyViews().netImg( imgURL(newOrder.content.sellerPic), 23, 23), borderRadius: BorderRadius.circular(11.5), ), ), MyViews().myText( '${newOrder.content.sellerName}(${hideUID(newOrder.content.sellerUID.toString())})', MyColors.c333333, 13), ], ) ], mainAxisAlignment: MainAxisAlignment.spaceBetween, ), ), Container( height: 0.5, color: MyColors.cE7E7E7, margin: EdgeInsets.symmetric(horizontal: 12, vertical: 11), ), Container( margin: EdgeInsets.symmetric(horizontal: 12), child: Row( children: [ MyViews().myText('买家信息:', MyColors.c333333, 13), Row( children: [ Container( margin: EdgeInsets.only(right: 5), child: ClipRRect( child: MyViews().netImg(newOrder.content.buyerPic==null?'':imgURL(newOrder.content.buyerPic), 23, 23), borderRadius: BorderRadius.circular(11.5), ), ), MyViews().myText('${newOrder.content.buyerName} ${newOrder.content.buyerUID!=null&&newOrder.content.buyerUID.toString().length>0?'(${newOrder.content.buyerUID})':''}', MyColors.c333333, 13), ], ) ], mainAxisAlignment: MainAxisAlignment.spaceBetween, ), ), Container( height: 0.5, color: MyColors.cE7E7E7, margin: EdgeInsets.symmetric(horizontal: 12, vertical: 11), ), Container( margin: EdgeInsets.symmetric(horizontal: 12), child: Row( children: [ MyViews().myText('下单时间:', MyColors.c333333, 13), MyViews().myText( '${newOrder.content.createTime}', MyColors.c333333, 13) ], mainAxisAlignment: MainAxisAlignment.spaceBetween, ), ), Container( height: 0.5, color: MyColors.cE7E7E7, margin: EdgeInsets.symmetric(horizontal: 12, vertical: 11), ), Container( margin: EdgeInsets.symmetric(horizontal: 20), child: Row( children: [ Expanded( child: GestureDetector( onTap: () { PopUpQueue().onShow = false; PopUpQueue().showNext(); }, 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: () { if (newOrder.content.buyerName .contains(MyCookie().getName()) || MyCookie() .getName() .contains(newOrder.content.buyerName)) { EasyLoading.dismiss(); payTheOrder(); } else { showToast('该订单与你无关'); PopUpQueue().onShow = false; PopUpQueue().showNext(); } }, 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), ), ) ], ), ) ], ), ), ); } void payTheOrder() { //获取店铺信息 MyDio().query({ "key": "shop_user", "filters": { "conditions": ["shop_uid==${newOrder.content.shopUID}"] }, "dims": shopUserDims, "paging": [1, 1], "order_by": ["shop_name,DESC"] }, (response, hasError) { if (!hasError) { MyShopBeanEntity entity = MyShopBeanEntity().fromJson(json.decode(response.data.toString())); navigatorKey.currentState.push(MaterialPageRoute( builder: (context) => GangInPage(entity.data.data[0], newOrder.content))); } }, (error) {}); // getUserWalletBalance((re, hE) { // if (!hE) { // UserBalanceEntity balance = // UserBalanceEntity().fromJson(json.decode(re.data.toString())); // if (balance.data >= newOrder.content.amount) { // payOrder(payWayWallet, newOrder.content.uID, (re, hE) { // if (!hE) { // showToast('支付成功'); // EventBus().emit('payAnOrder'); // } // }, (e) {}, context); // } else { // payOrder(payWayAliPay, newOrder.content.uID, (re, hE) { // if (!hE) { // PayByAlipayBeanEntity entity = PayByAlipayBeanEntity() // .fromJson(json.decode(re.data.toString())); // EventBus().on('alipayPaymentCallback', (arg) { // EventBus().off('alipayPaymentCallback'); // EasyLoading.dismiss(); // showToast('支付成功'); // EventBus().emit('reNoPayOrder'); // }); // print(entity.data); // EasyLoading.instance // ..contentPadding = // EdgeInsets.symmetric(horizontal: 20, vertical: 12) // ..alignment = Alignment.center // ..contentMargin = EdgeInsets.all(20); // EasyLoading.show(); // aliPay(entity.data).then((value) { // print(json.encode(value)); // AlipayResultBeanEntity e = AlipayResultBeanEntity() // .fromJson(json.decode(json.encode(value))); // try { // int r = int.parse(e.resultStatus); // if (r == 9000) { // showToast('支付成功'); // } else { // showToast(aliPayResultStatus(r)); // resetOrder(newOrder.content.uID, context); // } // } catch (e) { // EasyLoading.dismiss(); // } // }); // // EventBus().emit('payAnOrder'); // } // }, (e) {}, context); // // showToast('积分余额不足'); // } // } // }, (e) {}, context); } void showSystemMessages(SystemInformationBeanEntity arg) { EasyLoading.instance ..contentPadding = EdgeInsets.symmetric(horizontal: 12, vertical: 12) ..alignment = Alignment.center ..loadingStyle = EasyLoadingStyle.custom ..backgroundColor = Colors.transparent ..indicatorColor = Colors.black ..progressColor = Colors.black ..maskColor = Colors.black ..textColor = Colors.black ..contentMargin = EdgeInsets.fromLTRB(20, 20, 20, 65); EasyLoading.show( indicator: Material( color: Colors.transparent, child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(16), ), height: MediaQuery.of(buildContext).size.height - 200, padding: EdgeInsets.symmetric(horizontal: 8, vertical: 12), child: Column( children: [ Expanded(child: Container()), Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16), ), child: Column( children: [ Container( child: Text( '系统消息', style: TextStyle( color: MyColors.c333333, fontSize: 14, fontWeight: FontWeight.bold), ), margin: EdgeInsets.symmetric(horizontal: 26, vertical: 15), ), Container( child: Text( arg.content.content, style: TextStyle(color: MyColors.c333333, fontSize: 14), ), margin: EdgeInsets.symmetric(horizontal: 26), alignment: Alignment.centerLeft, ), Container( height: 0.5, color: MyColors.cE7E7E7, margin: EdgeInsets.only(bottom: 12, top: 12), ), GestureDetector( onTap: () { PopUpQueue().onShow = false; PopUpQueue().showNext(); }, behavior: HitTestBehavior.translucent, child: Container( width: 150, margin: EdgeInsets.only(bottom: 14), decoration: BoxDecoration( borderRadius: BorderRadius.circular(20), border: Border.all(color: MyColors.cFF4233, width: 1.1), color: Colors.white), child: MyViews().myText('我知道了', MyColors.cFF4233, 14), height: 40, alignment: Alignment.center, ), ) ], ), ), Expanded(child: Container()), ], ), alignment: Alignment.center, ), ), ); } //优惠券弹框 void couponBulletBox(CouponBeanDataData data) { EasyLoading.instance ..contentPadding = EdgeInsets.symmetric(horizontal: 12, vertical: 12) ..alignment = Alignment.center ..loadingStyle = EasyLoadingStyle.custom ..backgroundColor = Colors.transparent ..indicatorColor = Colors.black ..progressColor = Colors.black ..maskColor = Colors.black ..textColor = Colors.black ..contentMargin = EdgeInsets.fromLTRB(20, 20, 20, 65); EasyLoading.show( indicator: Material( color: Colors.transparent, child: Stack( children: [ Image.asset( 'images/优惠券.png', height: 640, width: double.infinity, ), Container( height: 640, margin: EdgeInsets.only(top: 24), child: Column( children: [ Container( margin: EdgeInsets.only(bottom: 5), child: Text( '抢红包啦', style: TextStyle( color: Colors.white, fontSize: 24, fontWeight: FontWeight.bold, shadows: [ Shadow( offset: Offset(1.0, 1.0), blurRadius: 3.0, color: MyColors.cDC1717, ) ]), ), ), Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(8), ), height: 107, width: double.infinity, margin: EdgeInsets.symmetric(horizontal: 25, vertical: 27), child: Column( children: [ Text( '平台红包大放送!', style: TextStyle( color: MyColors.c333333, fontSize: 16, fontWeight: FontWeight.bold), ), Text( '立即去抢最高${data.max}元消费红包', style: TextStyle( color: MyColors.cFF4233, fontSize: 14, fontWeight: FontWeight.bold), ), Text( '活动时间${data.distributeFromDate}至${data.distributeEndDate}', style: TextStyle( color: MyColors.c666666, fontSize: 11, fontWeight: FontWeight.bold), ), ], mainAxisAlignment: MainAxisAlignment.spaceEvenly, crossAxisAlignment: CrossAxisAlignment.start, ), padding: EdgeInsets.symmetric(horizontal: 26), ), Container( margin: EdgeInsets.symmetric(horizontal: 25), child: Row( children: [ Expanded( child: GestureDetector( onTap: () { EasyLoading.dismiss(); }, behavior: HitTestBehavior.translucent, child: Container( height: 34, decoration: BoxDecoration( borderRadius: BorderRadius.only( topLeft: Radius.circular(17), bottomLeft: Radius.circular(17), ), border: Border.all( color: MyColors.cFFB455, width: 1), color: Colors.white), child: Text( '我已参与', style: TextStyle( color: MyColors.cFFB455, fontSize: 14, ), ), alignment: Alignment.center, ), ), ), Expanded( child: GestureDetector( onTap: () { grabACoupon(data.id); }, behavior: HitTestBehavior.translucent, child: Container( height: 34, decoration: BoxDecoration( borderRadius: BorderRadius.only( topRight: Radius.circular(17), bottomRight: Radius.circular(17), ), color: MyColors.cFFB455), child: Text( '立即去抢', style: TextStyle( color: Colors.white, fontSize: 14, ), ), alignment: Alignment.center, ), ), ), ], ), ) ], mainAxisAlignment: MainAxisAlignment.center, ), alignment: Alignment.center, ) ], ), ), ); } } class FallbackCupertinoLocalisationsDelegate extends LocalizationsDelegate { const FallbackCupertinoLocalisationsDelegate(); @override bool isSupported(Locale locale) => true; @override Future load(Locale locale) => DefaultCupertinoLocalizations.load(locale); @override bool shouldReload(FallbackCupertinoLocalisationsDelegate old) => false; }