flutter学习笔记kotlin版:MethodChannel
简介
简单记录一下学习flutter过程中,flutter与原生kotlin进行交互的方法
android(kotlin)
class MainActivity : FlutterActivity() {
private lateinit var channel: MethodChannel
private var count: Int = 0
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine);
//定义通讯通道
channel = MethodChannel(
flutterEngine.dartExecutor.binaryMessenger,
"com.example.androidflutter.MethodChannelDemo"
)
//初始化完成=》调用监听方法
onListen()
}
private fun onListen() {
//设置监听,传入MethodChannel.MethodCallHandler类,监听到flutter端发过来的消息就会出发回调
channel.setMethodCallHandler(MethodChannel.MethodCallHandler { call, result ->
if (call.method == "sendData") {
val name = call.argument("name") as String?
val age = call.argument("age") as Int?
var map = mapOf(
"name" to "hello,$name",
"age" to "$age"
)
//返回map
result.success(map)
}
})
}
//android端主动发送消息给flutter端
private fun setMethod() {
//这里设置的定时器,每秒返回count++
var timer = Timer().schedule(timerTask {
activity.runOnUiThread {
var map = mapOf("count" to count++)
channel.invokeMethod("timer", map)
}
}, 1000, 1000)
}
}
flutter端
//定义通道
MethodChannel channel = const MethodChannel('com.example.androidflutter.MethodChannelDemo');
String _data = "";//临时变量 储存flutter触发Android之后返回的数据
int _nativeData=0;//临时变量 接收Android端主动发送回来的数据
//flutter发送消息给android
Future<String?> getPlatformVersion() async {
var result =
await channel.invokeMethod('sendData', {'name': '李四', 'age': 18});
var name = result['name'];
var age = result['age'];
setState(() {
_data = '$name,$age';
});
}
//在initState的时候设置监听Android发送回来的message
void initState() {
super.initState();
channel.setMethodCallHandler((call) async {
print(call);//MethodCall(timer, {count: 1})
//这里的timer是Android端
setState(() {
_nativeData = call.arguments['count'];
});
});
}