flutte学习笔记(kotlin):MethodChannel

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'];
      });
    });
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值