import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'package:amap_flutter_location/amap_flutter_location.dart'; import 'package:amap_flutter_location/amap_location_option.dart'; import 'package:bbyyy/beans/coupon_bean_entity.dart'; import 'package:bbyyy/beans/user_bean_entity.dart'; import 'package:bbyyy/https/MyDio.dart'; import 'package:bbyyy/https/my_request.dart'; import 'package:bbyyy/my_tools/dims.dart'; import 'package:bbyyy/my_tools/easy_loading/easy_loading.dart'; import 'package:bbyyy/my_tools/event_bus.dart'; import 'package:bbyyy/my_tools/my_cookie.dart'; import 'package:bbyyy/my_tools/my_datas.dart'; import 'package:bbyyy/my_tools/my_tools.dart'; import 'package:bbyyy/my_tools/pop_up_queue.dart'; import 'package:bbyyy/nsq/nsq.dart' as Nsq; import 'package:bbyyy/paegs/gang_page/gang_page.dart'; import 'package:bbyyy/paegs/home_page/home_page.dart'; import 'package:bbyyy/paegs/mine_page/mine_page.dart'; import 'package:bbyyy/paegs/mine_page/order_page/order_page.dart'; import 'package:bbyyy/paegs/msg_page/msg_page.dart'; import 'package:bbyyy/paegs/root_page/root_page_view.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:permission_handler/permission_handler.dart'; class RootPage extends StatefulWidget { @override _RootPageState createState() => _RootPageState(); } class _RootPageState extends State { PageController pageController = PageController(initialPage: 0); DateTime lastPopTime; AMapFlutterLocation _locationPlugin = new AMapFlutterLocation(); Map _locationResult; StreamSubscription> _locationListener; @override void initState() { super.initState(); MyCookie().initP(); if (Platform.isIOS) { requestAccuracyAuthorization(); } _locationListener = _locationPlugin.onLocationChanged().listen((Map result) { result.forEach((key, value) { print('$key---------------$value'); }); setState(() { _locationResult = result; }); }); getLocation(); Nsq.ConnectServer( Nsq.handlerMessage, // 接收消息处理逻辑 // serverIp: '172.16.104.14', serverIp: MyCookie().server, // 服务端返回 serverPort: 4150, // 服务端返回 topic: '${MyCookie().getUID()}', // 主题订阅,服务端返回 channel: '${MyCookie().getUID()}', // 服务端返回uid clientId: '客户uid', // 服务端返回uid hostname: '主机名', // 服务端返回 ); EventBus().emit('检查粘贴板'); EventBus().on('ChangePage', (arg) { if (RootPageView().bNIndex == 3) { queryPersonalInformation(); } pageController.jumpToPage(RootPageView().bNIndex); setState(() {}); }); EventBus().on('hasNoPay', (arg) { setState(() {}); }); MyData().init(context); queryPersonalInformation(); checkForUpdates(context); Future.delayed(Duration(seconds: 1), () { checkCouponEvent(); }); } @override void dispose() { // TODO: implement dispose EventBus().off('ChangePage'); EventBus().off('hasNoPay'); ///移除定位监听 if (null != _locationListener) { _locationListener?.cancel(); } ///销毁定位 _locationPlugin.destroy(); super.dispose(); } @override Widget build(BuildContext context) { return WillPopScope( onWillPop: () async { if (lastPopTime == null || DateTime.now().difference(lastPopTime) > Duration(seconds: 2)) { lastPopTime = DateTime.now(); EasyLoading.showToast('再按一次退出'); } else { lastPopTime = DateTime.now(); await SystemChannels.platform.invokeMethod('SystemNavigator.pop'); } return false; }, child: Scaffold( resizeToAvoidBottomInset: false, backgroundColor: Colors.transparent, body: Stack( children: [ Column( children: [ Expanded( child: PageView( controller: pageController, children: [HomePage(), GangPage(), MsgPage(), MinePage()], physics: NeverScrollableScrollPhysics(), ), ), RootPageView().bottomNavigationBar(), ], ), if (MyCookie().haveNoPay) Positioned( bottom: 60, right: 0, child: SafeArea( top: false, child: GestureDetector( onTap: () { MyTools().toPage( context, OrderPage( index: 2, ), (then) { queryPersonalInformation(); }); }, behavior: HitTestBehavior.translucent, child: Container( height: 44, width: 100, padding: EdgeInsets.symmetric(horizontal: 10), child: Row( children: [ SvgPicture.asset( 'images/svg/订单.svg', color: Colors.white, height: 15, width: 15, ), Text( '未付订单', style: TextStyle(color: Colors.white, fontSize: 14), ) ], mainAxisAlignment: MainAxisAlignment.spaceBetween, ), decoration: BoxDecoration( color: Colors.amber, borderRadius: BorderRadius.only( topLeft: Radius.circular(22), bottomLeft: Radius.circular(22), ), ), ), ), ), ), ], ), ), ); } void queryPersonalInformation() { MyDio().query({ "key": "user", "filters": { "conditions": ["uid == ${MyCookie().getUID()}"] }, "dims": userDims, "paging": [1, 20] }, (response, hasError) { if (!hasError) { UserBeanEntity entity = UserBeanEntity().fromJson(json.decode(response.data.toString())); MyCookie().userBean = entity.data.data[0]; EventBus().emit('userChange'); } }, (error) {}); } Future getLocation() async { var locationStatus = await Permission.location.status; var cameraStatus = await Permission.camera.status; print('Permission.location.status--------------$locationStatus'); print('Permission.camera.status--------------$cameraStatus'); if (locationStatus.isDenied) { await Permission.location.request().then((value) async { print('Permission.location.request()-----$value'); if (value == PermissionStatus.granted) { _setLocationOption(); _locationPlugin.startLocation(); } }); } else if (locationStatus.isGranted) { _setLocationOption(); _locationPlugin.startLocation(); } if (cameraStatus.isDenied) { await Permission.camera.request().then((value) { print('Permission.camera.request()-----$value'); }); } } //查询优惠券活动 checkCouponEvent() { MyDio().query({ "key": "coupon_distribute", "filters": { "conditions": ["valid==true"], }, "dims": couponDistributeDims, "paging": [1, 100] }, (response, hasError) { if (!hasError) { CouponBeanEntity entity = CouponBeanEntity().fromJson(json.decode(response.data.toString())); PopUpQueue().coupon.addAll(entity.data.data); } }, (error) {}); } void requestAccuracyAuthorization() async { AMapAccuracyAuthorization currentAccuracyAuthorization = await _locationPlugin.getSystemAccuracyAuthorization(); if (currentAccuracyAuthorization == AMapAccuracyAuthorization.AMapAccuracyAuthorizationFullAccuracy) { print("精确定位类型"); } else if (currentAccuracyAuthorization == AMapAccuracyAuthorization.AMapAccuracyAuthorizationReducedAccuracy) { print("模糊定位类型"); } else { print("未知定位类型"); } } void _setLocationOption() { AMapLocationOption locationOption = new AMapLocationOption(); ///是否单次定位 locationOption.onceLocation = true; ///是否需要返回逆地理信息 locationOption.needAddress = true; ///逆地理信息的语言类型 locationOption.geoLanguage = GeoLanguage.DEFAULT; locationOption.desiredLocationAccuracyAuthorizationMode = AMapLocationAccuracyAuthorizationMode.ReduceAccuracy; locationOption.fullAccuracyPurposeKey = "AMapLocationScene"; ///设置Android端连续定位的定位间隔 locationOption.locationInterval = 2000; ///设置Android端的定位模式
///可选值:
///
  • [AMapLocationMode.Battery_Saving]
  • ///
  • [AMapLocationMode.Device_Sensors]
  • ///
  • [AMapLocationMode.Hight_Accuracy]
  • locationOption.locationMode = AMapLocationMode.Hight_Accuracy; ///设置iOS端的定位最小更新距离
    locationOption.distanceFilter = -1; ///设置iOS端期望的定位精度 /// 可选值:
    ///
  • [DesiredAccuracy.Best] 最高精度
  • ///
  • [DesiredAccuracy.BestForNavigation] 适用于导航场景的高精度
  • ///
  • [DesiredAccuracy.NearestTenMeters] 10米
  • ///
  • [DesiredAccuracy.Kilometer] 1000米
  • ///
  • [DesiredAccuracy.ThreeKilometers] 3000米
  • locationOption.desiredAccuracy = DesiredAccuracy.Best; ///设置iOS端是否允许系统暂停定位 locationOption.pausesLocationUpdatesAutomatically = false; ///将定位参数设置给定位插件 _locationPlugin.setLocationOption(locationOption); } }