作者在研究開發(fā)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下不能創(chuàng)建windows相關(guān)文件,應(yīng)該是不支持铜犬,要去windows下試試舞终。
2、官方plugin地址
https://github.com/flutter/plugins/tree/master/packages/
3癣猾、官方plugin實現(xiàn)解讀
查看了下敛劝,plugin各個平臺實現(xiàn)都是單獨的plugin項目,我們常用的url_launcher纷宇,實際上是6個plugin項目夸盟。。emmmm像捶。上陕。。
基本說明拓春,各個平臺都需要相關(guān)知識人員去實現(xiàn)释簿,好吧,我做不到硼莽。辕万。。
我們項目里使用的時候引用的就是第一個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就是在當(dāng)前plugin項目里實現(xiàn)了矾瑰,直接引用這個類砖茸,default_package是引用包,這里可以理解為額外的第三方包依賴(這個包應(yīng)該也可以在當(dāng)前plugin項目里實現(xiàn)殴穴,然后引用)凉夯。
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
再來看下文件目錄:
.cpp文件,作者知識盲區(qū)了劲够,就不看具體代碼了震桶。。
5征绎、總結(jié)
首先蹲姐,一個plugin是可以搞定所有平臺的,但是為什么官方這里要分開呢人柿,我覺得以下2個原因:
1柴墩、這不是一個人在寫呀,分開寫對于各個平臺的開發(fā)人員多友好凫岖。
2江咳、在各平臺各取所需,不用把所有的代碼都集成到項目里去哥放。