Flutter组件/插件开发及发布流程

Flutter组件/插件开发及发布

一、组件和插件的区别

组件-package: 只包含flutter功能的第三方包/子工程,纯dart开发。

插件-plugin: 用来与原生进行交互,需要开发dart端代码和iOS/Android原生代码。

二、组件开发流程

1.创建package工程

使用AndroidStudio中的Flutter Package工程模板或者命令行:

dart 复制代码
flutter create -t package test_package

test_package即package的名称。

2.开发

生成的工程里面大致有.idea(工程环境信息),lib(package源代码),test(单元测试代码)等目录结构。我们在lib目录下开发功能。

3.测试

package工程并没有自动创建样例工程,所以可以在工程目录新建example工程用来自测。

dart 复制代码
flutter create example

然后在example中使用path导入来看功能是否正确实现。

yaml 复制代码
test_package:
  path: ../test_package

4.发布

功能测试正常之后就可以准备发布组件了。

git发布

如果不想把组件发布到官方Pub,可以将代码上传到git,然后通过指定git地址来使用。

yaml 复制代码
test_package:
    git:
      url: 'git url'
      ref: 'tag'
发布到官方Pub

发布到Pub,我们需要在yaml文件修改相关的信息,添加version、homepage等。

yaml 复制代码
name: test_package
description: A new Flutter package project.
version: 0.0.1
author: test <test@gmail.com>
homepage: http://gitlab.com/test/test_package

正式发布前先使用命令校验:

dart 复制代码
pub publish --dry-run

配置信息正常的话就不会有提示,否则的话按照提示修改即可。

比较常见的问题有:

  • author后必须带个email地址
  • CHANGELOG.md中必须包含yaml中的版本号
  • 包体积必须小于100MB

由于发布到pub需要科学上网,所以需要配置好代理设置。

网络处理正常后,执行以下指令:

dart 复制代码
flutter packages pub publish --server=https://pub.dartlang.org

第一次发布需要copy地址到google浏览器进行认证。确认成功之后,就可以发布到pub了。

发布成功之后就可以在我们的flutter工程使用pubspec.yaml导入我们的插件了。

yaml 复制代码
test_package: ^0.0.1
发布到私有Pub

首先,需要有一个私有Pub服务。

然后,在组件的pubspec.yaml文件中配置私有pub地址。

yaml 复制代码
publish_to: http://192.168.44.222:8090

最后执行命令:

dart 复制代码
flutter packages pub publish

三、插件开发流程

1.创建插件工程

dart 复制代码
flutter create -i objc -t plugin test_plugin

-i objc参数是指iOS代码使用ObjC语言,如果选择使用Swift,则无需添加此参数。

2.开发

插件的功能需要在lib/ios/android三个目录下开发。插件主要通过MethodChannel在Dart代码和原生代码之间通信。

3.测试

插件的默认工程模板中包含了example,可以直接在该目录中编写测试代码。

iOS工程需要先在example/ios目录下执行pod install安装依赖,然后再使用Xcode打开工程并运行。对于iOS开发者来说,可以使用appuploader这样的工具来简化证书管理和打包上传流程。

4.发布

插件的发布方法和组件相同,具体请参照组件。

iOS开发小贴士

在开发Flutter插件时,iOS端的打包和发布可能会遇到证书配置等问题。这时可以考虑使用appuploader这样的iOS开发助手工具,它可以帮助开发者:

  • 自动管理证书和描述文件
  • 简化打包流程
  • 快速上传应用到App Store Connect

这些工具可以显著提高开发效率,特别是在需要频繁打包测试的情况下。

相关推荐
涡能增压发动积1 天前
同样的代码循环 10次正常 循环 100次就抛异常?自定义 Comparator 的 bug 让我丢尽颜面
后端
Wenweno0o1 天前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
swg3213211 天前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
tyung1 天前
一个 main.go 搞定协作白板:你画一笔,全世界都看见
后端·go
gelald1 天前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川1 天前
深入拆解 Java 内存模型:从原子性、可见性到有序性,彻底搞懂 happen-before 规则
java·后端
元宝骑士1 天前
FIND_IN_SET使用指南:场景、优缺点与MySQL优化策略
后端·mysql
用户31952370347711 天前
记一次 PostgreSQL WAL 日志撑爆磁盘的排查
后端
nghxni1 天前
LightESB PlatformHttp v3.0.0:JSONPath 订单转换 HTTP 路由实战
后端
武子康1 天前
大数据-263 实时数仓-Canal 增量订阅与消费原理:MySQL Binlog 数据同步实践
大数据·hadoop·后端