基于 Linux 的 Flutter 方法通道 Channels

2021-09-24-09-05-26.png

原文

https://medium.com/flutter-community/using-flutter-method-channels-on-linux-2f6ae3e99653

代码

https://github.com/charafau/linux_method_channel

参考

正文

Flutter Method Channels on Linux

基于 Linux 的 Flutter 方法通道

又见面了!今天我将继续我的 Flutter Linux 之旅,我们将再次接触 Linux 集成。上次我们设法为插件开发设置了 Visual Studio Code,今天我们将进一步研究 Method Channels。

如果你想创建一个带有方法通道支持的插件,非常简单,只需要使用 flutter create \-t plugin \--platforms=linux <name of your project> 从模板生成一个 Flutter 项目。但是,如果你不想创建一个单独的插件,只是添加一些自定义代码到 Flutter Linux 应用程序中呢?我发现这并不简单,所以我想我会写这篇文章,这样你就不用自己解决了。

为了不再拖延下去,让我们开始吧。

创建方法通道

首先,我们需要创建编解码器 codecbinary messenger 二进制信使和信道。接下来,我们将向自定义方法分配一个方法调用,我们将在下一步中创建这个方法。

为此,让我们打开我的 my_application.cc 。在 linux 文件夹中抄送并导航到我的 my_application_activate 函数。接下来,我们在插件初始化之后实现上面描述的对象。

在下面的示例中,name_of_our_channel 的名称是我们从 Dart 代码调用的方法。

回调函数

现在我们来创建一个回调函数:

非常简单,我们传递一个通道、 methodcall 和一些用户数据。

To check for the channel’s method name we need to use the fl_method_call_get_name function on method_call object. And compare it with strcmp like so:

为了检查通道的方法名,我们需要在 method_call 对象上使用 fl_method_call_get_name 函数。然后把它和 strcmp 比较,就像这样:

方法未实现响应

如果传递给 channel 的方法不存在,我们需要返回未实现的结果来做这件事,我们需要调用 fl_method_call_respond

错误处理

在开始讨论参数和自定义结果之前,让我们先快速了解一下错误处理。

幸运的是,它与未实现的方法非常相似:

我们可以看到它几乎是相同的,我们只是用 fl_method_error_response_new 创建结果,而不是用 fl_method_not_implemented_response_new

获取 Dart 参数

好了,现在是时候从头开始写我们想写的东西了。让我们假设我们想要从 Dart 发送数据到 c + + ,为了做到这一点,我们只需要从 Dart 端发送一个地图,但是如何获取呢?

为此,我们需要调用 fl_method_call_get_args(FlMethodCall) ,它返回一个指向 FlValue 的指针。

接下来我们检查返回的值是否是正确的类型:

在上面的例子中,我们查找字符串,但是还有其他的,比如 int、 float、 bool、 map。对于完整的清单检验 Flutter Engine Documentation

类型检查也是一样,检查枚举的整个列表到 Documentation

返回一些值

我们几乎完成了,我们设法处理了未实现的方法、错误和从方法中获取参数。剩下的是返回 Dart 的值。

对我们来说幸运的是,这与我们已经完成的工作非常相似,我们只需要创建 FlMethodResponse 并将 FlValue 放入其中。下面是一个例子:

像前面一样,这里有更多价值创造函数的文档链接 link to documentation for more value creation function

代码完成 + 调试

我想我应该给你一些奖励,因为你来到这里,所以我决定在 Visual Studio Code 中编写代码完成和调试的设置程序。

在开始之前,必须安装 C++Cmake 插件。

首先让我们设置代码完成。创建名为 c_cpp_properties.json 的文件。Json 在里面。在你的项目的根目录下放一个 .vscode 文件夹,然后把这个配置文件放进去:

检查编译器路径(Flutter 使用 Clang)并根据需要调整 c/c + + 标准。

为了设置调试,我们需要在 launch.json 中创建启动配置 .vscode 文件夹。让我们来看一下配置:

非常简单,但是需要更改二进制名称。此外,要知道,使它的工作,你需要建立您的 Flutter 项目与 flutter run

本文结束

谢谢你的阅读,希望你会发现它很有用。

编程愉快!

完整的例子可以在这里找到。

https://github.com/charafau/linux_method_channel


© 猫哥

往期

开源

GetX Quick Start

https://github.com/ducafecat/getx_quick_start

新闻客户端

https://github.com/ducafecat/flutter_learn_news

strapi 手册译文

https://getstrapi.cn

微信讨论群 ducafecat

系列集合

译文

https://ducafecat.tech/categories/%E8%AF%91%E6%96%87/

开源项目

https://ducafecat.tech/categories/%E5%BC%80%E6%BA%90/

Dart 编程语言基础

https://space.bilibili.com/404904528/channel/detail?cid=111585

Flutter 零基础入门

https://space.bilibili.com/404904528/channel/detail?cid=123470

Flutter 实战从零开始 新闻客户端

https://space.bilibili.com/404904528/channel/detail?cid=106755

Flutter 组件开发

https://space.bilibili.com/404904528/channel/detail?cid=144262

Flutter Bloc

https://space.bilibili.com/404904528/channel/detail?cid=177519

Flutter Getx4

https://space.bilibili.com/404904528/channel/detail?cid=177514

Docker Yapi

https://space.bilibili.com/404904528/channel/detail?cid=130578

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容