From 02b3da2ee34dc7b5e897189bd13d64926f7b681f Mon Sep 17 00:00:00 2001
From: tanlongsheng <252620078@qq.com>
Date: Fri, 11 Apr 2025 18:29:20 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=AB=98=E5=BE=B7=E5=AE=9A?=
=?UTF-8?q?=E4=BD=8Dsdk?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
amap_flutter/.gitignore | 33 ++++
amap_flutter/.metadata | 33 ++++
amap_flutter/CHANGELOG.md | 3 +
amap_flutter/LICENSE | 1 +
amap_flutter/README.md | 15 ++
amap_flutter/analysis_options.yaml | 4 +
amap_flutter/android/.gitignore | 9 +
amap_flutter/android/build.gradle | 54 ++++++
amap_flutter/android/settings.gradle | 1 +
.../android/src/main/AndroidManifest.xml | 3 +
.../amap_flutter/AmapFlutterPlugin.java | 168 ++++++++++++++++++
amap_flutter/ios/.gitignore | 38 ++++
amap_flutter/ios/Assets/.gitkeep | 0
.../ios/Classes/AmapFlutterPlugin.swift | 19 ++
.../ios/Resources/PrivacyInfo.xcprivacy | 14 ++
amap_flutter/ios/amap_flutter.podspec | 29 +++
amap_flutter/lib/amap_flutter.dart | 36 ++++
.../lib/amap_flutter_method_channel.dart | 45 +++++
.../lib/amap_flutter_platform_interface.dart | 49 +++++
amap_flutter/pubspec.yaml | 72 ++++++++
android/app/src/main/AndroidManifest.xml | 8 +-
.../meeting_record_controller.dart | 20 ++-
.../meeting/views/meeting_details_view.dart | 19 +-
.../meeting/views/meeting_edit_view.dart | 15 +-
.../meeting/views/meeting_record_view.dart | 15 +-
.../splash/controllers/splash_controller.dart | 5 +
pubspec.yaml | 2 +
27 files changed, 690 insertions(+), 20 deletions(-)
create mode 100644 amap_flutter/.gitignore
create mode 100644 amap_flutter/.metadata
create mode 100644 amap_flutter/CHANGELOG.md
create mode 100644 amap_flutter/LICENSE
create mode 100644 amap_flutter/README.md
create mode 100644 amap_flutter/analysis_options.yaml
create mode 100644 amap_flutter/android/.gitignore
create mode 100644 amap_flutter/android/build.gradle
create mode 100644 amap_flutter/android/settings.gradle
create mode 100644 amap_flutter/android/src/main/AndroidManifest.xml
create mode 100644 amap_flutter/android/src/main/java/com/example/amap_flutter/AmapFlutterPlugin.java
create mode 100644 amap_flutter/ios/.gitignore
create mode 100644 amap_flutter/ios/Assets/.gitkeep
create mode 100644 amap_flutter/ios/Classes/AmapFlutterPlugin.swift
create mode 100644 amap_flutter/ios/Resources/PrivacyInfo.xcprivacy
create mode 100644 amap_flutter/ios/amap_flutter.podspec
create mode 100644 amap_flutter/lib/amap_flutter.dart
create mode 100644 amap_flutter/lib/amap_flutter_method_channel.dart
create mode 100644 amap_flutter/lib/amap_flutter_platform_interface.dart
create mode 100644 amap_flutter/pubspec.yaml
diff --git a/amap_flutter/.gitignore b/amap_flutter/.gitignore
new file mode 100644
index 000000000..e7d347d9d
--- /dev/null
+++ b/amap_flutter/.gitignore
@@ -0,0 +1,33 @@
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+.DS_Store
+.atom/
+.build/
+.buildlog/
+.history
+.svn/
+.swiftpm/
+migrate_working_dir/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# The .vscode folder contains launch configuration and tasks you configure in
+# VS Code which you may wish to be included in version control, so this line
+# is commented out by default.
+#.vscode/
+
+# Flutter/Dart/Pub related
+# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock.
+/pubspec.lock
+**/doc/api/
+.dart_tool/
+.flutter-plugins
+.flutter-plugins-dependencies
+build/
diff --git a/amap_flutter/.metadata b/amap_flutter/.metadata
new file mode 100644
index 000000000..a5700b901
--- /dev/null
+++ b/amap_flutter/.metadata
@@ -0,0 +1,33 @@
+# This file tracks properties of this Flutter project.
+# Used by Flutter tool to assess capabilities and perform upgrades etc.
+#
+# This file should be version controlled and should not be manually edited.
+
+version:
+ revision: "35c388afb57ef061d06a39b537336c87e0e3d1b1"
+ channel: "stable"
+
+project_type: plugin
+
+# Tracks metadata for the flutter migrate command
+migration:
+ platforms:
+ - platform: root
+ create_revision: 35c388afb57ef061d06a39b537336c87e0e3d1b1
+ base_revision: 35c388afb57ef061d06a39b537336c87e0e3d1b1
+ - platform: android
+ create_revision: 35c388afb57ef061d06a39b537336c87e0e3d1b1
+ base_revision: 35c388afb57ef061d06a39b537336c87e0e3d1b1
+ - platform: ios
+ create_revision: 35c388afb57ef061d06a39b537336c87e0e3d1b1
+ base_revision: 35c388afb57ef061d06a39b537336c87e0e3d1b1
+
+ # User provided section
+
+ # List of Local paths (relative to this file) that should be
+ # ignored by the migrate tool.
+ #
+ # Files that are not part of the templates will be ignored by default.
+ unmanaged_files:
+ - 'lib/main.dart'
+ - 'ios/Runner.xcodeproj/project.pbxproj'
diff --git a/amap_flutter/CHANGELOG.md b/amap_flutter/CHANGELOG.md
new file mode 100644
index 000000000..41cc7d819
--- /dev/null
+++ b/amap_flutter/CHANGELOG.md
@@ -0,0 +1,3 @@
+## 0.0.1
+
+* TODO: Describe initial release.
diff --git a/amap_flutter/LICENSE b/amap_flutter/LICENSE
new file mode 100644
index 000000000..ba75c69f7
--- /dev/null
+++ b/amap_flutter/LICENSE
@@ -0,0 +1 @@
+TODO: Add your license here.
diff --git a/amap_flutter/README.md b/amap_flutter/README.md
new file mode 100644
index 000000000..8ad963d6d
--- /dev/null
+++ b/amap_flutter/README.md
@@ -0,0 +1,15 @@
+# amap_flutter
+
+A new Flutter project.
+
+## Getting Started
+
+This project is a starting point for a Flutter
+[plug-in package](https://flutter.dev/to/develop-plugins),
+a specialized package that includes platform-specific implementation code for
+Android and/or iOS.
+
+For help getting started with Flutter development, view the
+[online documentation](https://docs.flutter.dev), which offers tutorials,
+samples, guidance on mobile development, and a full API reference.
+
diff --git a/amap_flutter/analysis_options.yaml b/amap_flutter/analysis_options.yaml
new file mode 100644
index 000000000..a5744c1cf
--- /dev/null
+++ b/amap_flutter/analysis_options.yaml
@@ -0,0 +1,4 @@
+include: package:flutter_lints/flutter.yaml
+
+# Additional information about this file can be found at
+# https://dart.dev/guides/language/analysis-options
diff --git a/amap_flutter/android/.gitignore b/amap_flutter/android/.gitignore
new file mode 100644
index 000000000..161bdcdaf
--- /dev/null
+++ b/amap_flutter/android/.gitignore
@@ -0,0 +1,9 @@
+*.iml
+.gradle
+/local.properties
+/.idea/workspace.xml
+/.idea/libraries
+.DS_Store
+/build
+/captures
+.cxx
diff --git a/amap_flutter/android/build.gradle b/amap_flutter/android/build.gradle
new file mode 100644
index 000000000..6b87067f5
--- /dev/null
+++ b/amap_flutter/android/build.gradle
@@ -0,0 +1,54 @@
+group = "com.example.amap_flutter"
+version = "1.0"
+
+buildscript {
+ repositories {
+ google()
+ mavenCentral()
+ }
+
+ dependencies {
+ classpath("com.android.tools.build:gradle:8.7.0")
+ }
+}
+
+rootProject.allprojects {
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+apply plugin: "com.android.library"
+
+android {
+ namespace = "com.example.amap_flutter"
+
+ compileSdk = 35
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_11
+ targetCompatibility = JavaVersion.VERSION_11
+ }
+
+ defaultConfig {
+ minSdk = 21
+ }
+
+ dependencies {
+ implementation 'com.amap.api:location:6.4.9'
+
+ testImplementation("junit:junit:4.13.2")
+ testImplementation("org.mockito:mockito-core:5.0.0")
+ }
+
+ testOptions {
+ unitTests.all {
+ testLogging {
+ events "passed", "skipped", "failed", "standardOut", "standardError"
+ outputs.upToDateWhen {false}
+ showStandardStreams = true
+ }
+ }
+ }
+}
diff --git a/amap_flutter/android/settings.gradle b/amap_flutter/android/settings.gradle
new file mode 100644
index 000000000..5f1ba0ee8
--- /dev/null
+++ b/amap_flutter/android/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = 'amap_flutter'
diff --git a/amap_flutter/android/src/main/AndroidManifest.xml b/amap_flutter/android/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..3d69995fd
--- /dev/null
+++ b/amap_flutter/android/src/main/AndroidManifest.xml
@@ -0,0 +1,3 @@
+
+
diff --git a/amap_flutter/android/src/main/java/com/example/amap_flutter/AmapFlutterPlugin.java b/amap_flutter/android/src/main/java/com/example/amap_flutter/AmapFlutterPlugin.java
new file mode 100644
index 000000000..ba72d7ac6
--- /dev/null
+++ b/amap_flutter/android/src/main/java/com/example/amap_flutter/AmapFlutterPlugin.java
@@ -0,0 +1,168 @@
+package com.example.amap_flutter;
+
+import android.content.Context;
+import androidx.annotation.NonNull;
+import android.util.Log;
+
+import com.amap.api.location.AMapLocation;
+import com.amap.api.location.AMapLocationClient;
+import com.amap.api.location.AMapLocationClientOption;
+import com.amap.api.location.AMapLocationListener;
+
+import io.flutter.embedding.engine.plugins.FlutterPlugin;
+import io.flutter.plugin.common.EventChannel;
+import io.flutter.plugin.common.MethodCall;
+import io.flutter.plugin.common.MethodChannel;
+import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
+import io.flutter.plugin.common.MethodChannel.Result;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/** AmapFlutterPlugin */
+public class AmapFlutterPlugin implements FlutterPlugin, MethodCallHandler {
+ /// The MethodChannel that will the communication between Flutter and native Android
+ ///
+ /// This local reference serves to register the plugin with the Flutter Engine and unregister it
+ /// when the Flutter Engine is detached from the Activity
+ private MethodChannel methodChannel;
+ private EventChannel eventChannel;
+ private Context applicationContext;
+ private AMapLocationClient mLocationClient;
+ private EventChannel.EventSink eventSink;
+
+ @Override
+ public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
+ applicationContext = flutterPluginBinding.getApplicationContext();
+ methodChannel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "amap_flutter");
+ methodChannel.setMethodCallHandler(this);
+
+ // 初始化EventChannel
+ eventChannel = new EventChannel(flutterPluginBinding.getBinaryMessenger(), "amap_flutter/events");
+ eventChannel.setStreamHandler(new EventChannel.StreamHandler() {
+ @Override
+ public void onListen(Object arguments, EventChannel.EventSink events) {
+ eventSink = events;
+ }
+
+ @Override
+ public void onCancel(Object arguments) {
+ eventSink = null;
+ }
+ });
+ }
+
+ @Override
+ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
+ switch (call.method) {
+ case "setApiKey":
+ setApiKey(call, result);
+ break;
+ case "initLocation":
+ initLocation(result);
+ break;
+ case "startLocation":
+ startLocation(result);
+ break;
+ case "stopLocation":
+ stopLocation(result);
+ break;
+ case "dispose":
+ dispose(result);
+ break;
+ default:
+ result.notImplemented();
+ }
+ }
+
+ private void setApiKey(MethodCall call, Result result) {
+ try {
+ String apiKey = call.argument("androidKey");
+ AMapLocationClient.updatePrivacyShow(applicationContext, true, true);
+ AMapLocationClient.updatePrivacyAgree(applicationContext, true);
+ result.success(null);
+ } catch (Exception e) {
+ result.error("INIT_ERROR", "初始化失败", e.getMessage());
+ }
+ }
+
+ private void initLocation(Result result) {
+ try {
+ mLocationClient = new AMapLocationClient(applicationContext);
+
+ // 配置定位参数
+ AMapLocationClientOption option = new AMapLocationClientOption();
+ option.setOnceLocation(true);
+ option.setNeedAddress(true);
+ mLocationClient.setLocationOption(option);
+
+ mLocationClient.setLocationListener(mLocationListener);
+ result.success(null);
+ } catch (Exception e) {
+ result.error("INIT_ERROR", "初始化失败", e.getMessage());
+ }
+ }
+
+ private void startLocation(Result result) {
+ mLocationClient.startLocation();
+ result.success(null);
+ }
+
+ private void stopLocation(Result result) {
+ destroyLocationClient();
+ result.success(null);
+ }
+
+ private void dispose(Result result) {
+ try {
+ destroyLocationClient();
+ result.success(null);
+ } catch (Exception e) {
+ result.error("DISPOSE_ERROR", "资源释放失败", e.getMessage());
+ }
+ }
+
+ private void destroyLocationClient() {
+ if (mLocationClient != null) {
+ try {
+ // 停止定位
+ mLocationClient.stopLocation();
+ // 销毁定位客户端
+ mLocationClient.onDestroy();
+ mLocationClient = null;
+
+ // 关闭事件通道
+ if (eventSink != null) {
+ eventSink.endOfStream();
+ eventSink = null;
+ }
+ } catch (Exception e) {
+ Log.e("AmapFlutter", "销毁定位客户端失败", e);
+ }
+ }
+ }
+
+ AMapLocationListener mLocationListener = new AMapLocationListener() {
+ @Override
+ public void onLocationChanged(AMapLocation amapLocation) {
+ if (eventSink == null) return;
+
+ if (amapLocation != null) {
+ if (amapLocation.getErrorCode() == 0) {
+ Map locationData = new HashMap<>();
+ locationData.put("latitude", amapLocation.getLatitude());
+ locationData.put("longitude", amapLocation.getLongitude());
+ locationData.put("address", amapLocation.getAddress());
+ eventSink.success(locationData);
+ }
+ }
+ }
+ };
+
+ @Override
+ public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
+ methodChannel.setMethodCallHandler(null);
+ eventChannel.setStreamHandler(null);
+ destroyLocationClient();
+ }
+}
diff --git a/amap_flutter/ios/.gitignore b/amap_flutter/ios/.gitignore
new file mode 100644
index 000000000..034771fc9
--- /dev/null
+++ b/amap_flutter/ios/.gitignore
@@ -0,0 +1,38 @@
+.idea/
+.vagrant/
+.sconsign.dblite
+.svn/
+
+.DS_Store
+*.swp
+profile
+
+DerivedData/
+build/
+GeneratedPluginRegistrant.h
+GeneratedPluginRegistrant.m
+
+.generated/
+
+*.pbxuser
+*.mode1v3
+*.mode2v3
+*.perspectivev3
+
+!default.pbxuser
+!default.mode1v3
+!default.mode2v3
+!default.perspectivev3
+
+xcuserdata
+
+*.moved-aside
+
+*.pyc
+*sync/
+Icon?
+.tags*
+
+/Flutter/Generated.xcconfig
+/Flutter/ephemeral/
+/Flutter/flutter_export_environment.sh
diff --git a/amap_flutter/ios/Assets/.gitkeep b/amap_flutter/ios/Assets/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/amap_flutter/ios/Classes/AmapFlutterPlugin.swift b/amap_flutter/ios/Classes/AmapFlutterPlugin.swift
new file mode 100644
index 000000000..b88657f78
--- /dev/null
+++ b/amap_flutter/ios/Classes/AmapFlutterPlugin.swift
@@ -0,0 +1,19 @@
+import Flutter
+import UIKit
+
+public class AmapFlutterPlugin: NSObject, FlutterPlugin {
+ public static func register(with registrar: FlutterPluginRegistrar) {
+ let channel = FlutterMethodChannel(name: "amap_flutter", binaryMessenger: registrar.messenger())
+ let instance = AmapFlutterPlugin()
+ registrar.addMethodCallDelegate(instance, channel: channel)
+ }
+
+ public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
+ switch call.method {
+ case "getPlatformVersion":
+ result("iOS " + UIDevice.current.systemVersion)
+ default:
+ result(FlutterMethodNotImplemented)
+ }
+ }
+}
diff --git a/amap_flutter/ios/Resources/PrivacyInfo.xcprivacy b/amap_flutter/ios/Resources/PrivacyInfo.xcprivacy
new file mode 100644
index 000000000..a34b7e2e6
--- /dev/null
+++ b/amap_flutter/ios/Resources/PrivacyInfo.xcprivacy
@@ -0,0 +1,14 @@
+
+
+
+
+ NSPrivacyTrackingDomains
+
+ NSPrivacyAccessedAPITypes
+
+ NSPrivacyCollectedDataTypes
+
+ NSPrivacyTracking
+
+
+
diff --git a/amap_flutter/ios/amap_flutter.podspec b/amap_flutter/ios/amap_flutter.podspec
new file mode 100644
index 000000000..f9ef9f715
--- /dev/null
+++ b/amap_flutter/ios/amap_flutter.podspec
@@ -0,0 +1,29 @@
+#
+# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html.
+# Run `pod lib lint amap_flutter.podspec` to validate before publishing.
+#
+Pod::Spec.new do |s|
+ s.name = 'amap_flutter'
+ s.version = '0.0.1'
+ s.summary = 'A new Flutter project.'
+ s.description = <<-DESC
+A new Flutter project.
+ DESC
+ s.homepage = 'http://example.com'
+ s.license = { :file => '../LICENSE' }
+ s.author = { 'Your Company' => 'email@example.com' }
+ s.source = { :path => '.' }
+ s.source_files = 'Classes/**/*'
+ s.dependency 'Flutter'
+ s.platform = :ios, '12.0'
+
+ # Flutter.framework does not contain a i386 slice.
+ s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
+ s.swift_version = '5.0'
+
+ # If your plugin requires a privacy manifest, for example if it uses any
+ # required reason APIs, update the PrivacyInfo.xcprivacy file to describe your
+ # plugin's privacy impact, and then uncomment this line. For more information,
+ # see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files
+ # s.resource_bundles = {'amap_flutter_privacy' => ['Resources/PrivacyInfo.xcprivacy']}
+end
diff --git a/amap_flutter/lib/amap_flutter.dart b/amap_flutter/lib/amap_flutter.dart
new file mode 100644
index 000000000..6e4c0645c
--- /dev/null
+++ b/amap_flutter/lib/amap_flutter.dart
@@ -0,0 +1,36 @@
+import 'amap_flutter_platform_interface.dart';
+
+class AmapFlutter {
+ // 初始化SDK
+ Future initSdk({String? iosKey, String? androidKey}) async {
+ await AmapFlutterPlatform.instance.setApiKey(
+ iosKey: iosKey,
+ androidKey: androidKey,
+ );
+ }
+
+ // 定位初始化
+ Future initLocation() async {
+ return AmapFlutterPlatform.instance.initLocation();
+ }
+
+ // 开始定位
+ Future startLocation() async {
+ return AmapFlutterPlatform.instance.startLocation();
+ }
+
+ // 监听定位返回位置
+ Stream locationStream() {
+ return AmapFlutterPlatform.instance.locationStream();
+ }
+
+ // 停止定位
+ Future stopLocation() async {
+ await AmapFlutterPlatform.instance.stopLocation();
+ }
+
+ // 销毁
+ Future dispose() async {
+ await AmapFlutterPlatform.instance.dispose();
+ }
+}
diff --git a/amap_flutter/lib/amap_flutter_method_channel.dart b/amap_flutter/lib/amap_flutter_method_channel.dart
new file mode 100644
index 000000000..470a9a322
--- /dev/null
+++ b/amap_flutter/lib/amap_flutter_method_channel.dart
@@ -0,0 +1,45 @@
+import 'package:flutter/foundation.dart';
+import 'package:flutter/services.dart';
+
+import 'amap_flutter_platform_interface.dart';
+
+/// An implementation of [AmapFlutterPlatform] that uses method channels.
+class MethodChannelAmapFlutter extends AmapFlutterPlatform {
+ /// The method channel used to interact with the native platform.
+ @visibleForTesting
+ final methodChannel = const MethodChannel('amap_flutter');
+ final eventChannel = const EventChannel('amap_flutter/events');
+
+ @override
+ Future setApiKey({String? iosKey, String? androidKey}) async {
+ await methodChannel.invokeMethod('setApiKey', {
+ "iosKey": iosKey,
+ "androidKey": androidKey,
+ });
+ }
+
+ @override
+ Future initLocation() async {
+ return await methodChannel.invokeMethod('initLocation');
+ }
+
+ @override
+ Future startLocation() async {
+ return await methodChannel.invokeMethod('startLocation');
+ }
+
+ @override
+ Stream locationStream() {
+ return eventChannel.receiveBroadcastStream();
+ }
+
+ @override
+ Future stopLocation() async {
+ await methodChannel.invokeMethod('stopLocation');
+ }
+
+ @override
+ Future dispose() async {
+ await methodChannel.invokeMethod('dispose');
+ }
+}
diff --git a/amap_flutter/lib/amap_flutter_platform_interface.dart b/amap_flutter/lib/amap_flutter_platform_interface.dart
new file mode 100644
index 000000000..dd1c168c1
--- /dev/null
+++ b/amap_flutter/lib/amap_flutter_platform_interface.dart
@@ -0,0 +1,49 @@
+import 'package:plugin_platform_interface/plugin_platform_interface.dart';
+
+import 'amap_flutter_method_channel.dart';
+
+abstract class AmapFlutterPlatform extends PlatformInterface {
+ /// Constructs a AmapFlutterPlatform.
+ AmapFlutterPlatform() : super(token: _token);
+
+ static final Object _token = Object();
+
+ static AmapFlutterPlatform _instance = MethodChannelAmapFlutter();
+
+ /// The default instance of [AmapFlutterPlatform] to use.
+ ///
+ /// Defaults to [MethodChannelAmapFlutter].
+ static AmapFlutterPlatform get instance => _instance;
+
+ /// Platform-specific implementations should set this with their own
+ /// platform-specific class that extends [AmapFlutterPlatform] when
+ /// they register themselves.
+ static set instance(AmapFlutterPlatform instance) {
+ PlatformInterface.verifyToken(instance, _token);
+ _instance = instance;
+ }
+
+ Future setApiKey({String? iosKey, String? androidKey}) {
+ throw UnimplementedError('init() has not been implemented.');
+ }
+
+ Future initLocation() {
+ throw UnimplementedError('initLocation() has not been implemented.');
+ }
+
+ Future startLocation() {
+ throw UnimplementedError('startLocation() has not been implemented.');
+ }
+
+ Stream locationStream() {
+ throw UnimplementedError('locationStream() has not been implemented.');
+ }
+
+ Future stopLocation() {
+ throw UnimplementedError('stopLocation() has not been implemented.');
+ }
+
+ Future dispose() {
+ throw UnimplementedError('dispose() has not been implemented.');
+ }
+}
diff --git a/amap_flutter/pubspec.yaml b/amap_flutter/pubspec.yaml
new file mode 100644
index 000000000..b67a2bea6
--- /dev/null
+++ b/amap_flutter/pubspec.yaml
@@ -0,0 +1,72 @@
+name: amap_flutter
+description: "A new Flutter project."
+version: 0.0.1
+homepage:
+
+environment:
+ sdk: ^3.7.0
+ flutter: '>=3.3.0'
+
+dependencies:
+ flutter:
+ sdk: flutter
+ plugin_platform_interface: ^2.0.2
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+ flutter_lints: ^5.0.0
+
+# For information on the generic Dart part of this file, see the
+# following page: https://dart.dev/tools/pub/pubspec
+
+# The following section is specific to Flutter packages.
+flutter:
+ # This section identifies this Flutter project as a plugin project.
+ # The 'pluginClass' specifies the class (in Java, Kotlin, Swift, Objective-C, etc.)
+ # which should be registered in the plugin registry. This is required for
+ # using method channels.
+ # The Android 'package' specifies package in which the registered class is.
+ # This is required for using method channels on Android.
+ # The 'ffiPlugin' specifies that native code should be built and bundled.
+ # This is required for using `dart:ffi`.
+ # All these are used by the tooling to maintain consistency when
+ # adding or updating assets for this project.
+ plugin:
+ platforms:
+ android:
+ package: com.example.amap_flutter
+ pluginClass: AmapFlutterPlugin
+ ios:
+ pluginClass: AmapFlutterPlugin
+
+ # To add assets to your plugin package, add an assets section, like this:
+ # assets:
+ # - images/a_dot_burr.jpeg
+ # - images/a_dot_ham.jpeg
+ #
+ # For details regarding assets in packages, see
+ # https://flutter.dev/to/asset-from-package
+ #
+ # An image asset can refer to one or more resolution-specific "variants", see
+ # https://flutter.dev/to/resolution-aware-images
+
+ # To add custom fonts to your plugin package, add a fonts section here,
+ # in this "flutter" section. Each entry in this list should have a
+ # "family" key with the font family name, and a "fonts" key with a
+ # list giving the asset and other descriptors for the font. For
+ # example:
+ # fonts:
+ # - family: Schyler
+ # fonts:
+ # - asset: fonts/Schyler-Regular.ttf
+ # - asset: fonts/Schyler-Italic.ttf
+ # style: italic
+ # - family: Trajan Pro
+ # fonts:
+ # - asset: fonts/TrajanPro.ttf
+ # - asset: fonts/TrajanPro_Bold.ttf
+ # weight: 700
+ #
+ # For details regarding fonts in packages, see
+ # https://flutter.dev/to/font-from-package
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index f120cc1f7..bfcb323d3 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -38,7 +38,7 @@
android:enableOnBackInvokedCallback="true"
tools:replace="android:label">
-
+
@@ -90,6 +90,12 @@
+
+
+
+