欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)邀請(qǐng)碼778899分享:flutter插件開發(fā)基礎(chǔ)教程

柚子快報(bào)邀請(qǐng)碼778899分享:flutter插件開發(fā)基礎(chǔ)教程

http://yzkb.51969.com/

前言

雖然現(xiàn)在已經(jīng)有很多插件了,但是有時(shí)候還是需要自己開發(fā)一個(gè)插件。因此打算學(xué)習(xí)一下如何開發(fā)一個(gè)插件。這里只考慮安卓,安卓使用kotlin,kotlin不會(huì)也沒事,我也不會(huì)。

參考項(xiàng)目:https://github.com/TBoyLi/flutter_plugin_learning

參考教程:https://www.jianshu.com/p/9fc6747fc7c4

創(chuàng)建插件項(xiàng)目

1、文件、新建、新建flutter項(xiàng)目 2、選擇flutter、下一步 3、維護(hù)好基礎(chǔ)信息,項(xiàng)目類型選擇插件

開發(fā)

項(xiàng)目目錄如下,后續(xù)需要編寫的文件是

BatterylevelPlugin.kt 編寫原生代碼batterylevel.dart 編寫dart代碼,flutter項(xiàng)目中會(huì)使用該文件batterylevel_method_channel.dart 用于編寫與原生通信的邏輯batterylevel_platform_interface.dart 定義了需要實(shí)現(xiàn)哪些方法

在batterylevel_platform_interface.dart定義了一個(gè)獲取平臺(tái)接口的方法。 在batterylevel_method_channel.dart中重新了該方法,并與原生通信 在BatterylevelPlugin.kt 實(shí)現(xiàn)了原生邏輯

安裝上面的方式,我們定義一個(gè)獲取當(dāng)前電量的方法。 batterylevel_platform_interface.dart

// 獲取電池電量

Future getBatteryLevel() {

throw UnimplementedError('getBatteryLevel() has not been implemented.');

}

batterylevel_method_channel.dart

/// 獲取電池電量

@override

Future getBatteryLevel() async {

final level = await methodChannel.invokeMethod('getBatteryLevel');

return level;

}

BatterylevelPlugin.kt

編寫原生代碼時(shí),創(chuàng)建一個(gè)新的窗口打開安卓部分,這樣會(huì)有提示,也不會(huì)出現(xiàn)報(bào)錯(cuò)。 選中項(xiàng)目,鼠標(biāo)右鍵

打開后,兩邊對(duì)照一下,別打開錯(cuò)了。

/** BatterylevelPlugin */

class BatterylevelPlugin: FlutterPlugin, MethodCallHandler {

private lateinit var channel : MethodChannel

// 獲取上下文對(duì)象

private var applicationContext: Context? = null

// 注冊(cè)插件到flutter引擎

override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {

// 上下文對(duì)象

applicationContext = flutterPluginBinding.applicationContext

// 創(chuàng)建通道

channel = MethodChannel(flutterPluginBinding.binaryMessenger, "batterylevel")

channel.setMethodCallHandler(this)

}

override fun onMethodCall(call: MethodCall, result: Result) {

// 判斷通信方法的名稱,實(shí)現(xiàn)獲取平臺(tái)版本

if (call.method == "getPlatformVersion") {

result.success("Android ${android.os.Build.VERSION.RELEASE}")

} else if(call.method=="getBatteryLevel"){

// 返回電量

val batteryLevel = getBatteryLevel()

if (batteryLevel != -1) {

result.success(batteryLevel)

} else {

result.error("UNAVAILABLE", "Battery level not available.", null)

}

}

else {

result.notImplemented()

}

}

// 獲取電池電量

private fun getBatteryLevel(): Int {

var batteryLevel = -1

batteryLevel = if (VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

val batteryManager = applicationContext?.let { getSystemService(it, BatteryManager::class.java) }

batteryManager!!.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)

} else {

val intent = ContextWrapper(applicationContext).registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))

(intent?.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) ?: -1) * 100 / (intent?.getIntExtra(BatteryManager.EXTRA_SCALE, -1)

?: -1)

}

return batteryLevel

}

override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {

channel.setMethodCallHandler(null)

}

}

batterylevel.dart

// 獲取電池電量

Future getBatteryLevel() {

return BatterylevelPlatform.instance.getBatteryLevel();

}

測(cè)試

在插件的example里測(cè)試

example下的main.dart

class _MyAppState extends State {

String _platformVersion = 'Unknown';

final _batterylevelPlugin = Batterylevel();

// 電量

String batteryLevel = '';

@override

void initState() {

super.initState();

initPlatformState();

}

///獲取版本號(hào)

Future initPlatformState() async {

String platformVersion;

// Platform messages may fail, so we use a try/catch PlatformException.

// We also handle the message potentially returning null.

try {

platformVersion = await _batterylevelPlugin.getPlatformVersion() ??

'Unknown platform version';

} on PlatformException {

platformVersion = 'Failed to get platform version.';

}

if (!mounted) return;

setState(() {

_platformVersion = platformVersion;

});

}

// 獲取電量

Future getBatteryLevel() async {

try {

int res = await _batterylevelPlugin.getBatteryLevel() ?? 0;

batteryLevel = res.toString();

} on PlatformException {

batteryLevel = 'Failed to get battery level.';

}

// 更新

setState(() {});

}

@override

Widget build(BuildContext context) {

return MaterialApp(

home: Scaffold(

appBar: AppBar(

title: const Text('Plugin example app'),

),

body: Center(

child: Column(

children: [

Text('Running on: $_platformVersion\n'),

Text('電量:$batteryLevel\n'),

ElevatedButton(onPressed: (){

getBatteryLevel();

}, child: const Text("獲取電量"))

],

),

),

),

);

}

}

在flutter項(xiàng)目里加載本地的這個(gè)插件

最開始是打算直接在項(xiàng)目里引入插件的,奈何引入后一直提示路徑不對(duì)。因此改成通過git引入 1、將你的插件提交到git倉(cāng)庫(kù) 2、在flutter項(xiàng)目的pubspec.yaml引入插件 3、運(yùn)行 flutter pub get 獲取依賴

下載的依賴一般都在用戶目錄下,如下圖 4、就跟其他依賴一樣,正常使用即可

class _MyHomePageState extends State {

// 獲取電池電量的本地插件

final Batterylevel batteryLevel = Batterylevel();

// 當(dāng)前電量

int batteryLevelValue = 0;

@override

Widget build(BuildContext context) {

return Scaffold(

appBar: AppBar(

backgroundColor: Theme.of(context).colorScheme.inversePrimary,

title: Text(widget.title),

),

body: Center(

child: Column(

mainAxisAlignment: MainAxisAlignment.center,

children: [

Text("當(dāng)前電量是:$batteryLevelValue"),

ElevatedButton(

child: const Text("獲取電量"),

onPressed: () async {

int res = await batteryLevel.getBatteryLevel() ?? 0;

setState(() {

batteryLevelValue = res;

});

})

],

),

),

);

}

}

柚子快報(bào)邀請(qǐng)碼778899分享:flutter插件開發(fā)基礎(chǔ)教程

http://yzkb.51969.com/

文章來源

評(píng)論可見,查看隱藏內(nèi)容
大家都在看:

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18574620.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄