diff --git a/android/app/release/output.json b/android/app/release/output.json
index e9ecaef..e6aa759 100644
--- a/android/app/release/output.json
+++ b/android/app/release/output.json
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":20220426,"versionName":"1.4.28","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":20220502,"versionName":"1.4.29","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
\ No newline at end of file
diff --git a/lib/my_flutter_bmfmap-1.0.2/.vscode/launch.json b/lib/my_flutter_bmfmap-1.0.2/.vscode/launch.json
new file mode 100644
index 0000000..3287bb6
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/.vscode/launch.json
@@ -0,0 +1,13 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "Flutter",
+ "request": "launch",
+ "type": "dart"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/lib/my_flutter_bmfmap-1.0.2/CHANGELOG.md b/lib/my_flutter_bmfmap-1.0.2/CHANGELOG.md
new file mode 100644
index 0000000..0fe55ac
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/CHANGELOG.md
@@ -0,0 +1,9 @@
+## 1.0.0
+
+* TODO: Describe initial release.
+
+## 1.0.1
+提升版本号
+
+## 1.0.2
+解决了与其它Flutter插件冲突的问题
diff --git a/lib/my_flutter_bmfmap-1.0.2/LICENSE b/lib/my_flutter_bmfmap-1.0.2/LICENSE
new file mode 100644
index 0000000..4eb6358
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/LICENSE
@@ -0,0 +1,13 @@
+Copyright (C) 2020 Baidu, Inc. All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
\ No newline at end of file
diff --git a/lib/my_flutter_bmfmap-1.0.2/README.md b/lib/my_flutter_bmfmap-1.0.2/README.md
new file mode 100644
index 0000000..abbf597
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/README.md
@@ -0,0 +1,14 @@
+# flutter_bmfmap
+
+A new Flutter plugin for BaiDuMap.
+
+## Getting Started
+
+This project is a starting point for a Flutter
+[plug-in package](https://flutter.dev/developing-packages/),
+a specialized package that includes platform-specific implementation code for
+Android and/or iOS.
+
+For help getting started with Flutter, view our
+[online documentation](https://flutter.dev/docs), which offers tutorials,
+samples, guidance on mobile development, and a full API reference.
diff --git a/lib/my_flutter_bmfmap-1.0.2/analysis_options.yaml b/lib/my_flutter_bmfmap-1.0.2/analysis_options.yaml
new file mode 100644
index 0000000..2d54aab
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/analysis_options.yaml
@@ -0,0 +1,27 @@
+# include: package:pedantic/analysis_options.1.9.0.yaml
+
+analyzer:
+ errors:
+ unused_import: warning
+ unused_shown_name: warning
+ exclude:
+ - 'doc/**'
+ - 'lib/src/third_party/pkg/**'
+ - 'lib/templates/*.html'
+ - 'pub.dartlang.org/**'
+ - 'testing/**'
+ - 'testing/test_package_flutter_plugin/**'
+ - 'testing/test_package_export_error/**'
+linter:
+ rules:
+ # - always_declare_return_types
+ - annotate_overrides
+ - avoid_init_to_null
+ - directives_ordering
+ - no_adjacent_strings_in_list
+ - package_api_docs
+ - prefer_final_fields
+ - prefer_generic_function_type_aliases
+ - slash_for_doc_comments
+ - unawaited_futures
+# - unnecessary_brace_in_string_interps
diff --git a/lib/my_flutter_bmfmap-1.0.2/android/.gitignore b/lib/my_flutter_bmfmap-1.0.2/android/.gitignore
new file mode 100644
index 0000000..c6cbe56
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/android/.gitignore
@@ -0,0 +1,8 @@
+*.iml
+.gradle
+/local.properties
+/.idea/workspace.xml
+/.idea/libraries
+.DS_Store
+/build
+/captures
diff --git a/lib/my_flutter_bmfmap-1.0.2/android/build.gradle b/lib/my_flutter_bmfmap-1.0.2/android/build.gradle
new file mode 100644
index 0000000..ac19be4
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/android/build.gradle
@@ -0,0 +1,46 @@
+group 'com.baidu.flutter_bmfmap'
+version '1.0'
+
+
+buildscript {
+ repositories {
+ google()
+ jcenter()
+ }
+
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.5.0'
+ }
+}
+
+rootProject.allprojects {
+ repositories {
+ google()
+ jcenter()
+ }
+}
+
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion 28
+
+ defaultConfig {
+ minSdkVersion 16
+ }
+ lintOptions {
+ disable 'InvalidPackage'
+ }
+
+}
+
+repositories {
+ mavenLocal()
+}
+
+
+dependencies {
+ implementation fileTree(includes: ['*.jar'], dir: 'libs')
+ implementation rootProject.findProject(":flutter_bmfbase")
+ implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
+}
diff --git a/lib/my_flutter_bmfmap-1.0.2/android/gradle.properties b/lib/my_flutter_bmfmap-1.0.2/android/gradle.properties
new file mode 100644
index 0000000..38c8d45
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/android/gradle.properties
@@ -0,0 +1,4 @@
+org.gradle.jvmargs=-Xmx1536M
+android.enableR8=true
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/lib/my_flutter_bmfmap-1.0.2/android/gradle/wrapper/gradle-wrapper.properties b/lib/my_flutter_bmfmap-1.0.2/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..01a286e
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
diff --git a/lib/my_flutter_bmfmap-1.0.2/android/settings.gradle b/lib/my_flutter_bmfmap-1.0.2/android/settings.gradle
new file mode 100644
index 0000000..3cd351e
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/android/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = 'flutter_bmfmap'
diff --git a/lib/my_flutter_bmfmap-1.0.2/android/src/main/AndroidManifest.xml b/lib/my_flutter_bmfmap-1.0.2/android/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..863f1f7
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/android/src/main/AndroidManifest.xml
@@ -0,0 +1,3 @@
+
+
diff --git a/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/BMFEventHandler.java b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/BMFEventHandler.java
new file mode 100644
index 0000000..722a6cd
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/BMFEventHandler.java
@@ -0,0 +1,38 @@
+package com.baidu.flutter_bmfmap;
+
+import android.content.Context;
+
+import com.baidu.mapapi.map.MapView;
+
+import io.flutter.plugin.common.BinaryMessenger;
+import io.flutter.plugin.common.EventChannel;
+import io.flutter.plugin.common.MethodChannel;
+
+public class BMFEventHandler implements EventChannel.StreamHandler {
+
+ private Context mContext;
+
+ private ViewType mMapView;
+
+ private BinaryMessenger mMessager;
+
+ private MethodChannel mMethodChannel;
+ private EventChannel mEventChannel;
+
+ public BMFEventHandler(Context context, ViewType mapView, MethodChannel methodChannel, EventChannel eventChannel){
+ mContext = context;
+ mMapView = mapView;
+ mMethodChannel = methodChannel;
+ mEventChannel = eventChannel;
+ }
+
+ @Override
+ public void onListen(Object arguments, EventChannel.EventSink events) {
+
+ }
+
+ @Override
+ public void onCancel(Object arguments) {
+
+ }
+}
diff --git a/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/BMFHandlerHelper.java b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/BMFHandlerHelper.java
new file mode 100644
index 0000000..dc35c0b
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/BMFHandlerHelper.java
@@ -0,0 +1,36 @@
+package com.baidu.flutter_bmfmap;
+
+import android.content.Context;
+
+import com.baidu.flutter_bmfmap.map.FlutterCommonMapView;
+
+import io.flutter.plugin.common.EventChannel;
+import io.flutter.plugin.common.MethodChannel;
+
+public class BMFHandlerHelper {
+
+ private MethodChannel mMethodChannel;
+
+ private BMFMethodHandler mBMFMethodHandler;
+
+ private EventChannel mEventChannel;
+
+ private BMFEventHandler mBMFEventHandler;
+
+ public BMFHandlerHelper(Context context
+ , FlutterCommonMapView mapView
+ , MethodChannel methodChannel
+ , EventChannel eventChannel){
+ init(context, mapView, methodChannel, eventChannel);
+ }
+
+ private void init(Context context, FlutterCommonMapView mapView, MethodChannel methodChannel, EventChannel eventChannel){
+ mMethodChannel = methodChannel;
+ mBMFMethodHandler = new BMFMethodHandler(context, mapView, methodChannel, eventChannel);
+ mMethodChannel.setMethodCallHandler(mBMFMethodHandler);
+
+ mEventChannel = eventChannel;
+ mBMFEventHandler = new BMFEventHandler(context, mapView, methodChannel, eventChannel);
+ mEventChannel.setStreamHandler(mBMFEventHandler);
+ }
+}
diff --git a/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/BMFMethodHandler.java b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/BMFMethodHandler.java
new file mode 100644
index 0000000..820f926
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/BMFMethodHandler.java
@@ -0,0 +1,62 @@
+package com.baidu.flutter_bmfmap;
+
+import android.content.Context;
+import android.util.Log;
+
+import com.baidu.flutter_bmfmap.map.mapHandler.BMapHandlerFactory;
+import com.baidu.flutter_bmfmap.map.FlutterCommonMapView;
+import com.baidu.flutter_bmfmap.map.overlayHandler.OverlayHandlerFactory;
+import com.baidu.flutter_bmfmap.utils.Env;
+import com.baidu.mapapi.map.BaiduMap;
+
+import io.flutter.plugin.common.EventChannel;
+import io.flutter.plugin.common.MethodCall;
+import io.flutter.plugin.common.MethodChannel;
+
+public class BMFMethodHandler implements MethodChannel.MethodCallHandler {
+ private static final String TAG = "BMFMethodHandler";
+
+ private Context mContext;
+ private FlutterCommonMapView mMapView;
+ private final BaiduMap mBaiduMap;
+ private MethodChannel mMethodChannel;
+ private EventChannel mEventChannel;
+
+ public BMFMethodHandler(Context context
+ ,FlutterCommonMapView mapView
+ ,MethodChannel methodChannel
+ ,EventChannel eventChannel){
+ mContext = context;
+ mMapView = mapView;
+ mBaiduMap = mapView.getBaiduMap();
+ mMethodChannel = methodChannel;
+ mEventChannel = eventChannel;
+ }
+
+
+
+ @Override
+ public void onMethodCall(MethodCall call, MethodChannel.Result result) {
+ if(Env.DEBUG){
+ Log.d(TAG,"onMethodCall enter");
+ }
+
+ if(null == call || null == result){
+ Log.d(TAG,"null == call || null == result");
+ return;
+ }
+
+ if (null == mMapView || null == mBaiduMap) {
+ Log.d(TAG,"mMapView == call || mBaiduMap == result");
+ return;
+ }
+
+ boolean ret = OverlayHandlerFactory.getInstance(mBaiduMap).dispatchMethodHandler(call,
+ result);
+
+ if (!ret) {
+ BMapHandlerFactory.getInstance(mMapView).dispatchMethodHandler(mContext,call,
+ result, mMethodChannel);
+ }
+ }
+}
diff --git a/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/FlutterBmfmapPlugin.java b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/FlutterBmfmapPlugin.java
new file mode 100644
index 0000000..8cd6288
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/FlutterBmfmapPlugin.java
@@ -0,0 +1,127 @@
+package com.baidu.flutter_bmfmap;
+
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+
+import com.baidu.flutter_bmfmap.map.OfflineHandler;
+import com.baidu.flutter_bmfmap.utils.Constants;
+
+import io.flutter.embedding.engine.plugins.FlutterPlugin;
+import io.flutter.embedding.engine.plugins.activity.ActivityAware;
+import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
+import io.flutter.plugin.common.BinaryMessenger;
+import io.flutter.plugin.common.MethodCall;
+import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
+import io.flutter.plugin.common.MethodChannel.Result;
+import io.flutter.plugin.common.PluginRegistry.Registrar;
+import io.flutter.plugin.platform.PlatformViewRegistry;
+
+/** FlutterBmfmapPlugin */
+public class FlutterBmfmapPlugin implements FlutterPlugin, ActivityAware, MethodCallHandler {
+ private static final String TAG = FlutterBmfmapPlugin.class.getSimpleName();
+
+ private OfflineHandler mOfflineHandler;
+ private PlatformViewRegistry mPlatformViewRegistry;
+ private BinaryMessenger mMessenger;
+
+ @Override
+ public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
+ if(null == flutterPluginBinding){
+ return;
+ }
+
+ mMessenger = flutterPluginBinding.getBinaryMessenger();
+ if (null == mMessenger) {
+ return;
+ }
+
+ mOfflineHandler = new OfflineHandler();
+ mOfflineHandler.init(mMessenger);
+
+ mPlatformViewRegistry = flutterPluginBinding.getPlatformViewRegistry();
+ }
+
+ // This static function is optional and equivalent to onAttachedToEngine. It supports the old
+ // pre-Flutter-1.12 Android projects. You are encouraged to continue supporting
+ // plugin registration via this function while apps migrate to use the new Android APIs
+ // post-flutter-1.12 via https://flutter.dev/go/android-project-migration.
+ //
+ // It is encouraged to share logic between onAttachedToEngine and registerWith to keep
+ // them functionally equivalent. Only one of onAttachedToEngine or registerWith will be called
+ // depending on the user's project. onAttachedToEngine or registerWith must both be defined
+ // in the same class.
+ public static void registerWith(Registrar registrar) {
+ OfflineHandler offlineHandler = new OfflineHandler();
+ offlineHandler.init(registrar.messenger());
+
+ registrar.platformViewRegistry().registerViewFactory(
+ Constants.ViewType.sMapView,
+ new MapViewFactory(registrar.activity()
+ , registrar.messenger()
+ , Constants.ViewType.sMapView));
+
+ registrar.platformViewRegistry().registerViewFactory(
+ Constants.ViewType.sTextureMapView,
+ new TextureMapViewFactory(registrar.activity()
+ , registrar.messenger()
+ , Constants.ViewType.sTextureMapView));
+ }
+
+ @Override
+ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
+ if (call.method.equals("getPlatformVersion")) {
+ result.success("Android " + android.os.Build.VERSION.RELEASE);
+ }else{
+
+ }
+ }
+
+ @Override
+ public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
+ if(null == binding){
+ return;
+ }
+
+ BinaryMessenger binaryMessenger = binding.getBinaryMessenger();
+ if(null == binaryMessenger){
+ return;
+ }
+
+ mOfflineHandler.unInit(binding.getBinaryMessenger());
+ }
+
+ @Override
+ public void onAttachedToActivity(ActivityPluginBinding binding) {
+ if(null == binding || null == mPlatformViewRegistry || null == mMessenger){
+ return;
+ }
+
+ mPlatformViewRegistry.registerViewFactory(
+ Constants.ViewType.sMapView,
+ new MapViewFactory(binding.getActivity()
+ , mMessenger
+ , Constants.ViewType.sMapView));
+
+ mPlatformViewRegistry.registerViewFactory(
+ Constants.ViewType.sTextureMapView,
+ new TextureMapViewFactory(binding.getActivity()
+ , mMessenger
+ , Constants.ViewType.sTextureMapView));
+ }
+
+ @Override
+ public void onDetachedFromActivityForConfigChanges() {
+ Log.d(TAG, "onDetachedFromActivityForConfigChanges");
+ }
+
+ @Override
+ public void onReattachedToActivityForConfigChanges(ActivityPluginBinding binding) {
+ Log.d(TAG, "onReattachedToActivityForConfigChanges");
+ }
+
+ @Override
+ public void onDetachedFromActivity() {
+ Log.d(TAG, "onDetachedFromActivity");
+ }
+}
diff --git a/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/MapViewFactory.java b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/MapViewFactory.java
new file mode 100644
index 0000000..b64cfdf
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/MapViewFactory.java
@@ -0,0 +1,40 @@
+package com.baidu.flutter_bmfmap;
+
+import android.content.Context;
+import android.util.Log;
+
+import io.flutter.plugin.common.BinaryMessenger;
+import io.flutter.plugin.common.StandardMessageCodec;
+import io.flutter.plugin.platform.PlatformView;
+import io.flutter.plugin.platform.PlatformViewFactory;
+
+import com.baidu.flutter_bmfmap.map.FlutterMapView;
+import com.baidu.flutter_bmfmap.utils.Env;
+
+public class MapViewFactory extends PlatformViewFactory {
+
+ private static final String TAG = "ViewFactory";
+ private BinaryMessenger mMessenger;
+ private Context mContext;
+ private String mViewType;
+ /**
+ * @param messenger the codec used to decode the args parameter of {@link #create}.
+ */
+ public MapViewFactory(Context context, BinaryMessenger messenger, String viewType) {
+ super(StandardMessageCodec.INSTANCE);
+ if(Env.DEBUG){
+ Log.d(TAG, "ViewFactory");
+ }
+ mContext = context;
+ mMessenger = messenger;
+ mViewType = viewType;
+ }
+
+ @Override
+ public PlatformView create(Context context, int viewId, Object args) {
+ if(Env.DEBUG){
+ Log.d(TAG, "create");
+ }
+ return new FlutterMapView(mContext, mMessenger, viewId, args, mViewType);
+ }
+}
diff --git a/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/TextureMapViewFactory.java b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/TextureMapViewFactory.java
new file mode 100644
index 0000000..b24cd16
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/TextureMapViewFactory.java
@@ -0,0 +1,42 @@
+package com.baidu.flutter_bmfmap;
+
+import android.content.Context;
+import android.util.Log;
+
+import com.baidu.flutter_bmfmap.map.FlutterMapView;
+import com.baidu.flutter_bmfmap.map.FlutterTextureMapView;
+import com.baidu.flutter_bmfmap.utils.Env;
+
+import io.flutter.plugin.common.BinaryMessenger;
+import io.flutter.plugin.common.MessageCodec;
+import io.flutter.plugin.common.StandardMessageCodec;
+import io.flutter.plugin.platform.PlatformView;
+import io.flutter.plugin.platform.PlatformViewFactory;
+
+public class TextureMapViewFactory extends PlatformViewFactory {
+
+ private static final String TAG = "ViewFactory";
+ private BinaryMessenger mMessenger;
+ private Context mContext;
+ private String mViewType;
+ /**
+ * @param messenger the codec used to decode the args parameter of {@link #create}.
+ */
+ public TextureMapViewFactory(Context context, BinaryMessenger messenger, String viewType) {
+ super(StandardMessageCodec.INSTANCE);
+ if(Env.DEBUG){
+ Log.d(TAG, "ViewFactory");
+ }
+ mContext = context;
+ mMessenger = messenger;
+ mViewType = viewType;
+ }
+
+ @Override
+ public PlatformView create(Context context, int viewId, Object args) {
+ if(Env.DEBUG){
+ Log.d(TAG, "create");
+ }
+ return new FlutterTextureMapView(mContext, mMessenger, viewId, args, mViewType);
+ }
+}
\ No newline at end of file
diff --git a/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/map/FlutterBaseMapView.java b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/map/FlutterBaseMapView.java
new file mode 100644
index 0000000..7733f8c
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/map/FlutterBaseMapView.java
@@ -0,0 +1,27 @@
+package com.baidu.flutter_bmfmap.map;
+
+import java.util.Map;
+
+public abstract class FlutterBaseMapView {
+
+ protected String mViewType;
+
+ protected boolean mResume = false;
+
+ protected int mGetViewCount = 0;
+
+ protected abstract void init(int viewId, Object args);
+
+ protected abstract void initMapView(Object args, FlutterCommonMapView flutterCommonMapView);
+
+ protected void initMapStatus(Map mapOptionsMap,
+ FlutterCommonMapView flutterCommonMapView) {
+ if (null == mapOptionsMap) {
+ return;
+ }
+
+ MapStateUpdateImp.getInstance()
+ .setCommView(flutterCommonMapView)
+ .updateMapState(mapOptionsMap);
+ }
+}
\ No newline at end of file
diff --git a/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/map/FlutterCommonMapView.java b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/map/FlutterCommonMapView.java
new file mode 100644
index 0000000..35205f0
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/map/FlutterCommonMapView.java
@@ -0,0 +1,58 @@
+package com.baidu.flutter_bmfmap.map;
+
+import com.baidu.flutter_bmfmap.utils.Constants;
+import com.baidu.mapapi.map.BaiduMap;
+import com.baidu.mapapi.map.MapView;
+import com.baidu.mapapi.map.TextureMapView;
+
+import java.util.Map;
+
+public abstract class FlutterCommonMapView{
+ protected String mViewType;
+ public String getViewType(){
+ return mViewType;
+ }
+
+
+
+ public void setmViewType(String viewType){
+ mViewType = viewType;
+ }
+
+ abstract public MapView getMapView();
+ abstract public TextureMapView getTextureMapView();
+
+ public BaiduMap getBaiduMap(){
+ BaiduMap baiduMap = null;
+ switch (mViewType){
+ case Constants.ViewType.sMapView:
+ baiduMap = getBaiduMapFromMapView();
+ break;
+ case Constants.ViewType.sTextureMapView:
+ baiduMap = getBaiduMapFromTextureMapView();
+ break;
+ default:
+ break;
+ }
+
+ return baiduMap;
+ }
+
+ private BaiduMap getBaiduMapFromMapView(){
+ MapView mapView = this.getMapView();
+ if(null == mapView){
+ return null;
+ }
+
+ return mapView.getMap();
+ }
+
+ private BaiduMap getBaiduMapFromTextureMapView(){
+ TextureMapView textureMapView = this.getTextureMapView();
+ if(null == textureMapView){
+ return null;
+ }
+
+ return textureMapView.getMap();
+ }
+}
\ No newline at end of file
diff --git a/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/map/FlutterMapView.java b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/map/FlutterMapView.java
new file mode 100644
index 0000000..8dec263
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/map/FlutterMapView.java
@@ -0,0 +1,170 @@
+package com.baidu.flutter_bmfmap.map;
+
+import static com.baidu.flutter_bmfmap.utils.Constants.MAX_GET_VIEW_CNT_BY_FLUTTER_RESIZE;
+
+import java.util.Map;
+
+import com.baidu.flutter_bmfmap.BMFHandlerHelper;
+import com.baidu.flutter_bmfmap.map.mapHandler.BMapHandlerFactory;
+import com.baidu.flutter_bmfmap.map.overlayHandler.OverlayHandlerFactory;
+import com.baidu.flutter_bmfmap.utils.Constants;
+import com.baidu.flutter_bmfmap.utils.Env;
+import com.baidu.mapapi.map.MapView;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.util.Log;
+import android.view.View;
+import androidx.annotation.NonNull;
+import androidx.localbroadcastmanager.content.LocalBroadcastManager;
+import io.flutter.plugin.common.BinaryMessenger;
+import io.flutter.plugin.common.EventChannel;
+import io.flutter.plugin.common.MethodChannel;
+import io.flutter.plugin.platform.PlatformView;
+
+public class FlutterMapView extends FlutterBaseMapView implements PlatformView {
+
+ private static final String TAG = "FlutterMapView";
+
+ private MapView mMapView;
+
+ private Context mContext;
+
+ private BinaryMessenger mMessager;
+
+ private BMFHandlerHelper mBMFHandlerHelper;
+
+ private MethodChannel mMethodChannel;
+
+ private EventChannel mEventChannel;
+
+ private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (Constants.sConfigChangedAction.equals(action) && !mResume) {
+ mResume = true;
+ }
+ }
+ };
+
+ public FlutterMapView(Context context,
+ BinaryMessenger messenger,
+ int viewId,
+ Object args,
+ String viewType) {
+ if (Env.DEBUG) {
+ Log.d(TAG, "FlutterMapView");
+ }
+ mContext = context;
+ mMessager = messenger;
+ mViewType = viewType;
+ init(viewId, args);
+ }
+
+ protected void init(int viewId, Object args) {
+ if (Env.DEBUG) {
+ Log.d(TAG, "init");
+ }
+
+ mMapView = new MapView(mContext);
+ FlutterCommonMapView mapViewWrapper = new MapViewWrapper(this, mViewType);
+ initMapView(args, mapViewWrapper);
+
+ mMethodChannel = new MethodChannel(mMessager,
+ Constants.VIEW_METHOD_CHANNEL_PREFIX + (char) (viewId + 97));
+
+ mEventChannel = new EventChannel(mMessager,
+ Constants.VIEW_EVENT_CHANNEL_PREFIX + (char) (viewId + 97));
+
+ mBMFHandlerHelper =
+ new BMFHandlerHelper(mContext, mapViewWrapper, mMethodChannel, mEventChannel);
+
+ new MapListener(new MapViewWrapper(this, mViewType), mMethodChannel);
+
+ IntentFilter intentFilter = new IntentFilter(Constants.sConfigChangedAction);
+ LocalBroadcastManager.getInstance(mContext).registerReceiver(mReceiver, intentFilter);
+
+ if (Env.DEBUG) {
+ Log.d(TAG, "init success");
+ }
+ }
+
+ protected void initMapView(Object args, FlutterCommonMapView flutterCommonMapView) {
+ if (null == mContext) {
+ return;
+ }
+
+ Map mapOptionsMap = (Map) args;
+ if (null == mapOptionsMap) {
+ return;
+ }
+
+ initMapStatus(mapOptionsMap, flutterCommonMapView);
+ }
+
+ @Override
+ public View getView() {
+ if (Env.DEBUG) {
+ Log.d(TAG, "getView");
+ }
+
+ if (mResume) {
+ mGetViewCount++;
+ }
+
+ if (mGetViewCount >= MAX_GET_VIEW_CNT_BY_FLUTTER_RESIZE - 1) {
+ mMapView.onResume();
+ mResume = false;
+ mGetViewCount = 0;
+ }
+
+ return mMapView;
+ }
+
+ @Override
+ public void onFlutterViewAttached(@NonNull View flutterView) {
+ if (Env.DEBUG) {
+ Log.d(TAG, "onFlutterViewAttached");
+ }
+ if (null != mMapView) {
+ mMapView.onResume();
+ }
+ }
+
+ @Override
+ public void onFlutterViewDetached() {
+ if (Env.DEBUG) {
+ Log.d(TAG, "onFlutterViewDetached");
+ }
+ if (null != mMapView) {
+ mMapView.onPause();
+ }
+ }
+
+ @Override
+ public void dispose() {
+ if (Env.DEBUG) {
+ Log.d(TAG, "dispose");
+ }
+
+ LocalBroadcastManager.getInstance(mContext).unregisterReceiver(mReceiver);
+
+ BMapHandlerFactory.getInstance(null).clean();
+ OverlayHandlerFactory.getInstance(null).clean();
+
+ if (null != mMapView) {
+ mMapView.onDestroy();
+ }
+ }
+
+ public void setResumeState(boolean resume) {
+ mResume = true;
+ }
+
+ public MapView getMapView() {
+ return mMapView;
+ }
+}
diff --git a/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/map/FlutterTextureMapView.java b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/map/FlutterTextureMapView.java
new file mode 100644
index 0000000..aaea82b
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/map/FlutterTextureMapView.java
@@ -0,0 +1,152 @@
+package com.baidu.flutter_bmfmap.map;
+
+import static com.baidu.flutter_bmfmap.utils.Constants.MAX_GET_VIEW_CNT_BY_FLUTTER_RESIZE;
+
+import java.util.Map;
+
+import com.baidu.flutter_bmfmap.BMFHandlerHelper;
+import com.baidu.flutter_bmfmap.utils.Constants;
+import com.baidu.flutter_bmfmap.utils.Env;
+import com.baidu.mapapi.map.TextureMapView;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.util.Log;
+import android.view.View;
+import androidx.annotation.NonNull;
+import androidx.localbroadcastmanager.content.LocalBroadcastManager;
+import io.flutter.plugin.common.BinaryMessenger;
+import io.flutter.plugin.common.EventChannel;
+import io.flutter.plugin.common.MethodChannel;
+import io.flutter.plugin.platform.PlatformView;
+
+public class FlutterTextureMapView extends FlutterBaseMapView implements PlatformView {
+
+ private static final String TAG = "FlutterMapView";
+
+ private TextureMapView mTextureMapView;
+
+ private Context mContext;
+
+ private BinaryMessenger mMessager;
+
+ private BMFHandlerHelper mBMFHandlerHelper;
+
+ private MethodChannel mMethodChannel;
+
+ private EventChannel mEventChannel;
+
+ private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (Constants.sConfigChangedAction.equals(action) && !mResume) {
+ mResume = true;
+ }
+ }
+ };
+
+ public FlutterTextureMapView(Context context,
+ BinaryMessenger messenger,
+ int viewId,
+ Object args,
+ String viewType) {
+ Log.d(TAG, "FlutterMapView");
+ mContext = context;
+ mMessager = messenger;
+ mViewType = viewType;
+ init(viewId, args);
+ }
+
+ protected void init(int viewId, Object args) {
+ if (Env.DEBUG) {
+ Log.d(TAG, "init");
+ }
+
+ mTextureMapView = new TextureMapView(mContext);
+ FlutterCommonMapView flutterCommonMapView =
+ new TextureMapViewWrapper(mTextureMapView, mViewType);
+ initMapView(args, flutterCommonMapView);
+
+ mMethodChannel = new MethodChannel(mMessager,
+ Constants.VIEW_METHOD_CHANNEL_PREFIX + (char) (viewId + 97));
+
+ mEventChannel = new EventChannel(mMessager,
+ Constants.VIEW_EVENT_CHANNEL_PREFIX + (char) (viewId + 97));
+
+ mBMFHandlerHelper =
+ new BMFHandlerHelper(mContext, flutterCommonMapView, mMethodChannel, mEventChannel);
+
+ new MapListener(new TextureMapViewWrapper(mTextureMapView, mViewType), mMethodChannel);
+
+ IntentFilter intentFilter = new IntentFilter(Constants.sConfigChangedAction);
+ LocalBroadcastManager.getInstance(mContext).registerReceiver(mReceiver, intentFilter);
+
+ if (Env.DEBUG) {
+ Log.d(TAG, "init success");
+ }
+ }
+
+ protected void initMapView(Object args, FlutterCommonMapView flutterCommonMapView) {
+ if (null == mContext) {
+ return;
+ }
+
+ Map mapOptionsMap = (Map) args;
+ if (null == mapOptionsMap) {
+ return;
+ }
+
+ initMapStatus(mapOptionsMap, flutterCommonMapView);
+ }
+
+ @Override
+ public View getView() {
+ if (Env.DEBUG) {
+ Log.d(TAG, "getView");
+ }
+
+ if (mResume) {
+ mGetViewCount++;
+ }
+
+ if (mGetViewCount >= MAX_GET_VIEW_CNT_BY_FLUTTER_RESIZE - 1) {
+ mTextureMapView.onResume();
+ mResume = false;
+ mGetViewCount = 0;
+ }
+
+ return mTextureMapView;
+ }
+
+ @Override
+ public void onFlutterViewAttached(@NonNull View flutterView) {
+ if (null != mTextureMapView) {
+ mTextureMapView.onResume();
+ }
+
+ }
+
+ @Override
+ public void onFlutterViewDetached() {
+ if (null != mTextureMapView) {
+ mTextureMapView.onPause();
+ }
+
+ }
+
+ @Override
+ public void dispose() {
+ if (Env.DEBUG) {
+ Log.d(TAG, "dispose");
+ }
+
+ LocalBroadcastManager.getInstance(mContext).unregisterReceiver(mReceiver);
+
+ if (null != mTextureMapView) {
+ mTextureMapView.onDestroy();
+ }
+ }
+}
diff --git a/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/map/MapListener.java b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/map/MapListener.java
new file mode 100644
index 0000000..d0fa805
--- /dev/null
+++ b/lib/my_flutter_bmfmap-1.0.2/android/src/main/java/com/baidu/flutter_bmfmap/map/MapListener.java
@@ -0,0 +1,696 @@
+package com.baidu.flutter_bmfmap.map;
+
+import android.graphics.Point;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.baidu.flutter_bmfmap.utils.Constants;
+import com.baidu.flutter_bmfmap.utils.Env;
+import android.os.Message;
+
+import com.baidu.mapapi.map.BaiduMap;
+import com.baidu.mapapi.map.MapBaseIndoorMapInfo;
+import com.baidu.mapapi.map.MapPoi;
+import com.baidu.mapapi.map.MapStatus;
+import com.baidu.mapapi.map.Marker;
+import com.baidu.mapapi.map.Polyline;
+import com.baidu.mapapi.model.LatLng;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import android.os.Handler;
+import javax.microedition.khronos.opengles.GL10;
+
+import io.flutter.plugin.common.MethodChannel;
+import com.baidu.flutter_bmfmap.utils.ThreadPoolUtil;
+import com.baidu.mapapi.model.LatLngBounds;
+
+
+@SuppressWarnings("unchecked")
+public class MapListener implements BaiduMap.OnMapClickListener ,BaiduMap.OnMapLoadedCallback,
+ BaiduMap.OnMapStatusChangeListener ,BaiduMap.OnMapRenderCallback,BaiduMap.OnMapDrawFrameCallback,
+ BaiduMap.OnBaseIndoorMapListener ,BaiduMap.OnMarkerClickListener,BaiduMap.OnPolylineClickListener,
+ BaiduMap.OnMapDoubleClickListener,BaiduMap.OnMapLongClickListener,BaiduMap.OnMarkerDragListener,
+ BaiduMap.OnMapRenderValidDataListener,BaiduMap.OnMyLocationClickListener {
+
+ private static final int DRAW_FRAME_MESSAGE = 0;
+ private static final String TAG = "MapListener";
+ private BaiduMap mBaiduMap;
+ private MethodChannel mMethodChannel;
+ private int mReason;
+ private HashMap mStatusMap;
+
+ private final Handler mHandler = new Handler(){
+ public void handleMessage(Message msg) {
+ super.handleMessage(msg);
+ if (msg.what == DRAW_FRAME_MESSAGE) {
+ if (null != mStatusMap){
+ mMethodChannel.invokeMethod(
+ Constants.MethodProtocol.MapStateProtocol.sMapOnDrawMapFrameCallback,mStatusMap);
+ }
+ }
+ }
+ };
+
+
+ public MapListener(FlutterCommonMapView mapView, MethodChannel methodChannel) {
+ this.mMethodChannel = methodChannel;
+
+ if (null == mapView) {
+ return;
+ }
+ mBaiduMap = mapView.getBaiduMap();
+ initListener();
+ }
+
+ private void initListener() {
+ if (null == mBaiduMap) {
+ return;
+ }
+ mBaiduMap.setOnMapClickListener(this);
+ mBaiduMap.setOnMapLoadedCallback(this);
+ mBaiduMap.setOnMapStatusChangeListener(this);
+ mBaiduMap.setOnMapDrawFrameCallback(this);
+ mBaiduMap.setOnMapRenderCallbadk(this);
+ mBaiduMap.setOnBaseIndoorMapListener(this);
+ mBaiduMap.setOnMarkerClickListener(this);
+ mBaiduMap.setOnPolylineClickListener(this);
+ mBaiduMap.setOnMapDoubleClickListener(this);
+ mBaiduMap.setOnMapLongClickListener(this);
+ mBaiduMap.setOnMarkerDragListener(this);
+ mBaiduMap.setOnMapRenderValidDataListener(this);
+ mBaiduMap.setOnMyLocationClickListener(this);
+ }
+
+ @Override
+ public void onMapClick(LatLng latLng) {
+ if (null == latLng || mMethodChannel == null) {
+ return;
+ }
+ HashMap coordinateMap = new HashMap<>();
+ HashMap coord = new HashMap<>();
+ coord.put("latitude",latLng.latitude);
+ coord.put("longitude",latLng.longitude);
+ coordinateMap.put("coord",coord);
+ mMethodChannel.invokeMethod(Constants.MethodProtocol.MapStateProtocol.sMapOnClickedMapBlankCallback,coordinateMap);
+ }
+
+ @Override
+ public void onMapPoiClick(MapPoi mapPoi) {
+ if (null == mapPoi || mMethodChannel == null) {
+ return;
+ }
+ HashMap pt = new HashMap<>();
+ LatLng position = mapPoi.getPosition();
+ if (null != position) {
+ pt.put("latitude",mapPoi.getPosition().latitude);
+ pt.put("longitude",mapPoi.getPosition().longitude);
+ }
+ HashMap poiMap = new HashMap<>();
+ HashMap poi = new HashMap();
+ poi.put("text",mapPoi.getName());
+ poi.put("uid",mapPoi.getUid());
+ poi.put("pt",pt);
+ poiMap.put("poi",poi);
+ mMethodChannel.invokeMethod(Constants.MethodProtocol.MapStateProtocol.sMapOnClickedMapPoiCallback,poiMap);
+ }
+
+ @Override
+ public void onMapLoaded() {
+ mMethodChannel.invokeMethod(Constants.MethodProtocol.MapStateProtocol.sMapDidLoadCallback,"");
+ }
+
+ @Override
+ public void onMapStatusChangeStart(MapStatus mapStatus) {
+ if (null == mapStatus || mMethodChannel == null) {
+ return;
+ }
+ HashMap targetScreenMap = new HashMap<>();
+ Point targetScreen = mapStatus.targetScreen;
+ if (null == targetScreen) {
+ return;
+ }
+ targetScreenMap.put("x", (double) targetScreen.x);
+ targetScreenMap.put("y", (double) targetScreen.y);
+ HashMap targetMap = new HashMap<>();
+ LatLng latLng = mapStatus.target;
+ if (null == latLng){
+ return;
+ }
+ targetMap.put("latitude", latLng.latitude);
+ targetMap.put("longitude", latLng.longitude);
+
+ LatLngBounds bound = mapStatus.bound;
+ if (null == bound) {
+ return;
+ }
+ HashMap latLngBoundMap = latLngBounds(bound);
+ if (null == latLngBoundMap) {
+ return;
+ }
+ HashMap statusMap = new HashMap<>();
+ HashMap status = new HashMap();
+ status.put("fLevel",((double)mapStatus.zoom));
+ double rotate = mapStatus.rotate;
+ if (rotate > 180) {
+ rotate = rotate - 360;
+ }
+ status.put("fRotation", rotate);
+ status.put("fOverlooking",((double) mapStatus.overlook));
+ status.put("targetScreenPt",targetScreenMap);
+ status.put("targetGeoPt",targetMap);
+ status.put("visibleMapBounds",latLngBoundMap);
+ statusMap.put("mapStatus",status);
+ mMethodChannel.invokeMethod(Constants.MethodProtocol.MapStateProtocol.sMapRegionWillChangeCallback,statusMap);
+ }
+
+ @Override
+ public void onMapStatusChangeStart(MapStatus mapStatus, int reason) {
+ if (null == mapStatus || mMethodChannel == null) {
+ return;
+ }
+ mReason = reason;
+ HashMap targetScreenMap = new HashMap<>();
+ Point targetScreen = mapStatus.targetScreen;
+ if (null == targetScreen) {
+ return;
+ }
+ targetScreenMap.put("x", (double) targetScreen.x);
+ targetScreenMap.put("y", (double) targetScreen.y);
+ HashMap targetMap = new HashMap<>();
+ LatLng latLng = mapStatus.target;
+ if (null == latLng){
+ return;
+ }
+ targetMap.put("latitude", latLng.latitude);
+ targetMap.put("longitude", latLng.longitude);
+
+ LatLngBounds bound = mapStatus.bound;
+ if (null == bound) {
+ return;
+ }
+ HashMap latLngBoundMap = latLngBounds(bound);
+ if (null == latLngBoundMap) {
+ return;
+ }
+ HashMap statusMap = new HashMap<>();
+ HashMap status = new HashMap();
+ status.put("fLevel",((double)mapStatus.zoom));
+ double rotate = mapStatus.rotate;
+ if (rotate > 180) {
+ rotate = rotate - 360;
+ }
+ status.put("fRotation", rotate);
+ status.put("fOverlooking",((double) mapStatus.overlook));
+ status.put("targetScreenPt",targetScreenMap);
+ status.put("targetGeoPt",targetMap);
+ status.put("visibleMapBounds",latLngBoundMap);
+ statusMap.put("mapStatus",status);
+ statusMap.put("reason",mReason);
+ mMethodChannel.invokeMethod(Constants.MethodProtocol.MapStateProtocol.
+ sMapRegionWillChangeWithReasonCallback,statusMap);
+ }
+
+ @Override
+ public void onMapStatusChange(MapStatus mapStatus) {
+ if (null == mapStatus || mMethodChannel == null) {
+ return;
+ }
+ HashMap targetScreenMap = new HashMap<>();
+ Point targetScreen = mapStatus.targetScreen;
+ if (null == targetScreen) {
+ return;
+ }
+ targetScreenMap.put("x", (double) targetScreen.x);
+ targetScreenMap.put("y", (double) targetScreen.y);
+ HashMap targetMap = new HashMap<>();
+ LatLng latLng = mapStatus.target;
+ if (null == latLng){
+ return;
+ }
+ targetMap.put("latitude", latLng.latitude);
+ targetMap.put("longitude", latLng.longitude);
+
+ LatLngBounds bound = mapStatus.bound;
+ if (null == bound) {
+ return;
+ }
+ HashMap latLngBoundMap = latLngBounds(bound);
+ if (null == latLngBoundMap) {
+ return;
+ }
+ HashMap statusMap = new HashMap<>();
+ HashMap status = new HashMap();
+ status.put("fLevel",((double)mapStatus.zoom));
+ double rotate = mapStatus.rotate;
+ if (rotate > 180) {
+ rotate = rotate - 360;
+ }
+ status.put("fRotation", rotate);
+ status.put("fOverlooking",((double) mapStatus.overlook));
+ status.put("targetScreenPt",targetScreenMap);
+ status.put("targetGeoPt",targetMap);
+ status.put("visibleMapBounds",latLngBoundMap);
+ statusMap.put("mapStatus",status);
+
+ mMethodChannel.invokeMethod(
+ Constants.MethodProtocol.MapStateProtocol.sMapRegionDidChangeCallback,statusMap);
+ }
+
+ @Override
+ public void onMapStatusChangeFinish(MapStatus mapStatus) {
+ if (null == mapStatus || mMethodChannel == null) {
+ return;
+ }
+ HashMap targetScreenMap = new HashMap<>();
+ Point targetScreen = mapStatus.targetScreen;
+ if (null == targetScreen) {
+ return;
+ }
+ targetScreenMap.put("x", (double) targetScreen.x);
+ targetScreenMap.put("y", (double) targetScreen.y);
+ HashMap targetMap = new HashMap<>();
+ LatLng latLng = mapStatus.target;
+ if (null == latLng){
+ return;
+ }
+ targetMap.put("latitude", latLng.latitude);
+ targetMap.put("longitude", latLng.longitude);
+
+ LatLngBounds bound = mapStatus.bound;
+ if (null == bound) {
+ return;
+ }
+ HashMap latLngBoundMap = latLngBounds(bound);
+ if (null == latLngBoundMap) {
+ return;
+ }
+ HashMap statusMap = new HashMap<>();
+ HashMap status = new HashMap();
+ status.put("fLevel",((double)mapStatus.zoom));
+ double rotate = mapStatus.rotate;
+ if (rotate > 180) {
+ rotate = rotate - 360;
+ }
+ status.put("fRotation", rotate);
+ status.put("fOverlooking",((double) mapStatus.overlook));
+ status.put("targetScreenPt",targetScreenMap);
+ status.put("targetGeoPt",targetMap);
+ status.put("visibleMapBounds",latLngBoundMap);
+ statusMap.put("mapStatus",status);
+ statusMap.put("reason",mReason);
+ mMethodChannel.invokeMethod(Constants.MethodProtocol.MapStateProtocol.sMapRegionDidChangeWithReasonCallback,statusMap);
+ mMethodChannel.invokeMethod(Constants.MethodProtocol.MapStateProtocol.sMapStatusDidChangedCallback,"");
+ }
+
+ @Override
+ public void onMapRenderFinished() {
+ HashMap hashMap = new HashMap();
+ hashMap.put("success",true);
+ mMethodChannel.invokeMethod(Constants.MethodProtocol.MapStateProtocol.sMapDidFinishRenderCallback,hashMap);
+ }
+
+ @Override
+ public void onMapDrawFrame(GL10 gl10, MapStatus mapStatus) {
+
+ }
+
+ @Override
+ public void onMapDrawFrame(MapStatus mapStatus) {
+ if (null == mapStatus || mMethodChannel == null) {
+ return;
+ }
+ HashMap targetScreenMap = new HashMap<>();
+ Point targetScreen = mapStatus.targetScreen;
+ if (null == targetScreen) {
+ return;
+ }
+ targetScreenMap.put("x", (double) targetScreen.x);
+ targetScreenMap.put("y", (double) targetScreen.y);
+ HashMap targetMap = new HashMap<>();
+ LatLng latLng = mapStatus.target;
+ if (null == latLng){
+ return;
+ }
+ targetMap.put("latitude", latLng.latitude);
+ targetMap.put("longitude", latLng.longitude);
+
+ LatLngBounds bound = mapStatus.bound;
+ if (null == bound) {
+ return;
+ }
+
+ HashMap latLngBoundMap = latLngBounds(bound);
+ if (null == latLngBoundMap) {
+ return;
+ }
+ mStatusMap = new HashMap<>();
+ HashMap status = new HashMap();
+ status.put("fLevel",((double)mapStatus.zoom));
+ double rotate = mapStatus.rotate;
+ if (rotate > 180) {
+ rotate = rotate - 360;
+ }
+ status.put("fRotation", rotate);
+ status.put("fOverlooking",((double) mapStatus.overlook));
+ status.put("targetScreenPt",targetScreenMap);
+ status.put("targetGeoPt",targetMap);
+ status.put("visibleMapBounds",latLngBoundMap);
+ mStatusMap.put("mapStatus",status);
+
+ ThreadPoolUtil.getInstance().execute(new Runnable() {
+ @Override
+ public void run() {
+ Message msg = Message.obtain();
+ msg.arg1 = DRAW_FRAME_MESSAGE;
+ mHandler.sendMessage(msg);
+ }
+ });
+
+ }
+
+ @Override
+ public void onBaseIndoorMapMode(boolean isIndoorMap, MapBaseIndoorMapInfo mapBaseIndoorMapInfo) {
+ if (mMethodChannel == null) {
+ return;
+ }
+ HashMap indoorHashMap = new HashMap();
+ indoorHashMap.put("flag",isIndoorMap);
+ HashMap indoorMap = new HashMap();
+ if (isIndoorMap) {
+ if (null == mapBaseIndoorMapInfo) {
+ return;
+ }
+ String curFloor = mapBaseIndoorMapInfo.getCurFloor();
+ String id = mapBaseIndoorMapInfo.getID();
+ ArrayList floors = mapBaseIndoorMapInfo.getFloors();
+ indoorMap.put("strFloor", curFloor);
+ indoorMap.put("strID", id);
+ indoorMap.put("listStrFloors", floors);
+ }
+ indoorHashMap.put("info",indoorMap);
+ mMethodChannel.invokeMethod(Constants.MethodProtocol.MapStateProtocol.sMapInOrOutBaseIndoorMapCallback
+ ,indoorHashMap);
+ }
+
+
+ @Override
+ public boolean onMarkerClick(Marker marker) {
+ if(Env.DEBUG){
+ Log.d(TAG, "onMarkerClick");
+ }
+ if(null == mMethodChannel){
+ return false;
+ }
+
+ Bundle bundle = marker.getExtraInfo();
+ if(null == bundle){
+ if(Env.DEBUG){
+ Log.d(TAG, "bundle is null");
+ }
+ return false;
+ }
+
+ String id = bundle.getString("id");
+ if(TextUtils.isEmpty(id)){
+ if(Env.DEBUG){
+ Log.d(TAG, "marker id is null ");
+ }
+ return false;
+ }
+
+
+ Map clickMap = new HashMap<>();
+ clickMap.put("id", id);
+
+ mMethodChannel.invokeMethod(Constants.MethodProtocol.MarkerProtocol.sMapClickedmarkedMethod, clickMap);
+
+ return true;
+ }
+
+ @Override
+ public boolean onPolylineClick(Polyline polyline) {
+
+ Log.d("polyline", "polyline click");
+
+ HashMap hashMap = polylineClick(polyline);
+ HashMap polyLineMap = new HashMap<>();
+ polyLineMap.put("polyline", hashMap);
+ mMethodChannel.invokeMethod(Constants.MethodProtocol.PolylineProtocol.sMapOnClickedOverlayCallback, polyLineMap);
+
+ return true;
+ }
+
+ private HashMap polylineClick(Polyline polyline) {
+ if (null == polyline) {
+ return null;
+ }
+
+ Bundle bundle = polyline.getExtraInfo();
+ String id = bundle.getString("id");
+
+ HashMap polylineMap = new HashMap();
+
+ List points = polyline.getPoints();
+ List