首先第一步是在android的代码中,使用 MethodChannel 进行注册
import android.os.Bundle;
import android.os.StrictMode;
import androidx.annotation.Nullable;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
/**
* Created by malei on 2021/2/23
* Describe:
* https://blog.youkuaiyun.com/xeon_cc/article/details/107922295
*/
public class MainFlutterActivity extends FlutterActivity {
private static final String channel = "toJava";
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
new MethodChannel(getFlutterEngine().getDartExecutor().getBinaryMessenger(),channel).setMethodCallHandler(
new MethodChannel.MethodCallHandler() {
@Override
public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
if (methodCall.method!=null) {
result.success(toJava(methodCall.method));
} else {
result.notImplemented();
}
}
}
);
}
public String toJava(String name){
System.out.println("传递的参数是"+name);
return "您好"+name;
}
}
第二步:我们可以通过MainActivity进入到MainFlutterActivity类,打开这个类,就直接进入到了flutter的首页。
第三步:我们在main.dart中添加调用原生方法的功能
import 'dart:core';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_module/FindPage.dart';
import 'package:flutter_module/MinePage.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
routes: {
'FindPage': (context) {
return FindPage();
},
'MinePage': (context) {
return MinePage();
},
},
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHome(),
);
}
}
class MyHome extends StatefulWidget {
@override
_MyHomeState createState() => _MyHomeState();
}
class _MyHomeState extends State<MyHome> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("测试"),
),
body: Container(
child: Column(
children: <Widget>[
InkWell(
child: Container(
width: 100,
height: 60,
color: Colors.amber,
child: Text("点击"),
),
onTap: () async {
//调用原生的toJava方法
const platform = const MethodChannel("toJava");
var returnValue = await platform.invokeMethod("刘德华");
print("从原生Android的java方法返回的值是:" + returnValue);
},
)
],
),
),
);
}
}
结果如下:
I/System.out: 传递的参数是刘德华
I/flutter: 从原生Android的java方法返回的值是:您好刘德华