root_page.dart 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. import 'dart:convert';
  2. import 'dart:io';
  3. import 'package:amap_location/amap_location.dart';
  4. import 'package:amap_location/amap_location_option.dart';
  5. import 'package:bbyyy/beans/coupon_bean_entity.dart';
  6. import 'package:bbyyy/beans/user_bean_entity.dart';
  7. import 'package:bbyyy/https/MyDio.dart';
  8. import 'package:bbyyy/https/my_request.dart';
  9. import 'package:bbyyy/my_tools/dims.dart';
  10. import 'package:bbyyy/my_tools/easy_loading/easy_loading.dart';
  11. import 'package:bbyyy/my_tools/event_bus.dart';
  12. import 'package:bbyyy/my_tools/my_cookie.dart';
  13. import 'package:bbyyy/my_tools/my_datas.dart';
  14. import 'package:bbyyy/my_tools/my_tools.dart';
  15. import 'package:bbyyy/my_tools/pop_up_queue.dart';
  16. import 'package:bbyyy/nsq/nsq.dart' as Nsq;
  17. import 'package:bbyyy/paegs/gang_page/gang_page.dart';
  18. import 'package:bbyyy/paegs/home_page/home_page.dart';
  19. import 'package:bbyyy/paegs/mine_page/mine_page.dart';
  20. import 'package:bbyyy/paegs/mine_page/order_page/order_page.dart';
  21. import 'package:bbyyy/paegs/msg_page/msg_page.dart';
  22. import 'package:bbyyy/paegs/root_page/root_page_view.dart';
  23. import 'package:flutter/cupertino.dart';
  24. import 'package:flutter/material.dart';
  25. import 'package:flutter/services.dart';
  26. import 'package:flutter_svg/flutter_svg.dart';
  27. import 'package:permission_handler/permission_handler.dart';
  28. class RootPage extends StatefulWidget {
  29. @override
  30. _RootPageState createState() => _RootPageState();
  31. }
  32. class _RootPageState extends State<RootPage> {
  33. PageController pageController = PageController(initialPage: 0);
  34. DateTime lastPopTime;
  35. @override
  36. void initState() {
  37. super.initState();
  38. MyCookie().initP();
  39. getLocation();
  40. Nsq.ConnectServer(
  41. Nsq.handlerMessage, // 接收消息处理逻辑
  42. // serverIp: '172.16.104.14',
  43. serverIp: MyCookie().server,
  44. // 服务端返回
  45. serverPort: 4150,
  46. // 服务端返回
  47. topic: '${MyCookie().getUID()}',
  48. // 主题订阅,服务端返回
  49. channel: '${MyCookie().getUID()}',
  50. // 服务端返回uid
  51. clientId: '客户uid',
  52. // 服务端返回uid
  53. hostname: '主机名', // 服务端返回
  54. );
  55. EventBus().emit('检查粘贴板');
  56. EventBus().on('ChangePage', (arg) {
  57. if (RootPageView().bNIndex == 3) {
  58. queryPersonalInformation();
  59. }
  60. pageController.jumpToPage(RootPageView().bNIndex);
  61. setState(() {});
  62. });
  63. EventBus().on('hasNoPay', (arg) {
  64. setState(() {
  65. });
  66. });
  67. MyData().init(context);
  68. queryPersonalInformation();
  69. checkForUpdates(context);
  70. Future.delayed(Duration(seconds: 1), () {
  71. checkCouponEvent();
  72. });
  73. }
  74. @override
  75. void dispose() {
  76. // TODO: implement dispose
  77. EventBus().off('ChangePage');
  78. EventBus().off('hasNoPay');
  79. AMapLocationClient.stopLocation();
  80. super.dispose();
  81. }
  82. @override
  83. Widget build(BuildContext context) {
  84. return WillPopScope(
  85. onWillPop: () async {
  86. if (lastPopTime == null ||
  87. DateTime.now().difference(lastPopTime) > Duration(seconds: 2)) {
  88. lastPopTime = DateTime.now();
  89. EasyLoading.showToast('再按一次退出');
  90. } else {
  91. lastPopTime = DateTime.now();
  92. await SystemChannels.platform.invokeMethod('SystemNavigator.pop');
  93. }
  94. return false;
  95. },
  96. child: Scaffold(
  97. resizeToAvoidBottomInset: false,
  98. backgroundColor: Colors.transparent,
  99. body: Stack(
  100. children: [
  101. Column(
  102. children: [
  103. Expanded(
  104. child: PageView(
  105. controller: pageController,
  106. children: [HomePage(), GangPage(), MsgPage(), MinePage()],
  107. physics: NeverScrollableScrollPhysics(),
  108. ),
  109. ),
  110. RootPageView().bottomNavigationBar(),
  111. ],
  112. ),
  113. if (MyCookie().haveNoPay)
  114. Positioned(
  115. bottom: 60,
  116. right: 0,
  117. child: SafeArea(
  118. top: false,
  119. child: GestureDetector(
  120. onTap: (){
  121. MyTools().toPage(context, OrderPage(index: 2,), (then) {
  122. queryPersonalInformation();
  123. });
  124. },
  125. behavior: HitTestBehavior.translucent,
  126. child: Container(
  127. height: 44,
  128. width: 100,
  129. padding: EdgeInsets.symmetric(horizontal: 10),
  130. child: Row(
  131. children: [
  132. SvgPicture.asset(
  133. 'images/svg/订单.svg',
  134. color: Colors.white,
  135. height: 15,
  136. width: 15,
  137. ),
  138. Text(
  139. '未付订单',
  140. style: TextStyle(color: Colors.white, fontSize: 14),
  141. )
  142. ],
  143. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  144. ),
  145. decoration: BoxDecoration(
  146. color: Colors.amber,
  147. borderRadius: BorderRadius.only(
  148. topLeft: Radius.circular(22),
  149. bottomLeft: Radius.circular(22),
  150. ),
  151. ),
  152. ),
  153. ),
  154. ),
  155. ),
  156. ],
  157. ),
  158. ),
  159. );
  160. }
  161. void queryPersonalInformation() {
  162. MyDio().query({
  163. "key": "user",
  164. "filters": {
  165. "conditions": ["uid == ${MyCookie().getUID()}"]
  166. },
  167. "dims": userDims,
  168. "paging": [1, 20]
  169. }, (response, hasError) {
  170. if (!hasError) {
  171. UserBeanEntity entity =
  172. UserBeanEntity().fromJson(json.decode(response.data.toString()));
  173. MyCookie().userBean = entity.data.data[0];
  174. EventBus().emit('userChange');
  175. }
  176. }, (error) {});
  177. }
  178. Future<void> getLocation() async {
  179. var locationStatus = await Permission.location.status;
  180. var cameraStatus = await Permission.camera.status;
  181. print('Permission.location.status--------------$locationStatus');
  182. print('Permission.camera.status--------------$cameraStatus');
  183. if (locationStatus.isDenied) {
  184. await Permission.location.request().then((value) async {
  185. print('Permission.location.request()-----$value');
  186. if (value == PermissionStatus.granted) {
  187. await AMapLocationClient.startup(new AMapLocationOption(
  188. desiredAccuracy:
  189. CLLocationAccuracy.kCLLocationAccuracyHundredMeters));
  190. await AMapLocationClient.getLocation(true).then((value) async {
  191. if (Platform.isAndroid) {
  192. MyCookie().location = MyLocation(
  193. province: value.province,
  194. city: value.city,
  195. formattedAddress: value.formattedAddress,
  196. district: value.district,
  197. latitude: value.latitude,
  198. longitude: value.longitude);
  199. EventBus().emit('getLocation');
  200. } else if (Platform.isIOS) {
  201. getAddressByLatitudeAndLongitude(value.latitude, value.longitude);
  202. }
  203. });
  204. }
  205. });
  206. } else if (locationStatus.isGranted) {
  207. await AMapLocationClient.startup(new AMapLocationOption(
  208. desiredAccuracy:
  209. CLLocationAccuracy.kCLLocationAccuracyHundredMeters));
  210. await AMapLocationClient.getLocation(true).then((value) async {
  211. if (Platform.isAndroid) {
  212. MyCookie().location = MyLocation(
  213. province: value.province,
  214. city: value.city,
  215. formattedAddress: value.formattedAddress,
  216. district: value.district,
  217. latitude: value.latitude,
  218. longitude: value.longitude);
  219. if (value.province != '四川省' || value.city != '成都市') {
  220. EventBus().emit('getLocation');
  221. }
  222. } else if (Platform.isIOS) {
  223. getAddressByLatitudeAndLongitude(value.latitude, value.longitude);
  224. }
  225. });
  226. }
  227. if (cameraStatus.isDenied) {
  228. await Permission.camera.request().then((value) {
  229. print('Permission.camera.request()-----$value');
  230. });
  231. }
  232. }
  233. //查询优惠券活动
  234. checkCouponEvent() {
  235. MyDio().query({
  236. "key": "coupon_distribute",
  237. "filters": {
  238. "conditions": ["valid==true"],
  239. },
  240. "dims": couponDistributeDims,
  241. "paging": [1, 100]
  242. }, (response, hasError) {
  243. if (!hasError) {
  244. CouponBeanEntity entity =
  245. CouponBeanEntity().fromJson(json.decode(response.data.toString()));
  246. PopUpQueue().coupon.addAll(entity.data.data);
  247. }
  248. }, (error) {});
  249. }
  250. }