瀏覽代碼

Merge remote-tracking branch 'origin/master'

i2edu 5 年之前
父節點
當前提交
ff45780ca9

二進制
android/src/main/res/drawable/dog.png


二進制
android/src/main/res/drawable/i2.png


二進制
android/src/main/res/drawable/white.png


+ 22 - 7
example/lib/map_view_page.dart

@@ -1,3 +1,4 @@
+import 'dart:async';
 import 'dart:convert';
 
 import 'package:amap_location_example/map_util.dart';
@@ -13,7 +14,7 @@ class MapViewPage extends StatefulWidget {
 }
 
 class _MapViewPageState extends State<MapViewPage> with WidgetsBindingObserver {
-  final AmapViewController controller = AmapViewController();
+  final Completer<AmapViewController> _controller = Completer<AmapViewController>();
 
   @override
   Widget build(BuildContext context) {
@@ -23,8 +24,7 @@ class _MapViewPageState extends State<MapViewPage> with WidgetsBindingObserver {
         height: double.maxFinite,
         width: double.maxFinite,
         child: AmapView(
-          controller: controller,
-          onViewCreated: _onPlatformCreate,
+          onPlatformViewCreated: _onPlatformCreate,
         ),
       ),
     );
@@ -39,13 +39,20 @@ class _MapViewPageState extends State<MapViewPage> with WidgetsBindingObserver {
   @override
   void dispose() {
     WidgetsBinding.instance.removeObserver(this);
-    controller.dispose();
+    _dispose();
     super.dispose();
   }
 
   @override
   void didChangeAppLifecycleState(AppLifecycleState state) {
     super.didChangeAppLifecycleState(state);
+    onStateChange(state);
+  }
+
+  void onStateChange(AppLifecycleState state) async {
+    if (!_controller.isCompleted)
+      return;
+    AmapViewController controller = await _controller.future;
     if (state == AppLifecycleState.paused) {
       controller.onPauseMapView();
     } else if (state == AppLifecycleState.resumed) {
@@ -53,7 +60,7 @@ class _MapViewPageState extends State<MapViewPage> with WidgetsBindingObserver {
     }
   }
 
-  void initCityData() async {
+  void _initCityData(AmapViewController controller) async {
     // kingWay 的环境
     var httpClient = new HttpClient();
     HttpClientRequest request = await httpClient.getUrl(
@@ -72,10 +79,11 @@ class _MapViewPageState extends State<MapViewPage> with WidgetsBindingObserver {
     }).toList());
   }
 
-  void _onPlatformCreate() {
+  void _onPlatformCreate(AmapViewController controller) {
     print("on map view create");
+    _controller.complete(controller);
     controller.onCreateMapView();
-    initCityData();
+    _initCityData(controller);
     controller.guideStream.listen((m) {
       showModalBottomSheet(
           context: context,
@@ -201,6 +209,13 @@ class _MapViewPageState extends State<MapViewPage> with WidgetsBindingObserver {
     }
     print("jump ${success ? "successful" : "failed"}");
   }
+
+  void _dispose() async {
+    if (!_controller.isCompleted)
+      return;
+    AmapViewController controller = await _controller.future;
+    controller.dispose();
+  }
 }
 
 enum MapType { Apple, Baidu, AMap }

+ 3 - 3
lib/amap_export.dart

@@ -1,8 +1,8 @@
 library amap_location;
 
 export 'amap_location.dart';
-export 'location_option.dart';
-export 'location_result_entity.dart';
-export 'amap_marker.dart';
+export './bean/location_option.dart';
+export './bean/location_result_entity.dart';
+export 'bean/amap_marker.dart';
 export 'amap_view.dart';
 export 'amap_view_controller.dart';

+ 2 - 5
lib/amap_location.dart

@@ -1,13 +1,10 @@
 import 'dart:async';
 import 'dart:convert';
-import 'dart:io';
 
 import 'package:flutter/services.dart';
-import 'package:flutter/material.dart';
 
-import 'amap_marker.dart';
-import 'location_option.dart';
-import 'location_result_entity.dart';
+import './bean/location_option.dart';
+import './bean/location_result_entity.dart';
 
 // IOS:
 // add info.plist GaoDeAppKey

+ 8 - 5
lib/amap_view.dart

@@ -4,11 +4,12 @@ import 'package:amap_location/amap_view_controller.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 
+typedef OnPlatformViewCreated(AmapViewController controller);
+
 class AmapView extends StatefulWidget {
-  final AmapViewController controller;
-  final VoidCallback onViewCreated;
+  final OnPlatformViewCreated onPlatformViewCreated;
 
-  const AmapView({Key key, @required this.controller, this.onViewCreated}) : super(key: key);
+  const AmapView({Key key, this.onPlatformViewCreated}) : super(key: key);
 
   @override
   _AmapViewState createState() => _AmapViewState();
@@ -35,7 +36,9 @@ class _AmapViewState extends State<AmapView> {
   }
 
   void onPlatformViewCreated(int id) {
-    widget.controller.init(id);
-    widget.onViewCreated();
+    final AmapViewController controller = AmapViewController(id);
+    if (widget.onPlatformViewCreated != null) {
+      widget.onPlatformViewCreated(controller);
+    }
   }
 }

+ 2 - 6
lib/amap_view_controller.dart

@@ -3,7 +3,7 @@ import 'dart:async';
 
 import 'package:flutter/services.dart';
 
-import 'amap_marker.dart';
+import 'bean/amap_marker.dart';
 
 class AmapViewController {
   MethodChannel _methodChannel;
@@ -11,7 +11,7 @@ class AmapViewController {
   StreamController _guideStreamController;
   Stream<Map> get guideStream => _guideStreamController.stream;
 
-  void init(int id) {
+  AmapViewController(int id) {
     _methodChannel = MethodChannel("com.i2edu.mapView/map_view_$id");
     _methodChannel.setMethodCallHandler(platformCallHandler);
     _guideStreamController = StreamController<Map>.broadcast();
@@ -29,23 +29,19 @@ class AmapViewController {
   }
 
   Future<void> setMapMarkers(List<AmapMarker> markers) async {
-    assert(_methodChannel != null);
     return await _methodChannel.invokeMethod(
         "setMarkers", {"markers": markers.map((f) => f.toMap()).toList()});
   }
 
   Future<void> onCreateMapView() async {
-    assert(_methodChannel != null);
     return await _methodChannel.invokeMethod('onCreate');
   }
 
   Future<void> onPauseMapView() async {
-    assert(_methodChannel != null);
     return await _methodChannel.invokeMethod('onPause');
   }
 
   Future<void> onResumeMapView() async {
-    assert(_methodChannel != null);
     return await _methodChannel.invokeMethod('onResume');
   }
 

+ 0 - 0
lib/amap_marker.dart → lib/bean/amap_marker.dart


+ 0 - 0
lib/location_option.dart → lib/bean/location_option.dart


+ 0 - 0
lib/location_result_entity.dart → lib/bean/location_result_entity.dart


+ 1 - 1
lib/generated/json/base/json_convert_content.dart

@@ -4,7 +4,7 @@
 
 // This file is automatically generated. DO NOT EDIT, all your changes would be lost.
 import 'package:amap_location/generated/json/location_result_entity_helper.dart';
-import 'package:amap_location/location_result_entity.dart';
+import 'package:amap_location/bean/location_result_entity.dart';
 
 class JsonConvert<T> {
   T fromJson(Map<String, dynamic> json) {

+ 1 - 1
lib/generated/json/location_result_entity_helper.dart

@@ -1,4 +1,4 @@
-import 'package:amap_location/location_result_entity.dart';
+import 'package:amap_location/bean/location_result_entity.dart';
 
 locationResultEntityFromJson(
     LocationResultEntity data, Map<String, dynamic> json) {