amap_location_fluttify
This commit is contained in:
commit
3ccab2c601
|
@ -0,0 +1,43 @@
|
|||
# Miscellaneous
|
||||
*.class
|
||||
*.log
|
||||
*.pyc
|
||||
*.swp
|
||||
.DS_Store
|
||||
.atom/
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
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
|
||||
**/doc/api/
|
||||
**/ios/Flutter/.last_build_id
|
||||
.dart_tool/
|
||||
.flutter-plugins
|
||||
.flutter-plugins-dependencies
|
||||
.pub-cache/
|
||||
.pub/
|
||||
/build/
|
||||
|
||||
# Symbolication related
|
||||
app.*.symbols
|
||||
|
||||
# Obfuscation related
|
||||
app.*.map.json
|
||||
|
||||
# Android Studio will place build artifacts here
|
||||
/android/app/debug
|
||||
/android/app/profile
|
||||
/android/app/release
|
|
@ -0,0 +1,128 @@
|
|||
## 0.13.2
|
||||
- fix: regecode空安全
|
||||
- enhance: 添加监听定位的最小更新距离.
|
||||
|
||||
## 0.13.1
|
||||
- enhance: 简化导出
|
||||
|
||||
## 0.13.0
|
||||
- enhance: 提升依赖
|
||||
|
||||
## 0.12.0
|
||||
- enhance: 更新底层依赖
|
||||
- fix: android超时时间单位为毫秒
|
||||
|
||||
## 0.11.0
|
||||
- enhance: [breaking change] timeout类型换为更直观的Duration类
|
||||
- enhance: Location类增加speed字段 [#48]
|
||||
|
||||
## 0.10.0
|
||||
- enhance: 更新底层依赖
|
||||
|
||||
## 0.9.0
|
||||
- enhance: [breaking change] 使用原始值代替Future返回, 简化使用
|
||||
- roll engine #939e12d7
|
||||
|
||||
## 0.8.11
|
||||
- roll engine #481e45c1
|
||||
|
||||
## 0.8.10
|
||||
- roll engine #dbad1c35 (#53)
|
||||
- fix: 直接调用stopLocation时, 对client的空判断
|
||||
|
||||
## 0.8.9
|
||||
- roll engine #0a5ab5f (#39)
|
||||
|
||||
## 0.8.8
|
||||
- roll engine #b356b08
|
||||
|
||||
## 0.8.7
|
||||
- roll engine #1053dca
|
||||
|
||||
## 0.8.6
|
||||
- 提升依赖
|
||||
|
||||
## 0.8.5
|
||||
- docs: apk下载链接修正
|
||||
- docs: 去重重复的信息
|
||||
|
||||
## 0.8.4
|
||||
- enhance: 加入打包的key
|
||||
- docs: README加入apk下载二维码
|
||||
- roll engine #107df19
|
||||
|
||||
## 0.8.3
|
||||
- roll engine #4d92ce0. 主要解决type_op冲突的问题.
|
||||
|
||||
## 0.8.2
|
||||
- roll engine #5c1b957
|
||||
|
||||
## 0.8.1
|
||||
- feat: Location增加accuracy字段 (#38)
|
||||
|
||||
## 0.8.0
|
||||
- enhance: 提升依赖
|
||||
- roll engine #ea37ae9
|
||||
|
||||
## 0.7.0
|
||||
- 提升依赖
|
||||
|
||||
## 0.6.0
|
||||
- 提升依赖
|
||||
|
||||
## 0.5.1
|
||||
- enhance: 增加bearing(设备移动方向属性), 此属性需要较长时间时间才能获取到数据, 建议在连续定位中使用.
|
||||
- enhance: 提供仅在android端有效的DeviceSensor枚举
|
||||
|
||||
## 0.5.0
|
||||
- enhance: 导出amap_core_fluttify
|
||||
- roll engine #a918944
|
||||
- 适配flutter 1.12.13
|
||||
|
||||
## 0.4.2
|
||||
- fix: 连续定位空指针异常
|
||||
|
||||
## 0.4.1
|
||||
- fix: 单次定位防止重复订阅
|
||||
|
||||
## 0.4.0
|
||||
- enhance: [breaking change] 单次和连续定位单独实现,并返回Future和Stream
|
||||
|
||||
## 0.3.2
|
||||
- 解决依赖冲突
|
||||
|
||||
## 0.3.1
|
||||
- 更新依赖
|
||||
|
||||
## 0.3.0
|
||||
- 更新底层
|
||||
|
||||
## 0.2.7
|
||||
- doc: 增加`await`的说明
|
||||
- feat: 增加ios端requireAlwaysAuth的处理
|
||||
|
||||
## 0.2.6
|
||||
- fix: dispose时,置空_androidClient和_iosClient,防止在页面级别的State中释放了client之后,重新定位时,client不为空而没有去重新创建原生client导致的原生client为空。
|
||||
|
||||
## 0.2.5
|
||||
- enhancement: 经纬度统一使用LatLng
|
||||
- enhancement: 调整设置回调的位置
|
||||
|
||||
## 0.2.4
|
||||
- fix: 导出enums.dart; 删除utils.g.dart
|
||||
|
||||
## 0.2.3
|
||||
- fix: 高德的key不应该放在library模块里
|
||||
|
||||
## 0.2.2
|
||||
- fix: 释放原生对象时, 只释放当前插件创建的对象
|
||||
|
||||
## 0.2.1
|
||||
- 更新README
|
||||
- 更新引擎版本 38df15a
|
||||
|
||||
## 0.2.0
|
||||
- setLocationListener -> startLocation
|
||||
|
||||
## 0.1.0
|
||||
- 单次定位; 连续定位
|
|
@ -0,0 +1,13 @@
|
|||
Copyright 2020 yohom
|
||||
|
||||
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.
|
|
@ -0,0 +1,56 @@
|
|||
![Logo](https://github.com/fluttify-project/fluttify-core-example/blob/develop/other/Logo-Landscape.png?raw=true)
|
||||
|
||||
# 高德 `定位`组件
|
||||
|
||||
[![pub package](https://img.shields.io/pub/v/amap_location_fluttify.svg)](https://pub.Flutter-io.cn/packages/amap_location_fluttify)
|
||||
|
||||
Dart接口基于[fluttify](https://github.com/yohom/fluttify-core-example)引擎生成. dartdoc[接口文档](https://pub.flutter-io.cn/documentation/amap_location_fluttify/latest/).
|
||||
|
||||
## DEMO 与 社区
|
||||
|
||||
安装:
|
||||
```yaml
|
||||
dependencies:
|
||||
flutter:
|
||||
sdk: flutter
|
||||
amap_location_fluttify: ^x.x.x
|
||||
```
|
||||
|
||||
导入:
|
||||
```dart
|
||||
import 'package:amap_location_fluttify/amap_location_fluttify.dart';
|
||||
```
|
||||
|
||||
使用:
|
||||
```dart
|
||||
/// !注意: 只要是返回Future的方法, 一律使用`await`修饰, 确保当前方法执行完成后再执行下一行, 在不能使用`await`修饰的环境下, 在`then`方法中执行下一步.
|
||||
/// 初始化 iOS在init方法中设置, android需要去AndroidManifest.xml里去设置, 详见 https://lbs.amap.com/api/android-sdk/gettingstarted
|
||||
await AmapCore.init('ios key');
|
||||
|
||||
// 单次定位
|
||||
if (await requestPermission()) {
|
||||
final location = await AmapLocation.fetchLocation();
|
||||
setState(() => _location = location);
|
||||
}
|
||||
|
||||
// 连续定位
|
||||
if (await requestPermission()) {
|
||||
AmapLocation.listenLocation()
|
||||
.listen((location) => setState(() => _location = location));
|
||||
}
|
||||
```
|
||||
|
||||
## LICENSE
|
||||
> Copyright 2020 yohom
|
||||
>
|
||||
> 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.
|
|
@ -0,0 +1,9 @@
|
|||
include: package:pedantic/analysis_options.yaml
|
||||
|
||||
linter:
|
||||
rules:
|
||||
camel_case_types: false
|
||||
camel_case_extensions: false
|
||||
omit_local_variable_types: false
|
||||
prefer_single_quotes: false
|
||||
unnecessary_this: false
|
|
@ -0,0 +1,70 @@
|
|||
group 'me.yohom.amap_location_fluttify'
|
||||
version '1.0-SNAPSHOT'
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.1.2'
|
||||
}
|
||||
}
|
||||
|
||||
rootProject.allprojects {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'com.android.library'
|
||||
|
||||
android {
|
||||
if (project.android.hasProperty("namespace")) {
|
||||
namespace = "me.yohom.amap_location_fluttify"
|
||||
}
|
||||
compileSdkVersion 31
|
||||
|
||||
sourceSets {
|
||||
main.java.srcDirs += 'src/main/kotlin'
|
||||
main.jniLibs.srcDir 'libs'
|
||||
}
|
||||
defaultConfig {
|
||||
minSdkVersion 16
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
lintOptions {
|
||||
disable 'InvalidPackage'
|
||||
}
|
||||
compileOptions {
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
packagingOptions {
|
||||
merge 'res/values/values.xml'
|
||||
merge 'AndroidManifest.xml'
|
||||
merge 'R.txt'
|
||||
merge 'classes.jar'
|
||||
merge 'proguard.txt'
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
consumerProguardFiles "proguard-rules.pro"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
|
||||
implementation 'androidx.annotation:annotation:1.1.0'
|
||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
||||
compileOnly rootProject.findProject(":foundation_fluttify")
|
||||
// flutter plugin dependency
|
||||
|
||||
// sdk dependency
|
||||
api 'com.amap.api:location:6.1.0'
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
rootProject.name = 'amap_location_fluttify'
|
|
@ -0,0 +1,29 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="me.yohom.amap_location_fluttify">
|
||||
<!--用于进行网络定位-->
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||
<!--用于访问GPS定位-->
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||
<!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
|
||||
<!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
|
||||
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
|
||||
<!--用于访问网络,网络定位需要上网-->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<!--用于读取手机当前的状态-->
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
|
||||
<!--用于写入缓存数据到扩展存储卡-->
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<!--用于申请调用A-GPS模块-->
|
||||
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
|
||||
<!--用于申请获取蓝牙信息进行室内定位-->
|
||||
<uses-permission android:name="android.permission.BLUETOOTH"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
|
||||
|
||||
<application>
|
||||
<service android:name="com.amap.api.location.APSService"/>
|
||||
</application>
|
||||
|
||||
</manifest>
|
|
@ -0,0 +1,154 @@
|
|||
//////////////////////////////////////////////////////////
|
||||
// GENERATED BY FLUTTIFY. DO NOT EDIT IT.
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
package me.yohom.amap_location_fluttify;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.app.Activity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
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;
|
||||
import io.flutter.plugin.common.PluginRegistry.Registrar;
|
||||
import io.flutter.plugin.common.StandardMethodCodec;
|
||||
import io.flutter.plugin.platform.PlatformViewRegistry;
|
||||
|
||||
import me.yohom.amap_location_fluttify.sub_handler.*;
|
||||
import me.yohom.amap_location_fluttify.sub_handler.custom.SubHandlerCustom;
|
||||
import me.yohom.foundation_fluttify.core.FluttifyMessageCodec;
|
||||
|
||||
import static me.yohom.foundation_fluttify.FoundationFluttifyPluginKt.getEnableLog;
|
||||
import static me.yohom.foundation_fluttify.FoundationFluttifyPluginKt.getHEAP;
|
||||
|
||||
@SuppressWarnings("ALL")
|
||||
public class AmapLocationFluttifyPlugin implements FlutterPlugin, MethodChannel.MethodCallHandler, ActivityAware {
|
||||
|
||||
private static List<Map<String, Handler>> handlerMapList;
|
||||
|
||||
// v1 android embedding for compatible
|
||||
public static void registerWith(Registrar registrar) {
|
||||
final MethodChannel channel = new MethodChannel(registrar.messenger(), "me.yohom/amap_location_fluttify", new StandardMethodCodec(new FluttifyMessageCodec()));
|
||||
|
||||
AmapLocationFluttifyPlugin plugin = new AmapLocationFluttifyPlugin();
|
||||
|
||||
BinaryMessenger messenger = registrar.messenger();
|
||||
PlatformViewRegistry platformViewRegistry = registrar.platformViewRegistry();
|
||||
Activity activity = registrar.activity();
|
||||
|
||||
plugin.messenger = messenger;
|
||||
plugin.platformViewRegistry = platformViewRegistry;
|
||||
|
||||
handlerMapList = new ArrayList<>();
|
||||
handlerMapList.add(SubHandler0.getSubHandler(messenger));
|
||||
handlerMapList.add(SubHandler1.getSubHandler(messenger));
|
||||
handlerMapList.add(SubHandler2.getSubHandler(messenger));
|
||||
handlerMapList.add(SubHandlerCustom.instance.getSubHandler(messenger, registrar.activity()));
|
||||
|
||||
channel.setMethodCallHandler(plugin);
|
||||
|
||||
// register platform view
|
||||
|
||||
}
|
||||
|
||||
private BinaryMessenger messenger;
|
||||
private PlatformViewRegistry platformViewRegistry;
|
||||
|
||||
// v2 android embedding
|
||||
@Override
|
||||
public void onAttachedToEngine(FlutterPluginBinding binding) {
|
||||
if (getEnableLog()) {
|
||||
Log.d("fluttify-java", "AmapLocationFluttifyPlugin::onAttachedToEngine@" + binding);
|
||||
}
|
||||
|
||||
final MethodChannel channel = new MethodChannel(binding.getBinaryMessenger(), "me.yohom/amap_location_fluttify", new StandardMethodCodec(new FluttifyMessageCodec()));
|
||||
|
||||
messenger = binding.getBinaryMessenger();
|
||||
platformViewRegistry = binding.getPlatformViewRegistry();
|
||||
|
||||
handlerMapList = new ArrayList<>();
|
||||
handlerMapList.add(SubHandler0.getSubHandler(messenger));
|
||||
handlerMapList.add(SubHandler1.getSubHandler(messenger));
|
||||
handlerMapList.add(SubHandler2.getSubHandler(messenger));
|
||||
|
||||
channel.setMethodCallHandler(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetachedFromEngine(FlutterPluginBinding binding) {
|
||||
if (getEnableLog()) {
|
||||
Log.d("fluttify-java", "AmapLocationFluttifyPlugin::onDetachedFromEngine@" + binding);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttachedToActivity(ActivityPluginBinding binding) {
|
||||
if (getEnableLog()) {
|
||||
Log.d("fluttify-java", "AmapLocationFluttifyPlugin::onAttachedToActivity@" + binding);
|
||||
}
|
||||
Activity activity = binding.getActivity();
|
||||
|
||||
handlerMapList.add(SubHandlerCustom.instance.getSubHandler(messenger, activity));
|
||||
|
||||
// register platform view
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetachedFromActivity() {
|
||||
if (getEnableLog()) {
|
||||
Log.d("fluttify-java", "AmapLocationFluttifyPlugin::onDetachedFromActivity");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReattachedToActivityForConfigChanges(ActivityPluginBinding binding) {
|
||||
if (getEnableLog()) {
|
||||
Log.d("fluttify-java", "AmapLocationFluttifyPlugin::onReattachedToActivityForConfigChanges@" + binding);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetachedFromActivityForConfigChanges() {
|
||||
if (getEnableLog()) {
|
||||
Log.d("fluttify-java", "AmapLocationFluttifyPlugin::onDetachedFromActivityForConfigChanges");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMethodCall(@NonNull MethodCall methodCall, @NonNull MethodChannel.Result methodResult) {
|
||||
Handler handler = null;
|
||||
for (Map<String, Handler> handlerMap : handlerMapList) {
|
||||
if (handlerMap.containsKey(methodCall.method)) {
|
||||
handler = handlerMap.get(methodCall.method);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (handler != null) {
|
||||
try {
|
||||
handler.call(methodCall.arguments, methodResult);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
methodResult.error(e.getMessage(), null, null);
|
||||
}
|
||||
} else {
|
||||
methodResult.notImplemented();
|
||||
}
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
public static interface Handler {
|
||||
void call(Object args, MethodChannel.Result methodResult) throws Exception;
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,192 @@
|
|||
//////////////////////////////////////////////////////////
|
||||
// GENERATED BY FLUTTIFY. DO NOT EDIT IT.
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
package me.yohom.amap_location_fluttify.sub_handler.custom;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
||||
import com.amap.api.fence.GeoFence;
|
||||
import com.amap.api.fence.GeoFenceClient;
|
||||
import com.amap.api.location.DPoint;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import io.flutter.plugin.common.BinaryMessenger;
|
||||
import io.flutter.plugin.common.MethodChannel;
|
||||
import io.flutter.plugin.common.StandardMethodCodec;
|
||||
import me.yohom.amap_location_fluttify.AmapLocationFluttifyPlugin.Handler;
|
||||
import me.yohom.foundation_fluttify.core.FluttifyMessageCodec;
|
||||
|
||||
import static me.yohom.foundation_fluttify.FoundationFluttifyPluginKt.getEnableLog;
|
||||
import static me.yohom.foundation_fluttify.FoundationFluttifyPluginKt.getHEAP;
|
||||
|
||||
@SuppressWarnings("ALL")
|
||||
public class SubHandlerCustom {
|
||||
static final String GEOFENCE_BROADCAST_ACTION = "com.location.apis.geofencedemo.broadcast";
|
||||
|
||||
public static final SubHandlerCustom instance = new SubHandlerCustom();
|
||||
|
||||
private SubHandlerCustom() { }
|
||||
|
||||
public Map<String, Handler> getSubHandler(BinaryMessenger messenger, android.app.Activity activity) {
|
||||
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
|
||||
filter.addAction(GEOFENCE_BROADCAST_ACTION);
|
||||
|
||||
final BroadcastReceiver receiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (GEOFENCE_BROADCAST_ACTION.equals(intent.getAction())) {
|
||||
Bundle bundle = intent.getExtras();
|
||||
Log.d(GEOFENCE_BROADCAST_ACTION, "收到围栏消息: " + bundle); //获取Bundle
|
||||
//获取围栏行为:
|
||||
int status = bundle.getInt(GeoFence.BUNDLE_KEY_FENCESTATUS);
|
||||
//获取自定义的围栏标识:
|
||||
String customId = bundle.getString(GeoFence.BUNDLE_KEY_CUSTOMID);
|
||||
//获取围栏ID:
|
||||
String fenceId = bundle.getString(GeoFence.BUNDLE_KEY_FENCEID);
|
||||
//获取当前有触发的围栏对象:
|
||||
GeoFence fence = bundle.getParcelable(GeoFence.BUNDLE_KEY_FENCE);
|
||||
|
||||
Map<String, Object> arguments = new HashMap<>();
|
||||
arguments.put("status", status);
|
||||
arguments.put("customId", customId);
|
||||
arguments.put("fenceId", fenceId);
|
||||
arguments.put("fence", fence);
|
||||
|
||||
new MethodChannel(messenger, "com.amap.api.fence.GeoFenceClient::addGeoFenceX::Callback", new StandardMethodCodec(new FluttifyMessageCodec()))
|
||||
.invokeMethod("Callback::com.amap.api.fence.GeoFenceClient::addGeoFenceX", arguments);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
activity.registerReceiver(receiver, filter);
|
||||
|
||||
return new HashMap<String, Handler>() {{
|
||||
put("com.amap.api.fence.GeoFenceClient::addCircleGeoFenceX", (rawArgs, methodResult) -> {
|
||||
// args
|
||||
Map<String, Object> args = (Map<String, Object>) rawArgs;
|
||||
|
||||
GeoFenceClient __this__ = (GeoFenceClient) args.get("__this__");
|
||||
int activeAction = (int) args.get("activeAction");
|
||||
DPoint center = (DPoint) args.get("center");
|
||||
Double radius = (Double) args.get("radius");
|
||||
String customId = (String) args.get("customId");
|
||||
|
||||
// invoke native method
|
||||
try {
|
||||
__this__.setActivateAction(activeAction);
|
||||
__this__.createPendingIntent(GEOFENCE_BROADCAST_ACTION);
|
||||
__this__.addGeoFence(center, radius.floatValue(), customId);
|
||||
} catch (Throwable throwable) {
|
||||
throwable.printStackTrace();
|
||||
if (getEnableLog()) {
|
||||
Log.d("Current HEAP: ", getHEAP().toString());
|
||||
}
|
||||
methodResult.error(throwable.getMessage(), null, null);
|
||||
return;
|
||||
}
|
||||
|
||||
methodResult.success("success");
|
||||
});
|
||||
put("com.amap.api.fence.GeoFenceClient::addPoiGeoFenceX", (rawArgs, methodResult) -> {
|
||||
// args
|
||||
Map<String, Object> args = (Map<String, Object>) rawArgs;
|
||||
|
||||
GeoFenceClient __this__ = (GeoFenceClient) args.get("__this__");
|
||||
int activeAction = (int) args.get("activeAction");
|
||||
String keyword = (String) args.get("keyword");
|
||||
String poiType = (String) args.get("poiType");
|
||||
String city = (String) args.get("city");
|
||||
int size = (int) args.get("size");
|
||||
String customId = (String) args.get("customId");
|
||||
|
||||
// invoke native method
|
||||
try {
|
||||
__this__.setActivateAction(activeAction);
|
||||
__this__.createPendingIntent(GEOFENCE_BROADCAST_ACTION);
|
||||
__this__.addGeoFence(keyword, poiType, city, size, customId);
|
||||
} catch (Throwable throwable) {
|
||||
throwable.printStackTrace();
|
||||
if (getEnableLog()) {
|
||||
Log.d("Current HEAP: ", getHEAP().toString());
|
||||
}
|
||||
methodResult.error(throwable.getMessage(), null, null);
|
||||
return;
|
||||
}
|
||||
|
||||
methodResult.success("success");
|
||||
});
|
||||
put("com.amap.api.fence.GeoFenceClient::addPolygonGeoFenceX", (rawArgs, methodResult) -> {
|
||||
// args
|
||||
Map<String, Object> args = (Map<String, Object>) rawArgs;
|
||||
GeoFenceClient __this__ = (GeoFenceClient) args.get("__this__");
|
||||
int activeAction = (int) args.get("activeAction");
|
||||
|
||||
List<DPoint> polygon = (List<DPoint>) args.get("polygon");
|
||||
|
||||
String customId = (String) args.get("customId");
|
||||
|
||||
// invoke native method
|
||||
try {
|
||||
__this__.setActivateAction(activeAction);
|
||||
__this__.createPendingIntent(GEOFENCE_BROADCAST_ACTION);
|
||||
__this__.addGeoFence(polygon, customId);
|
||||
} catch (Throwable throwable) {
|
||||
throwable.printStackTrace();
|
||||
if (getEnableLog()) {
|
||||
Log.d("Current HEAP: ", getHEAP().toString());
|
||||
}
|
||||
methodResult.error(throwable.getMessage(), null, null);
|
||||
return;
|
||||
}
|
||||
|
||||
methodResult.success("success");
|
||||
});
|
||||
put("com.amap.api.fence.GeoFenceClient::addDistrictGeoFenceX", (rawArgs, methodResult) -> {
|
||||
// args
|
||||
Map<String, Object> args = (Map<String, Object>) rawArgs;
|
||||
|
||||
GeoFenceClient __this__ = (GeoFenceClient) args.get("__this__");
|
||||
int activeAction = (int) args.get("activeAction");
|
||||
String keyword = (String) args.get("keyword");
|
||||
String customId = (String) args.get("customId");
|
||||
|
||||
// invoke native method
|
||||
try {
|
||||
__this__.setActivateAction(activeAction);
|
||||
__this__.createPendingIntent(GEOFENCE_BROADCAST_ACTION);
|
||||
|
||||
__this__.addGeoFence(keyword, customId);
|
||||
} catch (Throwable throwable) {
|
||||
throwable.printStackTrace();
|
||||
if (getEnableLog()) {
|
||||
Log.d("Current HEAP: ", getHEAP().toString());
|
||||
}
|
||||
methodResult.error(throwable.getMessage(), null, null);
|
||||
return;
|
||||
}
|
||||
|
||||
methodResult.success("success");
|
||||
});
|
||||
put("com.amap.api.fence.GeoFenceClient::unregisterBroadcastReceiver", (rawArgs, methodResult) -> {
|
||||
try {
|
||||
activity.unregisterReceiver(receiver);
|
||||
if (getEnableLog()) Log.d("GeoFenceClient", "取消注册围栏广播");
|
||||
methodResult.success("success");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
methodResult.error(e.getMessage(), e.getMessage(), e.getMessage());
|
||||
}
|
||||
});
|
||||
}};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
# Miscellaneous
|
||||
*.class
|
||||
*.log
|
||||
*.pyc
|
||||
*.swp
|
||||
.DS_Store
|
||||
.atom/
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
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
|
||||
**/doc/api/
|
||||
**/ios/Flutter/.last_build_id
|
||||
.dart_tool/
|
||||
.flutter-plugins
|
||||
.flutter-plugins-dependencies
|
||||
.pub-cache/
|
||||
.pub/
|
||||
/build/
|
||||
|
||||
# Symbolication related
|
||||
app.*.symbols
|
||||
|
||||
# Obfuscation related
|
||||
app.*.map.json
|
||||
|
||||
# Android Studio will place build artifacts here
|
||||
/android/app/debug
|
||||
/android/app/profile
|
||||
/android/app/release
|
|
@ -0,0 +1,29 @@
|
|||
# This file configures the analyzer, which statically analyzes Dart code to
|
||||
# check for errors, warnings, and lints.
|
||||
#
|
||||
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
|
||||
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
|
||||
# invoked from the command line by running `flutter analyze`.
|
||||
|
||||
# The following line activates a set of recommended lints for Flutter apps,
|
||||
# packages, and plugins designed to encourage good coding practices.
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
linter:
|
||||
# The lint rules applied to this project can be customized in the
|
||||
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
|
||||
# included above or to enable additional rules. A list of all available lints
|
||||
# and their documentation is published at
|
||||
# https://dart-lang.github.io/linter/lints/index.html.
|
||||
#
|
||||
# Instead of disabling a lint rule for the entire project in the
|
||||
# section below, it can also be suppressed for a single line of code
|
||||
# or a specific dart file by using the `// ignore: name_of_lint` and
|
||||
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
|
||||
# producing the lint.
|
||||
rules:
|
||||
# avoid_print: false # Uncomment to disable the `avoid_print` rule
|
||||
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
|
||||
|
||||
# Additional information about this file can be found at
|
||||
# https://dart.dev/guides/language/analysis-options
|
|
@ -0,0 +1,2 @@
|
|||
#Sat Nov 16 20:14:26 CST 2024
|
||||
gradle.version=7.4
|
|
@ -0,0 +1,66 @@
|
|||
def localProperties = new Properties()
|
||||
def localPropertiesFile = rootProject.file('local.properties')
|
||||
if (localPropertiesFile.exists()) {
|
||||
localPropertiesFile.withReader('UTF-8') { reader ->
|
||||
localProperties.load(reader)
|
||||
}
|
||||
}
|
||||
|
||||
def flutterRoot = localProperties.getProperty('flutter.sdk')
|
||||
if (flutterRoot == null) {
|
||||
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
|
||||
}
|
||||
|
||||
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
|
||||
if (flutterVersionCode == null) {
|
||||
flutterVersionCode = '1'
|
||||
}
|
||||
|
||||
def flutterVersionName = localProperties.getProperty('flutter.versionName')
|
||||
if (flutterVersionName == null) {
|
||||
flutterVersionName = '1.0'
|
||||
}
|
||||
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
|
||||
|
||||
android {
|
||||
compileSdkVersion flutter.compileSdkVersion
|
||||
ndkVersion flutter.ndkVersion
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
applicationId "me.yohom.amap_location_fluttify_example"
|
||||
minSdkVersion flutter.minSdkVersion
|
||||
targetSdkVersion flutter.targetSdkVersion
|
||||
versionCode flutterVersionCode.toInteger()
|
||||
versionName flutterVersionName
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
release {
|
||||
keyAlias 'amap_location_test'
|
||||
keyPassword 'amap_location_test'
|
||||
storeFile file('../amap_location_test.jks')
|
||||
storePassword 'amap_location_test'
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
debug {
|
||||
signingConfig signingConfigs.release
|
||||
}
|
||||
release {
|
||||
signingConfig signingConfigs.release
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
flutter {
|
||||
source '../..'
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
org.gradle.jvmargs=-Xmx1536M
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
|
@ -0,0 +1,6 @@
|
|||
#Fri Jun 23 08:50:38 CEST 2017
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
|
|
@ -0,0 +1,3 @@
|
|||
sdk.dir=C:\\Users\\Administrator\\AppData\\Local\\Android\\sdk
|
||||
flutter.sdk=D:\\futter\\flutter
|
||||
flutter.buildMode=debug
|
|
@ -0,0 +1,192 @@
|
|||
import 'package:amap_location_fluttify/amap_location_fluttify.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:permission_handler/permission_handler.dart';
|
||||
|
||||
void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
await AmapLocation.instance.updatePrivacyShow(true);
|
||||
await AmapLocation.instance.updatePrivacyAgree(true);
|
||||
await AmapLocation.instance.init(iosKey: 'f6422eadda731fb0d9ffb3260a5cf899');
|
||||
runApp(MyApp());
|
||||
}
|
||||
|
||||
class MyApp extends StatefulWidget {
|
||||
@override
|
||||
_MyAppState createState() => _MyAppState();
|
||||
}
|
||||
|
||||
class _MyAppState extends State<MyApp> {
|
||||
Location? _location;
|
||||
String? _fenceStatus;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
home: Scaffold(
|
||||
appBar: AppBar(title: const Text('Plugin example app')),
|
||||
body: Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
ElevatedButton(
|
||||
onPressed: () async {
|
||||
if (await requestPermission()) {
|
||||
final location =
|
||||
await AmapLocation.instance.fetchLocation();
|
||||
setState(() => _location = location);
|
||||
}
|
||||
},
|
||||
child: Text('获取单次定位'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () async {
|
||||
if (await requestPermission()) {
|
||||
await AmapLocation.instance.enableBackgroundLocation(
|
||||
10,
|
||||
BackgroundNotification(
|
||||
contentTitle: 'contentTitle',
|
||||
channelId: 'channelId',
|
||||
contentText: 'contentText',
|
||||
channelName: 'channelName',
|
||||
),
|
||||
);
|
||||
AmapLocation.instance
|
||||
.listenLocation()
|
||||
.listen((event) => setState(() => _location = event));
|
||||
}
|
||||
},
|
||||
child: Text('获取连续定位'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () async {
|
||||
if (await requestPermission()) {
|
||||
await AmapLocation.instance.stopLocation();
|
||||
setState(() => _location = null);
|
||||
}
|
||||
},
|
||||
child: Text('停止定位'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () async {
|
||||
if (await requestPermission()) {
|
||||
AmapLocation.instance
|
||||
.addCircleGeoFence(
|
||||
center: LatLng(29, 119),
|
||||
radius: 1000,
|
||||
customId: 'testid',
|
||||
)
|
||||
.listen((event) {
|
||||
setState(() {
|
||||
_fenceStatus =
|
||||
'状态: ${event.status}, 围栏id: ${event.fenceId}, 自定义id: ${event.customId}';
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
child: Text('添加圆形围栏'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () async {
|
||||
if (await requestPermission()) {
|
||||
AmapLocation.instance.addPolygonGeoFence(
|
||||
pointList: <LatLng>[
|
||||
LatLng(29.255201, 119.353437),
|
||||
LatLng(28.974455, 119.508619),
|
||||
LatLng(29.172496, 119.560804),
|
||||
LatLng(29.306707, 119.422101),
|
||||
],
|
||||
customId: 'testid',
|
||||
).listen((event) {
|
||||
setState(() {
|
||||
_fenceStatus =
|
||||
'状态: ${event.status}, 围栏id: ${event.fenceId}, 自定义id: ${event.customId}';
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
child: Text('添加多边形围栏'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () async {
|
||||
if (await requestPermission()) {
|
||||
AmapLocation.instance
|
||||
.addPoiGeoFence(
|
||||
keyword: '肯德基',
|
||||
customId: 'testid',
|
||||
city: '兰溪',
|
||||
aroundRadius: 10000,
|
||||
)
|
||||
.listen((event) {
|
||||
setState(() {
|
||||
_fenceStatus =
|
||||
'状态: ${event.status}, 围栏id: ${event.fenceId}, 自定义id: ${event.customId}';
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
child: Text('添加poi围栏'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () async {
|
||||
if (await requestPermission()) {
|
||||
AmapLocation.instance
|
||||
.addDistrictGeoFence(keyword: '兰溪')
|
||||
.listen((event) {
|
||||
setState(() {
|
||||
_fenceStatus =
|
||||
'状态: ${event.status}, 围栏id: ${event.fenceId}, 自定义id: ${event.customId}';
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
child: Text('添加行政区划围栏'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
AmapLocation.instance.dispose();
|
||||
},
|
||||
child: Text('释放资源'),
|
||||
),
|
||||
Expanded(
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
children: [
|
||||
if (_location != null)
|
||||
Center(
|
||||
child: Text(
|
||||
_location.toString(),
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
if (_fenceStatus != null)
|
||||
Center(
|
||||
child: Text(
|
||||
_fenceStatus.toString(),
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> requestPermission() async {
|
||||
final permissions = await Permission.locationWhenInUse.request();
|
||||
|
||||
if (permissions.isGranted) {
|
||||
return true;
|
||||
} else {
|
||||
debugPrint('需要定位权限!');
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,241 @@
|
|||
# Generated by pub
|
||||
# See https://dart.dev/tools/pub/glossary#lockfile
|
||||
packages:
|
||||
amap_core_fluttify:
|
||||
dependency: transitive
|
||||
description:
|
||||
path: "D:\\FlutterProjects\\amap_core_fluttify"
|
||||
relative: false
|
||||
source: path
|
||||
version: "0.17.0"
|
||||
amap_location_fluttify:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
path: ".."
|
||||
relative: true
|
||||
source: path
|
||||
version: "0.22.0"
|
||||
async:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: async
|
||||
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.11.0"
|
||||
boolean_selector:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: boolean_selector
|
||||
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.1"
|
||||
characters:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: characters
|
||||
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.0"
|
||||
clock:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: clock
|
||||
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.1"
|
||||
collection:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: collection
|
||||
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.18.0"
|
||||
core_location_fluttify:
|
||||
dependency: transitive
|
||||
description:
|
||||
path: "D:\\FlutterProjects\\core_location_fluttify"
|
||||
relative: false
|
||||
source: path
|
||||
version: "0.7.1"
|
||||
fake_async:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: fake_async
|
||||
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.1"
|
||||
flutter:
|
||||
dependency: "direct main"
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
flutter_test:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
foundation_fluttify:
|
||||
dependency: transitive
|
||||
description:
|
||||
path: "D:\\FlutterProjects\\foundation_fluttify"
|
||||
relative: false
|
||||
source: path
|
||||
version: "0.13.0+1"
|
||||
leak_tracker:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker
|
||||
sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "10.0.5"
|
||||
leak_tracker_flutter_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker_flutter_testing
|
||||
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.5"
|
||||
leak_tracker_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker_testing
|
||||
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
matcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: matcher
|
||||
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.12.16+1"
|
||||
material_color_utilities:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: material_color_utilities
|
||||
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.11.1"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.15.0"
|
||||
path:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path
|
||||
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.9.0"
|
||||
permission_handler:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: permission_handler
|
||||
sha256: e968207ce71d8b40d719aeca3e5a8b684494ecbe9a577dd67cc701216bcccf0a
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.2.0"
|
||||
permission_handler_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: permission_handler_platform_interface
|
||||
sha256: "6760eb5ef34589224771010805bea6054ad28453906936f843a8cc4d3a55c4a4"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.12.0"
|
||||
plugin_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: plugin_platform_interface
|
||||
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.8"
|
||||
sky_engine:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.99"
|
||||
source_span:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: source_span
|
||||
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.10.0"
|
||||
stack_trace:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stack_trace
|
||||
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.11.1"
|
||||
stream_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stream_channel
|
||||
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.2"
|
||||
string_scanner:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: string_scanner
|
||||
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
term_glyph:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: term_glyph
|
||||
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.1"
|
||||
test_api:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.2"
|
||||
vector_math:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vector_math
|
||||
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.4"
|
||||
vm_service:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vm_service
|
||||
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "14.2.5"
|
||||
sdks:
|
||||
dart: ">=3.5.3 <4.0.0"
|
||||
flutter: ">=3.18.0-18.0.pre.54"
|
|
@ -0,0 +1,26 @@
|
|||
name: amap_location_fluttify_example
|
||||
description: Demonstrates how to use the amap_location_fluttify plugin.
|
||||
publish_to: 'none'
|
||||
|
||||
environment:
|
||||
sdk: ">=2.12.0 <3.0.0"
|
||||
|
||||
dependencies:
|
||||
flutter:
|
||||
sdk: flutter
|
||||
permission_handler: ^7.1.0
|
||||
|
||||
#dependency_overrides:
|
||||
# foundation_fluttify:
|
||||
# path: /Users/yohom/Github/Me/All/fluttify/fluttify_infra/foundation_fluttify
|
||||
# core_location_fluttify:
|
||||
# path: /Users/yohom/Github/Me/All/fluttify/fluttify_infra/core_location_fluttify
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
amap_location_fluttify:
|
||||
path: ../
|
||||
|
||||
flutter:
|
||||
uses-material-design: true
|
|
@ -0,0 +1,15 @@
|
|||
//////////////////////////////////////////////////////////
|
||||
// GENERATED BY FLUTTIFY. DO NOT EDIT IT.
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
#import <Flutter/Flutter.h>
|
||||
|
||||
typedef void (^Handler)(NSObject <FlutterPluginRegistrar> *, id, FlutterResult);
|
||||
|
||||
@interface AmapLocationFluttifyPlugin : NSObject<FlutterPlugin>
|
||||
|
||||
- (instancetype) initWithFlutterPluginRegistrar: (NSObject <FlutterPluginRegistrar> *) registrar;
|
||||
|
||||
@property(nonatomic) NSObject<FlutterPluginRegistrar>* registrar;
|
||||
|
||||
@end
|
|
@ -0,0 +1,61 @@
|
|||
//////////////////////////////////////////////////////////
|
||||
// GENERATED BY FLUTTIFY. DO NOT EDIT IT.
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
#import "AmapLocationFluttifyPlugin.h"
|
||||
#import <objc/runtime.h>
|
||||
#import "SubHandler/SubHandler0.h"
|
||||
#import "SubHandler/SubHandler1.h"
|
||||
#import "SubHandler/Custom/SubHandlerCustom.h"
|
||||
#import "FluttifyMessageCodec.h"
|
||||
#import <AMapLocationKit/AMapLocationKit.h>
|
||||
|
||||
// Dart端一次方法调用所存在的栈, 只有当MethodChannel传递参数受限时, 再启用这个容器
|
||||
extern NSMutableDictionary<NSString*, NSObject*>* STACK;
|
||||
// Dart端随机存取对象的容器
|
||||
extern NSMutableDictionary<NSString*, NSObject*>* HEAP;
|
||||
// 日志打印开关
|
||||
extern BOOL enableLog;
|
||||
|
||||
@implementation AmapLocationFluttifyPlugin {
|
||||
NSMutableDictionary<NSString*, Handler>* _handlerMap;
|
||||
}
|
||||
|
||||
- (instancetype) initWithFlutterPluginRegistrar: (NSObject <FlutterPluginRegistrar> *) registrar {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_registrar = registrar;
|
||||
// 处理方法们
|
||||
_handlerMap = @{}.mutableCopy;
|
||||
|
||||
[_handlerMap addEntriesFromDictionary: [self getSubHandler0]];
|
||||
[_handlerMap addEntriesFromDictionary: [self getSubHandler1]];
|
||||
[_handlerMap addEntriesFromDictionary: [self getSubHandlerCustom]];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
+ (void)registerWithRegistrar:(NSObject <FlutterPluginRegistrar> *)registrar {
|
||||
FlutterMethodChannel *channel = [FlutterMethodChannel
|
||||
methodChannelWithName:@"me.yohom/amap_location_fluttify"
|
||||
binaryMessenger:[registrar messenger]
|
||||
codec:[FlutterStandardMethodCodec codecWithReaderWriter:[[FluttifyReaderWriter alloc] init]]];
|
||||
|
||||
[registrar addMethodCallDelegate:[[AmapLocationFluttifyPlugin alloc] initWithFlutterPluginRegistrar:registrar]
|
||||
channel:channel];
|
||||
|
||||
// 注册View
|
||||
|
||||
}
|
||||
|
||||
// Method Handlers
|
||||
- (void)handleMethodCall:(FlutterMethodCall *)methodCall result:(FlutterResult)methodResult {
|
||||
if (_handlerMap[methodCall.method] != nil) {
|
||||
_handlerMap[methodCall.method](_registrar, [methodCall arguments], methodResult);
|
||||
} else {
|
||||
methodResult(FlutterMethodNotImplemented);
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
|
@ -0,0 +1,21 @@
|
|||
//////////////////////////////////////////////////////////
|
||||
// GENERATED BY FLUTTIFY. DO NOT EDIT IT.
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <AMapLocationKit/AMapLocationKit.h>
|
||||
|
||||
@protocol FlutterPluginRegistrar;
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface AMapGeoFenceManagerDelegate_Anonymous : NSObject<AMapGeoFenceManagerDelegate>
|
||||
|
||||
- (instancetype) initWithFlutterPluginRegistrar: (NSObject <FlutterPluginRegistrar> *) registrar;
|
||||
|
||||
@property(nonatomic) NSObject<FlutterPluginRegistrar>* registrar;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
|
@ -0,0 +1,106 @@
|
|||
//////////////////////////////////////////////////////////
|
||||
// GENERATED BY FLUTTIFY. DO NOT EDIT IT.
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
#import "AMapGeoFenceManagerDelegate_Anonymous.h"
|
||||
#import <Flutter/Flutter.h>
|
||||
#import "FluttifyMessageCodec.h"
|
||||
#import <objc/runtime.h>
|
||||
|
||||
// Dart端一次方法调用所存在的栈, 只有当MethodChannel传递参数受限时, 再启用这个容器
|
||||
extern NSMutableDictionary<NSString*, NSObject*>* STACK;
|
||||
// Dart端随机存取对象的容器
|
||||
extern NSMutableDictionary<NSString*, NSObject*>* HEAP;
|
||||
// 日志打印开关
|
||||
extern BOOL enableLog;
|
||||
|
||||
@implementation AMapGeoFenceManagerDelegate_Anonymous
|
||||
|
||||
- (instancetype) initWithFlutterPluginRegistrar: (NSObject <FlutterPluginRegistrar> *) registrar {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_registrar = registrar;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)amapGeoFenceManager : (AMapGeoFenceManager*)manager doRequireLocationAuth: (CLLocationManager*)locationManager
|
||||
{
|
||||
FlutterMethodChannel *channel = [FlutterMethodChannel
|
||||
methodChannelWithName:[NSString stringWithFormat:@"AMapGeoFenceManagerDelegate::Callback@%@:%@", NSStringFromClass([self class]), @(self.hash)]
|
||||
binaryMessenger:[_registrar messenger]
|
||||
codec:[FlutterStandardMethodCodec codecWithReaderWriter:[[FluttifyReaderWriter alloc] init]]];
|
||||
// print log
|
||||
if (enableLog) {
|
||||
NSLog(@"AMapGeoFenceManagerDelegate::amapGeoFenceManager_doRequireLocationAuth");
|
||||
}
|
||||
|
||||
// convert to jsonable arg
|
||||
// ref callback arg
|
||||
AMapGeoFenceManager* argmanager = manager;
|
||||
// ref callback arg
|
||||
CLLocationManager* arglocationManager = locationManager;
|
||||
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[channel invokeMethod:@"amapGeoFenceManager_doRequireLocationAuth" arguments:@{@"manager": argmanager == nil ? [NSNull null] : argmanager, @"locationManager": arglocationManager == nil ? [NSNull null] : arglocationManager}];
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
- (void)amapGeoFenceManager : (AMapGeoFenceManager*)manager didAddRegionForMonitoringFinished: (NSArray<AMapGeoFenceRegion*>*)regions customID: (NSString*)customID error: (NSError*)error
|
||||
{
|
||||
FlutterMethodChannel *channel = [FlutterMethodChannel
|
||||
methodChannelWithName:[NSString stringWithFormat:@"AMapGeoFenceManagerDelegate::Callback@%@:%@", NSStringFromClass([self class]), @(self.hash)]
|
||||
binaryMessenger:[_registrar messenger]
|
||||
codec:[FlutterStandardMethodCodec codecWithReaderWriter:[[FluttifyReaderWriter alloc] init]]];
|
||||
// print log
|
||||
if (enableLog) {
|
||||
NSLog(@"AMapGeoFenceManagerDelegate::amapGeoFenceManager_didAddRegionForMonitoringFinished_customID_error");
|
||||
}
|
||||
|
||||
// convert to jsonable arg
|
||||
// ref callback arg
|
||||
AMapGeoFenceManager* argmanager = manager;
|
||||
// ref callback arg
|
||||
NSArray<AMapGeoFenceRegion*>* argregions = regions;
|
||||
// ref callback arg
|
||||
NSString* argcustomID = customID;
|
||||
// ref callback arg
|
||||
NSError* argerror = error;
|
||||
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[channel invokeMethod:@"amapGeoFenceManager_didAddRegionForMonitoringFinished_customID_error" arguments:@{@"manager": argmanager == nil ? [NSNull null] : argmanager, @"regions": argregions == nil ? [NSNull null] : argregions, @"customID": argcustomID == nil ? [NSNull null] : argcustomID, @"error": argerror == nil ? [NSNull null] : argerror}];
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
- (void)amapGeoFenceManager : (AMapGeoFenceManager*)manager didGeoFencesStatusChangedForRegion: (AMapGeoFenceRegion*)region customID: (NSString*)customID error: (NSError*)error
|
||||
{
|
||||
FlutterMethodChannel *channel = [FlutterMethodChannel
|
||||
methodChannelWithName:[NSString stringWithFormat:@"AMapGeoFenceManagerDelegate::Callback@%@:%@", NSStringFromClass([self class]), @(self.hash)]
|
||||
binaryMessenger:[_registrar messenger]
|
||||
codec:[FlutterStandardMethodCodec codecWithReaderWriter:[[FluttifyReaderWriter alloc] init]]];
|
||||
// print log
|
||||
if (enableLog) {
|
||||
NSLog(@"AMapGeoFenceManagerDelegate::amapGeoFenceManager_didGeoFencesStatusChangedForRegion_customID_error");
|
||||
}
|
||||
|
||||
// convert to jsonable arg
|
||||
// ref callback arg
|
||||
AMapGeoFenceManager* argmanager = manager;
|
||||
// ref callback arg
|
||||
AMapGeoFenceRegion* argregion = region;
|
||||
// ref callback arg
|
||||
NSString* argcustomID = customID;
|
||||
// ref callback arg
|
||||
NSError* argerror = error;
|
||||
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[channel invokeMethod:@"amapGeoFenceManager_didGeoFencesStatusChangedForRegion_customID_error" arguments:@{@"manager": argmanager == nil ? [NSNull null] : argmanager, @"region": argregion == nil ? [NSNull null] : argregion, @"customID": argcustomID == nil ? [NSNull null] : argcustomID, @"error": argerror == nil ? [NSNull null] : argerror}];
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
@end
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue