flutter plugin开发

作者在研究开发plugin支持各个平台需要处理的事情。

1、plugin 官方文档:

https://flutter.dev/docs/development/packages-and-plugins/developing-packages#plugin-platforms

flutter create --org com.example --template=plugin --platforms=macos,ios,windows,web hello2

使用命令行后,在Mac下不能创建windows相关文件,应该是不支持,要去windows下试试。

2、官方plugin地址

https://github.com/flutter/plugins/tree/master/packages/

3、官方plugin实现解读

查看了下,plugin各个平台实现都是单独的plugin项目,我们常用的url_launcher,实际上是6个plugin项目。。emmmm。。。


image.png

基本说明,各个平台都需要相关知识人员去实现,好吧,我做不到。。。
我们项目里使用的时候引用的就是第一个url_launcher,然后查看url_launcher的pubspec.yaml文件,

flutter:
  plugin:
    platforms:
      android:
        package: io.flutter.plugins.urllauncher
        pluginClass: UrlLauncherPlugin
      ios:
        pluginClass: FLTURLLauncherPlugin
      web:
        default_package: url_launcher_web
      linux:
        default_package: url_laucher_linux
      macos:
        default_package: url_laucher_macos
      windows:
        default_package: url_laucher_windows

dependencies:
  flutter:
    sdk: flutter
  url_launcher_platform_interface: ^1.0.9
  url_launcher_web: ^0.1.5
  url_launcher_linux: ^0.0.1
  url_launcher_macos: ^0.0.1
  url_launcher_windows: ^0.0.1

可以看到各个平台引用是不一样的,有pluginClass和default_package,pluginClass就是在当前plugin项目里实现了,直接引用这个类,default_package是引用包,这里可以理解为额外的第三方包依赖(这个包应该也可以在当前plugin项目里实现,然后引用)。

4、windows平台

我们打开url_laucher_windows里面的pubspec.yaml文件

name: url_launcher_windows
description: Windows implementation of the url_launcher plugin.
version: 2.0.0
homepage: https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher_windows

flutter:
  plugin:
    implements: url_launcher
    platforms:
      windows:
        pluginClass: UrlLauncherPlugin

再来看下文件目录:


image.png

.cpp文件,作者知识盲区了,就不看具体代码了。。

5、总结

首先,一个plugin是可以搞定所有平台的,但是为什么官方这里要分开呢,我觉得以下2个原因:
1、这不是一个人在写呀,分开写对于各个平台的开发人员多友好。
2、在各平台各取所需,不用把所有的代码都集成到项目里去。

你可能感兴趣的:(flutter plugin开发)