Flutter进阶篇(5)-- 使用Flutter创建插件详解并发布到Pub库

Flutter提供了和原生做交互的方式,我们通过和原生交互就可以达到Flutter调用原生平台的相关功能的目的。换句话说,Flutter做不到的事(比如:设备有关的、第三方SDK、长连接等),我们都可以通过Flutter与原生交互来做到,其中插件的编写是必不可少的一个过程。我们一定要掌握插件的编写。

有人会说:“网上不是有很多插件库吗?”没错!但是如果别人写的插件功能没有你想要的怎么办?如果插件与你本地不兼容怎么办?如果你的项目急用一个功能,网上找不到插件库怎么办?那么这个时候学会自己编写插件库就非常有必要了!

本文首发在公众号Flutter那些事,欢迎大家多多关注。

下面详细的讲解一下Flutter如何创建一个插件,并且教大家上传到Pub库,让大家也体验一把自己的库被别人使用的自豪感。

本文示例源码同步在Github:https://github.com/AweiLoveAndroid/flutter_device_information,如有任何问题,欢迎提issue


Flutter系列博文链接 ↓:

工具安装:

Flutter基础篇:

Flutter进阶篇:

Dart语法系列博文链接 ↓:

Dart语法基础篇:

Dart语法进阶篇:


一、创建插件

在这里以调用原生平台设备信息为例做讲解。手把手教大家写一个Flutter插件。

(1)首先看看Flutter调用原生平台交互过程

Flutter中通过MethodChannel和原生平台做交互。如图所示:

Flutter调用原生平台交互示意图

(2)创建Flutter Plugin插件项目

使用Android Studio/Intellij IDEA创建项目,截图如下:

使用flutter create命令行创建,项目名称放在最后,命令如下所示:

flutter create --org com.awei --template=plugin -a java --description "A Flutter plugin for using devices informations in Android" flutter_device_information

常用的命令参数如下:

  • --org:定义项目的组织结构
  • -a:用什么语言编写Android代码
  • --description:插件的描述
  • -i:用什么语言编写iOS代码

上面那个命令的意思是:创建一个插件,包名为“com.awei”,指定Android代码使用Java语言编写,插件项目名称为“flutter_device_information”,项目描述为:“A Flutter plugin for using devices informations in Android”。

(3)下面看一下完整的目录结构

如下图所示:

完整的项目结构图

其中:

  • “android”目录是插件API在Android平台的实现。
  • “ios”目录是插件API在iOS平台的实现。
  • “example”目录是使用插件的一个示例项目。
  • “lib”目录的文件,主要是创建“MethodChannel”,然后接收并处理来自原生平台发来的消息。

(4)插件编写步骤

1.创建MethodChannel对象

打开flutter_device_information.dart文件,开始创建MethodChannel对象,参数是自己协定的,后面的原生平台需要用到的这个参数,每一个MethodChannel对象的这个参数是唯一的标识符,必须记住。如下所示:

还有 55% 的精彩内容