lift_map_page.dart 5.3 KB

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