likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 4

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

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

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

1. 创建

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

 dart create -t package <PACKAGE_NAME>

或者我们使用flutter 命令

flutter create --template package <PACKAGE_NAME>

如果是plugin的话也是类似

flutter create --template plugin <PACKAGE_NAME>

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

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

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进行创建

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

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

2. plugin代码编写

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

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

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

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

Cocopods组件化目录

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

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

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

示例代码

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

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

@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中进行执行

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

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

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

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

3. 发布

  • 检查

我们CD到当前demo下执行

flutter packages pub publish --dry-run

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

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

  • pubspec.yaml 配置主页

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

  • License

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

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

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

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

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

配置好后再次执行通过

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

  • 发布
flutter packages pub publish

这里需要认证

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

我们这里要指定服务器

flutter packages pub publish --server=https://pub.dartlang.org

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

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

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

授权成功后就会上传

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

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

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

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

我们去查看上传成功

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

4. 小结

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