Flutter中Plugin的创建与发布 (超详细教程)

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情

题记:我们在开发flutter项目的时候通常会使用一些三方的的packages或者plugin,关于packages和plugin直接的区别主要是:packages主要是包含的Dart代码块,而plugin则包含iOS和android的代码。

因此来说我们创建pluginpackages的流程是类似的,这里就以创建plugin为例进行展示 我们可以看下官方的文档如何创建packages

image.png

1. 创建

我们可以通过终端命令进行创建,比如创建package,使用dart命令

 dart create -t package <PACKAGE_NAME>
复制代码

或者我们使用flutter 命令

flutter create --template package <PACKAGE_NAME>
复制代码

如果是plugin的话也是类似

flutter create --template plugin <PACKAGE_NAME>
复制代码

image.png

这里会提示说没有指定运行平台,可以在该项目下运行

flutter create -t plugin --platforms <platforms>
复制代码

创建plugin的时候需要使用--org 设置组织名

flutter create --org com.example --template plugin <PACKAGE_NAME>
复制代码
  • 指定语言
flutter create --template plugin -i swift -a kotlin <PACKAGE_NAME>
复制代码

当然我们可以使用AndroidStudio进行创建

image.png

你可以选择自己想要的类型,包括plugin,module,packages等,以及组织名和平台以及语言

2. plugin代码编写

我们打开创建好的plugin项目,这里可以看到有个example是可以运行的

image.png

lib中有iOSandroid目录,用于存放我们iOSandroid的代码,但是不可运行,这里是不是和我们的组件化很像

image.png

Cocopods组件化目录

image.png

我们这里看下官方的列子就是获取当前运行的版本号

image.png

示例代码

image.png

我们可以仿照写一点我们自己的代码比如获取手机电量

@visibleForTesting
final methodChannel = const MethodChannel('by_example_plugin');

@override
Future<String?> getPlatformVersion() async {
  final version = await methodChannel.invokeMethod<String>('getPlatformVersion');
  return version;
}
 Future<String?> getBatteryLevel() async {
  int batteryLevel = await methodChannel.invokeMethod('getBatteryLevel');
  return batteryLevel.toString();
}
复制代码

我们在iOS端进行注册

public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {

   if (call.method == "getBatteryLevel") {

       receiveBatteryLevel(result: result)

  }else {

          result("iOS " + UIDevice.current.systemVersion)

  }


  }

    private func receiveBatteryLevel(result: FlutterResult) {

      let device = UIDevice.current

      device.isBatteryMonitoringEnabled = true

      if device.batteryState == UIDevice.BatteryState.unknown {

        result(FlutterError(code: "UNAVAILABLE",

                            message: "Battery level not available.",

                            details: nil))

      } else {

        result(Int(device.batteryLevel * 100))

      }

    }
复制代码

dart中的页面可以仿照 example中进行执行

image.png

模拟器无法获取电量我们使用真机

IMG_3089.PNG

这样就可以了,至于android代码也是类似的可以查下教程。我们可以仿照案列的交互方式学习官方原生和flutter交互的代码风格

3. 发布

  • 检查

我们CD到当前demo下执行

flutter packages pub publish --dry-run
复制代码

image.png 这里报错

image.png

  • pubspec.yaml 配置主页

image.png

  • License

我们使用GitHub创建一个license,这里名字随便起,license选择BSD3

image.png

把创建好的license放入 plugin中的License文件

image.png

image.png

配置好后再次执行通过

image.png

  • 发布
flutter packages pub publish

复制代码

这里需要认证

image.png

我们这里要指定服务器

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

image.png

复制上面的链接进行授权,这里就要用到谷歌账号,授权成功

image.png

授权成功后就会上传

image.png

这里说我们没有描述,我们添加描述 我们看下官方文档的描述要求dart.dev/tools/pub/p… 要求60-180

image.png

再次上传 image.png

我们去查看上传成功

image.png

4. 小结

以上就是flutter中plugin创建与发布,对于packages也是类似。中间的一些要点主要包括License,描述,主页等,当然也要有谷歌账号以及外网条件。中间对于一些图片资源的使用以及一些导入的技巧或者引用三方的库后续有机会在分享,感觉有用的点个赞或者收藏下下次方便你自己操作哦。

猜你喜欢

转载自juejin.im/post/7125788252316893221