lift_map_page.dart 5.3 KB

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