lift_map_page.dart 6.9 KB

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