Day17 开发套件 - 实作BasicMessageChannel

用於双向的单次讯息传递,包括发送讯息、接收讯息两个功能

经过以上的实作,其实两端的通讯步骤都差不多,首先在两端建立想要Channel并指定名称,且在两端通道名称需对应,传送端对接收端发讯息来执行Channel的对应的动作(执行Native 端方法,或监听Native 端讯息,亦或发送讯息至Native 端讯息),接收端建立完对应的Channel後要建立handler处理从传送端来的讯息执行对应动作,并回传结果

Flutter 端

新增BasicMessageChannel并指定名称,且新增要从Flutter 端传讯息给Native 端的方法,并回传Native 端要回覆的讯息

lib/batterylevel.dart

	static const BasicMessageChannel _messageChannel =
      const BasicMessageChannel('chat_message', StringCodec());

  static Future<String> messageResponse(String message) async {
    final String response = await _messageChannel.send(message);
    return response;
  }

Native 端(Android):

android/.../BatterylevelPlugin.kt

    private lateinit var messageChannel: BasicMessageChannel<String>

    override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
        //Added
        messageChannel = BasicMessageChannel(
            flutterPluginBinding.binaryMessenger,
            "chat_message",
            StringCodec.INSTANCE
        )
        messageChannel.setMessageHandler { message, reply ->
            val response = if(message.isNullOrEmpty()) "" else "Android 收到:$message"
            reply.reply(response)
        }
    }

    override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
        //Added
        messageChannel.setMessageHandler(null)
    }

Native 端(iOS):

ios/Classes/RandomNumberStreamHandler.swift

public class SwiftBatterylevelPlugin: NSObject, FlutterPlugin {
    public static func register(with registrar: FlutterPluginRegistrar) {
				//Added
        let messageChannel = FlutterBasicMessageChannel(name: "chat_message", binaryMessenger: 			registrar.messenger(),codec: FlutterStringCodec.sharedInstance())
        
        messageChannel.setMessageHandler {
            (message: Any?, reply: FlutterReply) -> Void in
            reply((message as! String) != "" ? "iOS 收到:\(message as! String)" : "");
        }
    }
}

以上就完成运用Platform Channel来实作平台两端的通讯了,[范例程序都在这](


<<:  17. PHPer x Code Quality Tool

>>:  Day17 Combine 04 - Operators 主要类型

离职倒数18天:重新开始思考一个科技业大家爱揶揄的话题「PM 到底在干嘛」

我最近在考虑要找人来帮忙管理我们的 App。请认识的人介绍时,我说工作内容包括:看用户的反馈然後分类...

Day 20 To Do List - 封装

第 20 天~ 走到了三分之二了~!!! 好激动阿!! 再接再厉~ 加油! 昨天把 To Do Li...

为了转生而点技能-JavaScript,day23(Promise介绍

Promise:适用於非同步的运算上。 本身就是建构函式 console.log(Promise);...

风险评估(Risk Evaluation)

-ISO 31000 本问题旨在推广 ISO 31000 风险评估的概念。年化预期损失 (ALE)...

[Day5] 和应用程序有关的攻击-例外处理,重播攻击,请求伪造

今天继续更新和应用程序有关的攻击方式。 例外处理 例外处理是指软硬体在执行程序的过程中发生非预期状况...