Flutter實戰(zhàn) 開發(fā)Flutter插件

2021-03-09 14:02 更新

下面我們通過一個獲取電池電量的插件來介紹一下 Flutter 插件的開發(fā)流程。該插件中我們在 Dart 中通過getBatteryLevel 調(diào)用 Android BatteryManager API 和 iOS device.batteryLevel API。

#創(chuàng)建一個新的應(yīng)用程序項目

首先創(chuàng)建一個新的應(yīng)用程序:

  • 在終端中運(yùn)行:flutter create batterylevel

默認(rèn)情況下,模板支持使用 Java 編寫 Android代碼,或使用 Objective-C 編寫 iOS 代碼。要使用 Kotlin 或 Swift,請使用 -i 和 / 或 -a 標(biāo)志:

  • 在終端中運(yùn)行: flutter create -i swift -a kotlin batterylevel

#創(chuàng)建Flutter平臺客戶端

該應(yīng)用的State類擁有當(dāng)前的應(yīng)用狀態(tài)。我們需要延長這一點以保持當(dāng)前的電量

首先,我們構(gòu)建通道。我們使用MethodChannel調(diào)用一個方法來返回電池電量。

通道的客戶端和宿主通過通道構(gòu)造函數(shù)中傳遞的通道名稱進(jìn)行連接。單個應(yīng)用中使用的所有通道名稱必須是唯一的; 我們建議在通道名稱前加一個唯一的“域名前綴”,例如samples.flutter.io/battery

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)用通道上的方法,指定通過字符串標(biāo)識符調(diào)用方法getBatteryLevel。 該調(diào)用可能失敗(平臺不支持平臺 API,例如在模擬器中運(yùn)行時),所以我們將 invokeMethod 調(diào)用包裝在 try-catch 語句中。

我們使用返回的結(jié)果,在setState中來更新用戶界面狀態(tài)batteryLevel

  // Get battery level.
  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;
    });
  }

最后,我們在 build 創(chuàng)建包含一個小字體顯示電池狀態(tài)和一個用于刷新值的按鈕的用戶界面。

@override
Widget build(BuildContext context) {
  return new Material(
    child: new Center(
      child: new Column(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: [
          new RaisedButton(
            child: new Text('Get Battery Level'),
            onPressed: _getBatteryLevel,
          ),
          new Text(_batteryLevel),
        ],
      ),
    ),
  );
}

至此 Flutter 部分的測試代碼寫好了,接下來我們需要實現(xiàn) Android 和 iOS 平臺下的 API,由于平臺 API 實現(xiàn)部分篇幅較大,我們將在接下來的兩節(jié)中,分別介紹 Android 和 iOS 端 API 的實現(xiàn)。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號