@@ -25,7 +25,7 @@ android { | |||||
compileSdkVersion 28 | compileSdkVersion 28 | ||||
defaultConfig { | defaultConfig { | ||||
minSdkVersion 16 | |||||
minSdkVersion 19 | |||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | ||||
} | } | ||||
lintOptions { | lintOptions { | ||||
@@ -9,11 +9,12 @@ import io.flutter.plugin.common.MethodChannel.Result; | |||||
import io.flutter.plugin.common.PluginRegistry.Registrar; | import io.flutter.plugin.common.PluginRegistry.Registrar; | ||||
/** ZhiyingCommPlugin */ | /** ZhiyingCommPlugin */ | ||||
public class ZhiyingCommPlugin implements FlutterPlugin, MethodCallHandler { | |||||
public class ZhiyingCommPlugin implements FlutterPlugin { | |||||
@Override | @Override | ||||
public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) { | public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) { | ||||
final MethodChannel channel = new MethodChannel(flutterPluginBinding.getFlutterEngine().getDartExecutor(), "zhiying_comm"); | |||||
channel.setMethodCallHandler(new ZhiyingCommPlugin()); | |||||
// final MethodChannel channel = new MethodChannel(flutterPluginBinding.getFlutterEngine().getDartExecutor(), "zhiying_comm"); | |||||
// channel.setMethodCallHandler(new ZhiyingCommPlugin()); | |||||
ZhiyingFlutterCommNative.getInstance().registerWith(flutterPluginBinding.getFlutterEngine().getDartExecutor()); | |||||
} | } | ||||
// This static function is optional and equivalent to onAttachedToEngine. It supports the old | // This static function is optional and equivalent to onAttachedToEngine. It supports the old | ||||
@@ -26,18 +27,11 @@ public class ZhiyingCommPlugin implements FlutterPlugin, MethodCallHandler { | |||||
// depending on the user's project. onAttachedToEngine or registerWith must both be defined | // depending on the user's project. onAttachedToEngine or registerWith must both be defined | ||||
// in the same class. | // in the same class. | ||||
public static void registerWith(Registrar registrar) { | public static void registerWith(Registrar registrar) { | ||||
final MethodChannel channel = new MethodChannel(registrar.messenger(), "zhiying_comm"); | |||||
channel.setMethodCallHandler(new ZhiyingCommPlugin()); | |||||
// final MethodChannel channel = new MethodChannel(registrar.messenger(), "zhiying_comm"); | |||||
// channel.setMethodCallHandler(new ZhiyingCommPlugin()); | |||||
ZhiyingFlutterCommNative.getInstance().registerWith(registrar.messenger()); | |||||
} | } | ||||
@Override | |||||
public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { | |||||
if (call.method.equals("getPlatformVersion")) { | |||||
result.success("Android " + android.os.Build.VERSION.RELEASE); | |||||
} else { | |||||
result.notImplemented(); | |||||
} | |||||
} | |||||
@Override | @Override | ||||
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { | public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { | ||||
@@ -0,0 +1,7 @@ | |||||
package cn.zhios.zhiying_comm; | |||||
import java.util.Map; | |||||
public interface ZhiyingFlutterCommHandler { | |||||
public void handle(ZhiyingFlutterCommNativeResult result); | |||||
} |
@@ -0,0 +1,26 @@ | |||||
/* | |||||
* @Author: your name | |||||
* @Date: 2020-06-16 15:37:18 | |||||
* @LastEditTime: 2020-06-19 17:13:52 | |||||
* @LastEditors: your name | |||||
* @Description: In User Settings Edit | |||||
* @FilePath: /hairuyi_flutter_comm/android/src/main/kotlin/com/fnuoos/hairuyi_flutter_comm/HairuyiFlutterCommNativable.java | |||||
*/ | |||||
package cn.zhios.zhiying_comm; | |||||
import java.util.Map; | |||||
public interface ZhiyingFlutterCommNativable { | |||||
/* 跳转公共方法 */ | |||||
public void openPage(Map params); | |||||
/* 跳转原生页面(非公共跳转) */ | |||||
public void openNativePage(Map params); | |||||
/* 获取设置 */ | |||||
public Map getSetting(); | |||||
/* 普通方法(交互) */ | |||||
public void invokeMethod(String method, Map<String, Object> params, ZhiyingFlutterCommHandler handler); | |||||
} |
@@ -0,0 +1,109 @@ | |||||
package cn.zhios.zhiying_comm; | |||||
import java.util.ArrayList; | |||||
import java.util.HashMap; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
import io.flutter.plugin.common.BinaryMessenger; | |||||
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; | |||||
public class ZhiyingFlutterCommNative implements MethodCallHandler { | |||||
private ZhiyingFlutterCommNativable nat; | |||||
private List<ZhiyingFlutterCommNativable> natLists; | |||||
/** | |||||
* 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例 没有绑定关系,而且只有被调用到才会装载,从而实现了延迟加载 | |||||
*/ | |||||
private static class HairuyiFlutterCommNativeHolder { | |||||
/** | |||||
* 静态初始化器,由JVM来保证线程安全 | |||||
*/ | |||||
private static ZhiyingFlutterCommNative instance = new ZhiyingFlutterCommNative(); | |||||
} | |||||
private ZhiyingFlutterCommNative() { | |||||
natLists = new ArrayList<>(); | |||||
} | |||||
public static ZhiyingFlutterCommNative getInstance() { | |||||
return HairuyiFlutterCommNativeHolder.instance; | |||||
} | |||||
public void registerWith( BinaryMessenger message) { | |||||
MethodChannel channel = new MethodChannel(message, "zhiying_comm://method"); | |||||
channel.setMethodCallHandler(ZhiyingFlutterCommNative.getInstance()); | |||||
} | |||||
public void regist(ZhiyingFlutterCommNativable nat) { | |||||
if (null == natLists){ natLists = new ArrayList<>();} | |||||
natLists.add(nat); | |||||
this.nat = natLists.get(natLists.size() - 1); // 获取新的 | |||||
} | |||||
public void unregist(){ | |||||
if (null != natLists && natLists.size() > 1){ | |||||
natLists.remove(natLists.size() - 1); | |||||
nat = natLists.get(natLists.size() -1); | |||||
}else if (null != natLists && natLists.size() == 1){ | |||||
natLists.clear(); | |||||
nat = null; | |||||
} | |||||
} | |||||
@Override | |||||
public void onMethodCall(MethodCall call, final Result result) { | |||||
/* 公共跳转方法 */ | |||||
if (call.method.equals("openPage")) { | |||||
if (nat != null) { | |||||
nat.openPage((Map) call.arguments); | |||||
} | |||||
Map map = new HashMap<String, Object>(); | |||||
map.put("success", "1"); | |||||
result.success(map); | |||||
} | |||||
/* 跳转原生页面(非公共跳转) */ | |||||
if (call.method.equals("openNativePage")) { | |||||
if (nat != null) { | |||||
nat.openNativePage((Map) call.arguments); | |||||
} | |||||
Map map = new HashMap<String, Object>(); | |||||
map.put("success", "1"); | |||||
result.success(map); | |||||
} | |||||
/* 获取设置 */ | |||||
if (call.method.equals("getSetting")) { | |||||
Map map = new HashMap<String, Object>(); | |||||
if (nat != null) { | |||||
map = nat.getSetting(); | |||||
} | |||||
result.success(map); | |||||
} | |||||
/* 调用原生方法 */ | |||||
if (call.method.equals("invokeMethod")) { | |||||
if (nat != null) { | |||||
Map params = ((Map<String, String>) call.arguments); | |||||
nat.invokeMethod((String) params.get("method"), (Map) params.get("params"), new ZhiyingFlutterCommHandler() { | |||||
@Override | |||||
public void handle(ZhiyingFlutterCommNativeResult res) { | |||||
result.success(res.toMap()); | |||||
} | |||||
}); | |||||
} else { | |||||
result.success(ZhiyingFlutterCommNativeResult.notImp().toMap()); | |||||
} | |||||
} else { | |||||
result.notImplemented(); | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,45 @@ | |||||
package cn.zhios.zhiying_comm; | |||||
import java.util.HashMap; | |||||
import java.util.Map; | |||||
public class ZhiyingFlutterCommNativeResult { | |||||
public boolean success; | |||||
public String msg; | |||||
public Map<String, Object> data; | |||||
public ZhiyingFlutterCommNativeResult(String msg, boolean success, Map<String, Object> data) { | |||||
this.msg = msg; | |||||
this.success = success; | |||||
this.data = data; | |||||
} | |||||
public Map toMap() { | |||||
Map map = new HashMap<>(); | |||||
map.put("msg", this.msg); | |||||
map.put("success", this.success ? "1" : "0"); | |||||
map.put("data", this.data); | |||||
return map; | |||||
} | |||||
public static ZhiyingFlutterCommNativeResult success(String msg) { | |||||
return new ZhiyingFlutterCommNativeResult(msg, true, null); | |||||
} | |||||
public static ZhiyingFlutterCommNativeResult success(String msg, Map<String, Object> data) { | |||||
return new ZhiyingFlutterCommNativeResult(msg, true, data); | |||||
} | |||||
public static ZhiyingFlutterCommNativeResult failed(String msg) { | |||||
return new ZhiyingFlutterCommNativeResult(msg, false, null); | |||||
} | |||||
public static ZhiyingFlutterCommNativeResult failed(String msg, Map<String, Object> data) { | |||||
return new ZhiyingFlutterCommNativeResult(msg, false, data); | |||||
} | |||||
public static ZhiyingFlutterCommNativeResult notImp() { | |||||
return new ZhiyingFlutterCommNativeResult("native调用失败", false, null); | |||||
} | |||||
} |
@@ -34,7 +34,7 @@ android { | |||||
defaultConfig { | defaultConfig { | ||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). | ||||
applicationId "cn.zhios.zhiying_comm_example" | applicationId "cn.zhios.zhiying_comm_example" | ||||
minSdkVersion 16 | |||||
minSdkVersion 19 | |||||
targetSdkVersion 28 | targetSdkVersion 28 | ||||
versionCode flutterVersionCode.toInteger() | versionCode flutterVersionCode.toInteger() | ||||
versionName flutterVersionName | versionName flutterVersionName | ||||