网上写的好多的代码都是flutter 1.1.2 以下的,1.1.2以上的代码不多,而且很乱。本人整理了很长一段时间才把问题整理出来。总体来说,分为3个步骤:
-
绑定方法 (MainActivity.kt)
-
创建实现类 (TestPlugin.java)
-
调用 (xxx.dart)
========================下面是一个生成随机号码的例子,直接上代码======
MainActivity.kt
package com.xxx
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
class MainActivity: FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
print("##configureFlutterEngine start")
super.configureFlutterEngine(flutterEngine)
print("##configureFlutterEngine end")
var mc:MethodChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "leejinx_plugin")
mc.setMethodCallHandler { call: MethodCall, result: MethodChannel.Result -> run{
print("##开始进入自定义原生")
var size = call.argument<Int>("size")
var maxnum = call.argument<Int>("maxNumber")
var randomNumbers:String = TestPlugin().createRandomNumber(size!!.toInt(),maxnum!!.toInt())
result?.success(randomNumbers)
}}
}
}
TestPlugin.java
package com.xxx;
import java.util.Arrays;
import java.util.Random;
public class TestPlugin {
public String createRandomNumber(int count,int maxNumber){
System.out.println("##进入createRandomNumber");
String numStr = null;
Random random = new Random();
Integer[] numArr = new Integer[count];
for(int i = 0;i < count;i++){
numArr[i] = random.nextInt(maxNumber) + 1;
}
numStr = Arrays.toString(numArr);
return numStr;
}
}
xxx.dart
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class TestPlugin extends StatefulWidget{
@override
State<StatefulWidget> createState() {
return TestPluginState();
}
}
class TestPluginState extends State<TestPlugin>{
static const MethodChannel leejinx_plugin_mc = const MethodChannel("leejinx_plugin");
String randomNumbers = "";
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(centerTitle: true,),
body: Container(
child: ListView(
shrinkWrap: true,
children: <Widget>[
Text("随机号码:$randomNumbers"),
RaisedButton(
child: Text("生成随机号码"),
onPressed: (){
print("##start press,${leejinx_plugin_mc.name}");
// Future<String> str = leejinx_plugin_mc.invokeMethod("mytest");
Map paramMap = Map();
paramMap['size'] = 5;
paramMap["maxNumber"] = 30;
Future<String> str = leejinx_plugin_mc.invokeMethod("tet",paramMap);
str.then((value)
{
print("##value=$value");
// 更新数字
this.setState(() {
randomNumbers = value;
});
}
);
print("##end press");
},
),
],
),
)
);
}
}

针对Flutter 1.1.2以上版本,整理了调用原生Android代码的3步流程:1) 绑定方法于MainActivity;2) 创建实现类TestPlugin;3) 在Flutter dart文件中调用。通过实例演示生成随机号码,提供关键代码片段。

3787

被折叠的 条评论
为什么被折叠?



