Day05 platform channels

编写自定义的平台相关程序码(插件在不同平台的功能实作)

Flutter 允许调用相关平台的API,无论是Android 中的Java 或Kotlin 代码,还是iOS 中的Objective-C 或Swift 代码

介绍的内容适用於大多数插件,有个例外是一些Web插件的实现是通过联合插件的方式进行的,这一类插件不使用平台通道,可参考Flutter Web在美团外卖的实践

Flutter 内建的platform-specific API 灵活的依赖於传递讯息的格式

  • 应用程序中的Flutter 部分通过platform channel(平台通道)向其宿主 Native 端(应用程序中的iOS 或Android 部分)发送讯息
  • 宿主 Native 端监听平台通道并接收消息。然後,它使用原生程序语言来调用任意数量的相关平台API,并将响应发送回客户端(即应用程序中的Flutter 部分)
Architectural overview:platform channels(平台通道)

Flutter 与 Native 端之间的通讯机制是通过 Platform Channel 来完成。讯息使用 Channel 在*Flutter端(UI)Native端(平台)*进行传递,如下图所示:
https://ithelp.ithome.com.tw/upload/images/20210921/20118479AK9SLfL6Ii.png

讯息和响应以异步的形式进行传递,以确保用户界面能够保持响应,图中客户端在调用方法的时候透过一种platform channel:MethodChannel来负责响应动作并传递讯息,从平台的角度上,Android系统上使用的MethodChannelMethodChannelAndroid)、 iOS系统使用的的MethodChannelMethodChanneliOS),用来接收来自方法的调用,以及返回**result**

如果需要,方法调用也可以反向发送,由平台充当客户端来调用Dart 实现的方法。一个具体的例子是quick_actions插件

Flutter 定义了三种不同型别的Platform Channel 在platform_channel.dart

  • BasicMessageChannel:用於传递字串或者半结构化的资讯,持续通讯,收到资讯後可以进行回覆
  • MethodChannel:用於传递方法呼叫,一次性通讯。通常用於 Dart 呼叫 Native 的方法
  • EventChannel:用於资料流的通讯,持续通讯,收到讯息後无法回覆此次讯息。通常用於 Native 向 Dart 的通讯

<<:  峰禾影视

>>:  33岁转职者的前端笔记-DAY 20 Javascript 基本知识笔记

[从0到1] C#小乳牛 练成基础程序逻辑 Day 29 - 加速器 中/英打typing games 六大推荐

免扮女装 | 游戏中超越自己 | 手速up up | 6大推荐 ...

[JS] You Don't Know JavaScript [this & Object Prototypes] - Object [下]

前言 在Object [上]中我们介绍了物件的宣告、型态、拷贝等等特性,接下来我们继续介绍物件中都有...

Mikrotik RouterOS从入门到实战系列-Mikrotik入门第六课

Route(路由)设置设置详解与实战应用 ´RIB 路由信息库(生成路由表) ´FIB(转发信息库...

Day25 Bootstrap简介

今天我们要来介绍Bootsrap,那这是甚麽呢 ?他是一种框架(frame),在他所制定的规则里,能...

D06 - Web Serial API 初体验

让我们透过 Web Serial API 连接 COM 吧! 首先来建立页面。 建立共用样式 准备撰...