lift_map_page.dart 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. import 'dart:async';
  2. import 'package:amap_location_flutter_plugin/amap_location_flutter_plugin.dart';
  3. import 'package:amap_map_fluttify/amap_map_fluttify.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:liftmanager/res/resources.dart';
  6. import 'package:liftmanager/routers/fluro_navigator.dart';
  7. import 'package:liftmanager/utils/location_helper.dart';
  8. import 'package:liftmanager/utils/toast.dart';
  9. import 'package:liftmanager/widgets/app_bar.dart';
  10. import 'package:permission_handler/permission_handler.dart';
  11. enum MapPageType { Look, Check }
  12. class LiftMapPage extends StatefulWidget {
  13. LiftMapPage({this.type = MapPageType.Check, this.coordinate});
  14. final MapPageType type;
  15. final String coordinate;
  16. @override
  17. State<StatefulWidget> createState() {
  18. return LiftMapPageState();
  19. }
  20. }
  21. final _assetsIcon = Uri.parse('assets/images/work/icon_location.png');
  22. // final _assetsIcon2 = Uri.parse('assets/images/work/icon_location2.png');
  23. class LiftMapPageState extends State<LiftMapPage> {
  24. LatLng latLng = LatLng(0, 0);
  25. List<MarkerOption> _markers = [];
  26. BuildContext mContext;
  27. AmapController _controller;
  28. Map<String, Object> _locationResult;
  29. StreamSubscription<Map<String, Object>> _locationListener;
  30. AmapLocationFlutterPlugin _locationPlugin = new AmapLocationFlutterPlugin();
  31. @override
  32. void initState() {
  33. super.initState();
  34. mContext = context;
  35. if (widget.type == MapPageType.Look) {
  36. var arr = widget.coordinate.split(",");
  37. if (arr.length != 2) {
  38. toasts("坐标出错");
  39. return;
  40. }
  41. latLng.latitude = double.parse(arr[1]);
  42. latLng.longitude = double.parse(arr[0]);
  43. } else {}
  44. }
  45. setlatlng() {
  46. var helper = LocationHelper();
  47. helper.getLocation((lat, lng, cityName, {address, provinceName}) {
  48. if (lat != null && lng != null) {
  49. helper.stopGettingLocation();
  50. }
  51. latLng = LatLng(double.parse(lat), double.parse(lng));
  52. _controller?.setCenterCoordinate(latLng);
  53. // setState(() {});
  54. // NavigatorUtils.goBackWithParams(context, "$lng,$lat");
  55. });
  56. }
  57. @override
  58. void didChangeDependencies() {
  59. super.didChangeDependencies();
  60. mContext.dependOnInheritedWidgetOfExactType();
  61. if (widget.type == MapPageType.Look) {
  62. _markers = [
  63. // 0xxe653;
  64. MarkerOption(
  65. title: "电梯位置",
  66. latLng: latLng,
  67. // iconProvider:Image.asset('name'),
  68. iconUri: _assetsIcon,
  69. imageConfig: createLocalImageConfiguration(context),
  70. width: 40,
  71. height: 40)
  72. ];
  73. }
  74. }
  75. // Future<LatLng> getLocation() async {
  76. // if (await requestPermission()) {
  77. // if (null != _locationPlugin) {
  78. // ///开始定位之前设置定位参数
  79. // // _setLocationOption();
  80. // _locationPlugin.startLocation();
  81. // }
  82. // }
  83. // return latLng;
  84. // }
  85. @override
  86. void dispose() {
  87. super.dispose();
  88. _controller.dispose();
  89. }
  90. Future<bool> requestPermission() async {
  91. final permissions = await PermissionHandler()
  92. .requestPermissions([PermissionGroup.location]);
  93. if (permissions[PermissionGroup.location] == PermissionStatus.granted) {
  94. // toasts("已经定位.");
  95. return true;
  96. } else {
  97. toasts('请开启定位权限!');
  98. return false;
  99. }
  100. }
  101. saveLatLng() async {
  102. // var helper = LocationHelper();
  103. // helper.getLocation((lat, lng, cityName, {address, provinceName}) {
  104. // if (lat != null && lng != null) {
  105. // helper.stopGettingLocation();
  106. // }
  107. // });
  108. NavigatorUtils.goBackWithParams(
  109. context, "${latLng.longitude},${latLng.latitude}");
  110. }
  111. @override
  112. Widget build(BuildContext context) {
  113. return Scaffold(
  114. appBar: MyAppBar(
  115. centerTitle: "位置",
  116. actions: <Widget>[
  117. widget.type == MapPageType.Check
  118. ? FlatButton(
  119. child: Text("确定"),
  120. textColor: Colours.text,
  121. highlightColor: Colors.transparent,
  122. onPressed: () {
  123. saveLatLng();
  124. },
  125. )
  126. : Container()
  127. ],
  128. ),
  129. body: Container(
  130. child: AmapView(
  131. // 地图类型
  132. mapType: MapType.Standard,
  133. // 是否显示缩放控件
  134. showZoomControl: false,
  135. // 是否显示指南针控件
  136. showCompass: false,
  137. // 是否显示比例尺控件
  138. showScaleControl: false,
  139. // 是否使能缩放手势
  140. zoomGesturesEnabled: true,
  141. // 是否使能滚动手势
  142. scrollGesturesEnabled: true,
  143. // 是否使能旋转手势
  144. rotateGestureEnabled: true,
  145. // 是否使能倾斜手势
  146. tiltGestureEnabled: true,
  147. // 缩放级别
  148. zoomLevel: 17,
  149. maskDelay: Duration(milliseconds: 500),
  150. markers: _markers,
  151. // 中心点坐标
  152. centerCoordinate: latLng.latitude > 0 ? latLng : null,
  153. // 标记
  154. onMapCreated: (controller) async {
  155. _controller = controller;
  156. if (widget.type == MapPageType.Check) {
  157. setlatlng();
  158. // await getLocation();
  159. await _controller?.showMyLocation(MyLocationOption(
  160. myLocationType: MyLocationType.Locate,
  161. ));
  162. // latLng = await _controller.getCenterCoordinate();
  163. } else {
  164. // _controller.addMarker(MarkerOption(latLng: latLng));
  165. }
  166. },
  167. // onMapCreated: (controller) async {
  168. //
  169. // _controller = controller;
  170. // if(widget.type == MapPageType.Look){
  171. // _controller.addMarker(MarkerOption(latLng: latLng,title: "电梯位置",));
  172. // }
  173. // // requestPermission是权限请求方法, 需要你自己实现
  174. // // 如果不知道怎么处理, 可以参考example工程的实现, example过程依赖了`permission_handler`插件.
  175. // if (await requestPermission() && widget.type == MapPageType.Check) {
  176. // await controller.showMyLocation(MyLocationOption());
  177. // }
  178. // },
  179. onMapClicked: (latLng) async {
  180. // if (widget.type == MapPageType.Check) {
  181. // latLng = latLng;
  182. // _controller.clear();
  183. // _controller.addMarker(MarkerOption(
  184. // latLng: latLng,
  185. // anchorV: 1,
  186. // iconUri: _assetsIcon,
  187. // imageConfig: createLocalImageConfiguration(context),
  188. // ));
  189. // }
  190. },
  191. onMarkerClicked: (marker) async {
  192. // latLng = await marker.location;
  193. // _controller.clear();
  194. // _controller.addMarker(MarkerOption(latLng: latLng));
  195. },
  196. onMapMoveEnd: (controller) async {
  197. if (widget.type == MapPageType.Check) {
  198. // latLng = await _controller?.getCenterCoordinate();
  199. // _controller.addMarker(MarkerOption(latLng: latLng));
  200. }
  201. },
  202. )),
  203. );
  204. }
  205. }