强力推荐:一个好用的Flutter与原生应用通讯的开源框架!

Posted 开发者全社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了强力推荐:一个好用的Flutter与原生应用通讯的开源框架!相关的知识,希望对你有一定的参考价值。

热文推荐:


作者:小玩童

链接:https://juejin.im/post/5e6f23eef265da574f355950

Flutter的产品定义是一个高性能的跨平台的移动UI框架,能够用一套代码同时构建出android/ios/Web/MacOS应用。作为一套,它不具备一些系统的接口,自然还是避免不了跟原生打交道。于是乎,它提出了名为 的东西,用于flutter和原生灵活的交换数据。以下为了描述方便,用Android代指原生。
燃鹅,燃鹅,燃鹅,它只支持一些基础的数据类型和数据结构的传输,例如bool/int/long/byte/char/String/byte[]/List/Map等。
因此,当你想传输复杂点的数据,你只能包装成Map,类似这样:
await _channel.invokeMethod('initUser',
    {'name''Oscar''age'16'gender''MALE''country''China'});
然后再在Android层hard code,解析出不同的key对应的不同数据。如果你是一个纯fluter项目,且以后也没有和原生打交道的打算,或者只是需要进行简单的交互,那这种做法也无可厚非。而当你的项目已经有很大的一部分原生代码或者你需要使用第三方不支持flutter的lib库的时候,就意味着你需要编写大量向上面那样的模板代码。可见效率低下,且可维护性差。这时,你会想,能传输对象就好了!
而当你想传输对象时:
强力推荐:一个好用的Flutter与原生应用通讯的开源框架!
抱歉,没门,只能给你一个尴尬又不是礼貌的危笑。当然,也不是不可以,我们可以在原生上层把对象序列化成json对象,然后在flutter层再把json转成flutter的对象,同样效率很差。

FIDL是什么

学过Android的应该都知道AIDL(Android Interface Defination Language),即Android接口定义语言。Android中有一种高级的跨进程通信方式——Binder,但是想要使用Binder需要了解一些Binder的机制和API,需要编写大量的模板代码。Android为了解决这个问题,尝试把使用Binder的方法做的小白一点。于是定义了AIDL,告诉开发者,你的接口文件必须按照我规定的来写,你要跨进程传输的对象必须实现Parcelable接口。然后,Android给你生成了一个Service.Stub类,偷偷的在背后把对象的序列化、反序列化的工作都给做了。开发者使用这个Stub类就能轻松上手Binder这种高级的跨进程通讯方法。(

以上是关于强力推荐:一个好用的Flutter与原生应用通讯的开源框架!的主要内容,如果未能解决你的问题,请参考以下文章

SourceInsight宏插件3(非常好用,强力推荐)

SourceInsight宏插件2(非常好用,强力推荐)

FIDL:Flutter与原生通讯的新姿势,不局限于基础数据类型

非常适用的Sourceinsight插件,提高效率强力推荐

Flutter Channel底层原理分析

Flutter与原生通信概述