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