packages思維及使用Java添加Android平臺特定實現(xiàn)
packages思維
即使軟件包未在Pub。對于未用于公共發(fā)布的特殊插件或尚未準備好發(fā)布的軟件包,可以使用其他依賴選項:
dependencies: flutter: sdk: flutter
路徑依賴性:Flutter應(yīng)用程序可以通過文件系統(tǒng)依賴插件的路徑依賴性。路徑可以是相對路徑,也可以是絕對路徑。
例如,要依賴位于應(yīng)用程序相鄰目錄中的插件“plugin1”,請使用以下語法依賴項:plugin1:path:/plugin1/ Git依賴性:還可以依賴存儲在Git存儲庫中的包。
如果軟件包位于倉庫的根目錄中,請使用以下語法:
dependencies:plugin1:git:url:git://github.com/flutter/plugin1.git
import 'package:flutter/material.dart'; import 'package:css_colors/css_colors.dart'; void main() { runApp(new MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( home: new DemoPage(), ); } } class DemoPage extends StatelessWidget { @override Widget build(BuildContext context) { return new Scaffold( body: new Container(color: CSSColors.orange) ); } }
Git依賴于文件夾中的包:默認情況下,Pub假設(shè)包位于Git存儲庫的根目錄中。如果不是這樣,可以使用path參數(shù)指定位置,例如:dependencies:package1:git:url:git://github.com/flutter/packages.git路徑:packages/package1 最后,可以使用ref參數(shù)來修復(fù)對特定gitcommit、分支或標記的依賴關(guān)系。 當pubspec.yaml以速記方式添加包時,plugin1:這被解釋為plugin1,即可以使用任何版本的包。為了確保包在更新后可以正常使用,我們建議使用以下格式之一指定版本范圍:
范圍限制:指定最小和最大版本號,例如依賴項:url_launcher:'>=0.1.2<0.2.0' 對范圍限制使用插入符號語法:類似于常規(guī)范圍限制。相關(guān)性:集合:“^0.1.2”
import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; void main() { runApp(new MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( home: new DemoPage(), ); } } class DemoPage extends StatelessWidget { launchURL() { launch('https://flutter.io'); } @override Widget build(BuildContext context) { return new Scaffold( body: new Center( child: new RaisedButton( onPressed: launchURL, child: new Text('Show Flutter homepage'), ), ), ); } }
過程實現(xiàn)
步驟1:創(chuàng)建包 要創(chuàng)建插件包,請使用--template=plugin參數(shù)執(zhí)行flutter創(chuàng)建 使用--org選項指定的組織并使用反向域名表示法。該值用于生成的Android和iOS代碼中的各種包和包標識符。 $flutter創(chuàng)建--org com.example--template=plugin hello 這將在hello/文件夾下創(chuàng)建一個包含以下特殊內(nèi)容的插件項目: Lib/你好。part:插件包的Dart API Android/src/main/java.com/yourcompany/hello/HelloPlugin.java:插件包API的Android實現(xiàn)
Ios/類/HelloPlugin。m: 插件包API的ios實現(xiàn) 示例/:一個Flutter應(yīng)用程序,它依賴于插件來解釋如何使用它 默認情況下,插件項目對iOS代碼使用Objective-C,對Android代碼使用Java。如果喜歡Swift或Kotlin,可以使用-i或-a指定iOS或Android的語言。
$ flutter create --template=plugin -i swift -a kotlin hello
Android平臺代碼
我們建議使用Android Studio編輯Android代碼。 在AndroidStudio中編輯Android平臺代碼之前,首先確保代碼至少構(gòu)建了一次(例如,從IntelliJ運行示例應(yīng)用程序或在終端上執(zhí)行cd hello/example;flutter build apk) 下一個
$ flutter packages pub publish --dry-run
啟動Android Studio 在“歡迎使用Android Studio”對話框中,選擇“導(dǎo)入項目”,或在菜單欄“文件>新建>導(dǎo)入項目…”中,然后選擇hello/example/android/build.gradle文件 在“漸變同步”對話框中,選擇“確定” 在“Android Gradle插件更新”對話框中,選擇“不再介意我參與此項目” 插件的Android平臺代碼位于hello/java.com中。的公司。hello/HelloPlugin
dependencies: url_launcher: ^0.4.2
android { // lines skipped dependencies { provided rootProject.findProject(":url_launcher") } }
如果some_包聲明了上述依賴項,other_包聲明一個url_啟動程序版本類似于“0.4.5”或“^0.4.0”,pub將能夠自動解決問題。類似的評論適用于插件包對Gradle模塊和Cocoa pods的平臺特定依賴性。 即使某些軟件包和其他軟件包聲明了不兼容的urls_Launcher版本,該版本可能仍然是_啟動器以兼容的方式工作??梢酝ㄟ^向hello包的pubspec.yaml文件添加依賴重寫語句來強制使用特定版本來處理沖突: 在hello/pubspec.yaml中強制使用url版本0.4.3_ Launcher:
dependencies: some_package: other_package: dependency_overrides: url_launcher: '0.4.3'
如果沖突的依賴項不是一個包,而是一個Android特定的庫,如番石榴,那么依賴項重寫聲明必須添加到Gradle構(gòu)造邏輯中。
configurations.all { resolutionStrategy { force 'com.google.guava:guava:23.0-android' } }
創(chuàng)建Flutter平臺客戶端
應(yīng)用程序的State類具有當前應(yīng)用程序狀態(tài)。我們需要擴展它以保持當前的功率 首先,我們建立渠道。我們使用MethodChannel調(diào)用一個方法來返回電池電量。 通道的客戶端和主機通過通道構(gòu)造函數(shù)中傳遞的通道名稱進行連接。單個應(yīng)用程序中使用的所有頻道名稱必須是唯一的;我們建議在頻道名稱中添加一個唯一的“域名前綴”,例如samples.flatter.io/pattern。
import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; ... class _MyHomePageState extends State<MyHomePage> { static const platform = const MethodChannel('samples.flutter.io/battery'); // Get battery level. }
接下來,我們調(diào)用通道上的方法,指定通過字符串標識符調(diào)用方法getBatteryLevel。調(diào)用可能失敗-例如,如果平臺不支持平臺API(例如,在模擬器中運行時),我們將invokeMethod調(diào)用包裝在try-catch語句中。 我們使用返回的結(jié)果更新setState中的用戶界面狀態(tài)batteryLevel。
String _batteryLevel = 'Unknown battery level.'; Future<Null> _getBatteryLevel() async { String batteryLevel; try { final int result = await platform.invokeMethod('getBatteryLevel'); batteryLevel = 'Battery level at $result % .'; } on PlatformException catch (e) { batteryLevel = "Failed to get battery level: '${e.message}'."; } setState(() { _batteryLevel = batteryLevel; }); }
使用Java添加Android平臺特定的實現(xiàn)
首先在Android Studio中打開Flutter應(yīng)用程序的Android部分: 啟動Android Studio 選擇“文件>打開…” 導(dǎo)航到Flutter應(yīng)用程序目錄,選擇android文件夾,然后單擊“確定” 在java目錄中打開MainActivity.java 接下來,在onCreate中創(chuàng)建MethodChannel并設(shè)置MethodCallHandler。確保使用與Flutter客戶端中使用的頻道名稱相同的頻道名稱。
import io.flutter.app.FlutterActivity; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; public class MainActivity extends FlutterActivity { private static final String CHANNEL = "samples.flutter.io/battery"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler( new MethodCallHandler() { @Override public void onMethodCall(MethodCall call, Result result) { // TODO } }); } }
最后,我們完成了前面添加的onMethodCall方法。我們需要處理名為getBatteryLevel的平臺方法,因此我們檢查它是否是調(diào)用參數(shù)中的getBattery Level。這個平臺方法的實現(xiàn)只需要調(diào)用我們在上一步中編寫的Android代碼,并使用響應(yīng)參數(shù)返回成功和錯誤響應(yīng)。如果調(diào)用了未知方法,我們還將通知返回
以上就是packages思維及使用Java添加Android平臺特定實現(xiàn)的詳細內(nèi)容,更多關(guān)于packages Java添加Android平臺的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
在eclipse中使用SVN的實現(xiàn)方法(圖文教程)
這篇文章主要介紹了在eclipse中使用SVN的實現(xiàn)方法(圖文教程),文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07深入探究Bean生命周期的擴展點Bean Post Processor
在Spring框架中,Bean生命周期的管理是非常重要的一部分,在Bean的創(chuàng)建、初始化和銷毀過程中,Spring提供了一系列的擴展點,其中,Bean Post Processor(后處理器)是一個重要的擴展點,它能夠在Bean的初始化前后做一些額外的處理,本文就和大家一起深入探究2023-07-07Java實戰(zhàn)之網(wǎng)上書店管理系統(tǒng)的實現(xiàn)
本文將利用Java語言實現(xiàn)網(wǎng)上書店管理系統(tǒng)。其功能一般包括:圖書信息管理、用戶信息管理、圖書購買、圖書訂單查看、圖書添加、圖書維護等等,感興趣的可以了解一下2022-06-06Java基礎(chǔ)知識之CharArrayReader流的使用
這篇文章主要介紹了Java基礎(chǔ)知識之CharArrayReader流的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12springboot+chatgpt+chatUI Pro開發(fā)智能聊天工具的實踐
本文主要介紹了springboot+chatgpt+chatUI Pro開發(fā)智能聊天工具的實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-04-04