作者在研究开发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、在各平台各取所需,不用把所有的代码都集成到项目里去。
网友评论