root_page.dart 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  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: GestureDetector(
  118. onTap: (){
  119. MyTools().toPage(context, OrderPage(index: 2,), (then) {
  120. queryPersonalInformation();
  121. });
  122. },
  123. behavior: HitTestBehavior.translucent,
  124. child: Container(
  125. height: 44,
  126. width: 100,
  127. padding: EdgeInsets.symmetric(horizontal: 10),
  128. child: Row(
  129. children: [
  130. SvgPicture.asset(
  131. 'images/svg/订单.svg',
  132. color: Colors.white,
  133. height: 15,
  134. width: 15,
  135. ),
  136. Text(
  137. '未付订单',
  138. style: TextStyle(color: Colors.white, fontSize: 14),
  139. )
  140. ],
  141. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  142. ),
  143. decoration: BoxDecoration(
  144. color: Colors.amber,
  145. borderRadius: BorderRadius.only(
  146. topLeft: Radius.circular(22),
  147. bottomLeft: Radius.circular(22),
  148. ),
  149. ),
  150. ),
  151. ),
  152. ),
  153. ],
  154. ),
  155. ),
  156. );
  157. }
  158. void queryPersonalInformation() {
  159. MyDio().query({
  160. "key": "user",
  161. "filters": {
  162. "conditions": ["uid == ${MyCookie().getUID()}"]
  163. },
  164. "dims": userDims,
  165. "paging": [1, 20]
  166. }, (response, hasError) {
  167. if (!hasError) {
  168. UserBeanEntity entity =
  169. UserBeanEntity().fromJson(json.decode(response.data.toString()));
  170. MyCookie().userBean = entity.data.data[0];
  171. EventBus().emit('userChange');
  172. }
  173. }, (error) {});
  174. }
  175. Future<void> getLocation() async {
  176. var locationStatus = await Permission.location.status;
  177. var cameraStatus = await Permission.camera.status;
  178. print('Permission.location.status--------------$locationStatus');
  179. print('Permission.camera.status--------------$cameraStatus');
  180. if (locationStatus.isDenied) {
  181. await Permission.location.request().then((value) async {
  182. print('Permission.location.request()-----$value');
  183. if (value == PermissionStatus.granted) {
  184. await AMapLocationClient.startup(new AMapLocationOption(
  185. desiredAccuracy:
  186. CLLocationAccuracy.kCLLocationAccuracyHundredMeters));
  187. await AMapLocationClient.getLocation(true).then((value) async {
  188. if (Platform.isAndroid) {
  189. MyCookie().location = MyLocation(
  190. province: value.province,
  191. city: value.city,
  192. formattedAddress: value.formattedAddress,
  193. district: value.district,
  194. latitude: value.latitude,
  195. longitude: value.longitude);
  196. EventBus().emit('getLocation');
  197. } else if (Platform.isIOS) {
  198. getAddressByLatitudeAndLongitude(value.latitude, value.longitude);
  199. }
  200. });
  201. }
  202. });
  203. } else if (locationStatus.isGranted) {
  204. await AMapLocationClient.startup(new AMapLocationOption(
  205. desiredAccuracy:
  206. CLLocationAccuracy.kCLLocationAccuracyHundredMeters));
  207. await AMapLocationClient.getLocation(true).then((value) async {
  208. if (Platform.isAndroid) {
  209. MyCookie().location = MyLocation(
  210. province: value.province,
  211. city: value.city,
  212. formattedAddress: value.formattedAddress,
  213. district: value.district,
  214. latitude: value.latitude,
  215. longitude: value.longitude);
  216. if (value.province != '四川省' || value.city != '成都市') {
  217. EventBus().emit('getLocation');
  218. }
  219. } else if (Platform.isIOS) {
  220. getAddressByLatitudeAndLongitude(value.latitude, value.longitude);
  221. }
  222. });
  223. }
  224. if (cameraStatus.isDenied) {
  225. await Permission.camera.request().then((value) {
  226. print('Permission.camera.request()-----$value');
  227. });
  228. }
  229. }
  230. //查询优惠券活动
  231. checkCouponEvent() {
  232. MyDio().query({
  233. "key": "coupon_distribute",
  234. "filters": {
  235. "conditions": ["valid==true"],
  236. },
  237. "dims": couponDistributeDims,
  238. "paging": [1, 100]
  239. }, (response, hasError) {
  240. if (!hasError) {
  241. CouponBeanEntity entity =
  242. CouponBeanEntity().fromJson(json.decode(response.data.toString()));
  243. PopUpQueue().coupon.addAll(entity.data.data);
  244. }
  245. }, (error) {});
  246. }
  247. }