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

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

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

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

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

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


Flutter系列博文链接 ↓:

工具安装:

  • Flutter从配置安装到填坑指南详解

Flutter基础篇:

  • 谷歌Flutter1.0正式版发布
  • Flutter基础篇(1)-- 跨平台开发框架和工具集锦
  • Flutter基础篇(2)-- 老司机用一篇博客带你快速熟悉Dart语法
  • Flutter基础篇(3)-- Flutter基础全面详解
  • Flutter基础篇(4)-- Flutter填坑全面总结
  • Flutter基础篇(5)-- Flutter代码模板,解放双手,提高开发效率必备
  • Flutter基础篇(6)-- 水平和垂直布局详解
  • Flutter基础篇(7)-- Flutter更新错误全面解决方案(图文+视频讲解)
  • Flutter基础篇(8)-- Flutter for Web详细介绍
  • Flutter基础篇(9)-- 手把手教你用Flutter实现Web页面编写
  • Flutter1.9升级体验总结(Flutter Web 1.9最新版本填坑指南)

Flutter进阶篇:

  • Flutter进阶篇(1)-- 手把手带你快速上手调试Flutter项目
  • Flutter进阶篇(2)-- Flutter路由详解
  • Flutter进阶篇(3)-- Flutter 的手势(GestureDetector)分析详解
  • Flutter进阶篇(4)-- Flutter的Future异步详解
  • Flutter进阶篇(5)-- 使用Flutter创建插件详解并发布到Pub库
  • Flutter进阶篇(6)-- PageStorageKey、PageStorageBucket和PageStorage使用详解
  • Flutter进阶篇(7)-- Flutter路由轻量级框架FRouter
Dart语法系列博文链接 ↓:

Dart语法基础篇:

  • Flutter基础篇(2)-- 老司机用一篇博客带你快速熟悉Dart语法(这是Dart语法系列的第一篇)
  • Dart的语法详解系列篇(二)-- 类与函数
  • Dart的语法详解系列篇(三)-- mixin入门
  • Dart的语法详解系列篇(四)-- 泛型、异步、库等有关详解
  • Dart2.6正式版发布,支持编译为native可执行文件

Dart语法进阶篇:

  • Dart语法进阶篇(一)-- Dart源码的排序算法详解

一、创建插件

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

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

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

Flutter进阶篇(5)-- 使用Flutter创建插件详解并发布到Pub库_第1张图片
Flutter调用原生平台交互示意图

(2)创建Flutter Plugin插件项目

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

Flutter进阶篇(5)-- 使用Flutter创建插件详解并发布到Pub库_第2张图片

使用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)下面看一下完整的目录结构

如下图所示:

Flutter进阶篇(5)-- 使用Flutter创建插件详解并发布到Pub库_第3张图片
完整的项目结构图

其中:

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

(4)插件编写步骤

1.创建MethodChannel对象

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

你可能感兴趣的:(Flutter进阶篇(5)-- 使用Flutter创建插件详解并发布到Pub库)