lift_map_page.dart 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  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. }
  44. }
  45. @override
  46. void didChangeDependencies() {
  47. super.didChangeDependencies();
  48. mContext.dependOnInheritedWidgetOfExactType();
  49. if (widget.type == MapPageType.Look) {
  50. _markers = [
  51. // 0xxe653;
  52. MarkerOption(
  53. title: "电梯位置",
  54. latLng: latLng,
  55. // iconProvider:Image.asset('name'),
  56. iconUri: _assetsIcon,
  57. imageConfig: createLocalImageConfiguration(context),
  58. width: 40,
  59. height: 40)
  60. ];
  61. }
  62. }
  63. // Future<LatLng> getLocation() async {
  64. // if (await requestPermission()) {
  65. // if (null != _locationPlugin) {
  66. // ///开始定位之前设置定位参数
  67. // // _setLocationOption();
  68. // _locationPlugin.startLocation();
  69. // }
  70. // }
  71. // return latLng;
  72. // }
  73. @override
  74. void dispose() {
  75. super.dispose();
  76. }
  77. Future<bool> requestPermission() async {
  78. final permissions = await PermissionHandler()
  79. .requestPermissions([PermissionGroup.location]);
  80. if (permissions[PermissionGroup.location] == PermissionStatus.granted) {
  81. // toasts("已经定位.");
  82. return true;
  83. } else {
  84. toasts('请开启定位权限!');
  85. return false;
  86. }
  87. }
  88. saveLatLng() async {
  89. var helper = LocationHelper();
  90. helper.getLocation((String lat, String lng, String cityName, {provinceName}) {
  91. if (lat != null && lng != null) {
  92. helper.stopGettingLocation();
  93. }
  94. NavigatorUtils.goBackWithParams(
  95. context, "$lng,$lat");
  96. });
  97. }
  98. @override
  99. Widget build(BuildContext context) {
  100. return Scaffold(
  101. appBar: MyAppBar(
  102. centerTitle: "位置",
  103. actions: <Widget>[
  104. widget.type == MapPageType.Check
  105. ? FlatButton(
  106. child: Text("确定"),
  107. textColor: Colours.text,
  108. highlightColor: Colors.transparent,
  109. onPressed: () {
  110. saveLatLng();
  111. },
  112. )
  113. : Container()
  114. ],
  115. ),
  116. body: Container(
  117. child: AmapView(
  118. // 地图类型
  119. mapType: MapType.Standard,
  120. // 是否显示缩放控件
  121. showZoomControl: false,
  122. // 是否显示指南针控件
  123. showCompass: false,
  124. // 是否显示比例尺控件
  125. showScaleControl: false,
  126. // 是否使能缩放手势
  127. zoomGesturesEnabled: true,
  128. // 是否使能滚动手势
  129. scrollGesturesEnabled: true,
  130. // 是否使能旋转手势
  131. rotateGestureEnabled: true,
  132. // 是否使能倾斜手势
  133. tiltGestureEnabled: true,
  134. // 缩放级别
  135. zoomLevel: 17,
  136. maskDelay: Duration(milliseconds: 500),
  137. markers: _markers,
  138. // 中心点坐标
  139. centerCoordinate: latLng,
  140. // 标记
  141. onMapCreated: (controller) async {
  142. _controller = controller;
  143. if (widget.type == MapPageType.Check) {
  144. // await getLocation();
  145. await _controller?.showMyLocation(MyLocationOption(
  146. myLocationType: MyLocationType.Locate,
  147. ));
  148. // latLng = await _controller.getCenterCoordinate();
  149. } else {
  150. // _controller.addMarker(MarkerOption(latLng: latLng));
  151. }
  152. },
  153. // onMapCreated: (controller) async {
  154. //
  155. // _controller = controller;
  156. // if(widget.type == MapPageType.Look){
  157. // _controller.addMarker(MarkerOption(latLng: latLng,title: "电梯位置",));
  158. // }
  159. // // requestPermission是权限请求方法, 需要你自己实现
  160. // // 如果不知道怎么处理, 可以参考example工程的实现, example过程依赖了`permission_handler`插件.
  161. // if (await requestPermission() && widget.type == MapPageType.Check) {
  162. // await controller.showMyLocation(MyLocationOption());
  163. // }
  164. // },
  165. onMapClicked: (latLng) async {
  166. // if (widget.type == MapPageType.Check) {
  167. // latLng = latLng;
  168. // _controller.clear();
  169. // _controller.addMarker(MarkerOption(
  170. // latLng: latLng,
  171. // anchorV: 1,
  172. // iconUri: _assetsIcon,
  173. // imageConfig: createLocalImageConfiguration(context),
  174. // ));
  175. // }
  176. },
  177. onMarkerClicked: (marker) async {
  178. // latLng = await marker.location;
  179. // _controller.clear();
  180. // _controller.addMarker(MarkerOption(latLng: latLng));
  181. },
  182. onMapMoveEnd: (controller) async {
  183. if (widget.type == MapPageType.Check) {
  184. // latLng = await _controller?.getCenterCoordinate();
  185. // _controller.addMarker(MarkerOption(latLng: latLng));
  186. }
  187. },
  188. )),
  189. );
  190. }
  191. }