Android studio打开新建的flutter项目flutter_app_1,在_MyHomePageState方法中添加如下内容:
String _test1;
static const methodChannel = const MethodChannel('mzz');//建立交互通道
Future<Null> s_invokNative() async {
String test1;
String method = "imgDeal";//原生中的方法名标识
Map msg = new Map();//将mag对象发送到andriod端
msg["url"] = "http://www.baidu.com";
msg["url1"] = "aadkjflskdj";
test1 = await methodChannel.invokeMethod(method,msg);//将方法名和参数传递给Android原生
setState(() {
_test1 = test1;
});
}
点击Android studio的file-open,单独打开flutter_app_1的android原生项目,如下
在android原生项目中可以添加第三方需要用的库(sdk),这里我引用了opencv的sdk,网上很多教程,不详细说明了,然后在MainActivity.java中添加如下:
private static final String _channel = "mzz";//通道名称(自定义),必须与flutter一致
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
MethodChannel _methodChannel = new MethodChannel(flutterEngine.getDartExecutor(), _channel);
_methodChannel.setMethodCallHandler(
new MethodChannel.MethodCallHandler() {
@Override
public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
if (methodCall.method.equals("imgDeal")) {//判断方法名标识
imgDeal((String) methodCall.argument("url"));//通过argument方法获取map对象的数据
result.success("123");
} else {
result.notImplemented();
}
}
}
);
}
private void imgDeal(String msg) {
Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();//简单调用土司
}
运行方式有两种:
1、原生的项目直接运行
2、在flutter项目(flutter_app_1)中的terminal窗口,使用flutter build apk生成一个apk,然后安装到模拟器中运行: