• flutter 调用原生(获取当前设备电池电量)


    代码:

    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    import 'dart:async';
    
    
    class BatteryPage extends StatefulWidget {
      @override
      _BatteryPageState createState() {
        return new _BatteryPageState();
      }
    }
    
    class _BatteryPageState extends State<BatteryPage> {
      static const platform = const MethodChannel('samples.flutter.io/battery');
    
      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;
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return new Material(
          child: new Center(
            child: new Column(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                new RaisedButton(
                  onPressed: _getBatteryLevel,
                  child: new Text('Get Battery Level'),
                ),
                new Text(_batteryLevel),
              ],
            ),
          ),
        );
      }
    }

    iOS 的代码

    AppDelegate.m

    #include "AppDelegate.h"
    #include "GeneratedPluginRegistrant.h"
    
    @implementation AppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      [GeneratedPluginRegistrant registerWithRegistry:self];
      // Override point for customization after application launch.
        
        FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController;
        FlutterMethodChannel* batteryChannel = [FlutterMethodChannel methodChannelWithName:@"samples.flutter.io/battery" binaryMessenger:controller];
        
        [batteryChannel setMethodCallHandler:^(FlutterMethodCall * _Nonnull call, FlutterResult  _Nonnull result) {
            if ([@"getBatteryLevel" isEqualToString:call.method]) {
                int batteryLevel = [self getBatteryLabel];
                if (batteryLevel == -1) {
                    result( [FlutterError errorWithCode:@"UNAVAILABLE" message:@"Battery info unavailable" details:nil]);
                } else {
                    result (@(batteryLevel));
                }
            } else {
                result(FlutterMethodNotImplemented);
            }
        }];
        
        return [super application:application didFinishLaunchingWithOptions:launchOptions];
    }
    
    - (int) getBatteryLabel {
        UIDevice* device = [UIDevice currentDevice];
        device.batteryMonitoringEnabled = YES;
        if (device.batteryState == UIDeviceBatteryStateUnknown) {
            return -1;
        } else {
            return (int)(device.batteryLevel * 100);
        }
    }
    
    @end

    Android的代码

    (以后再补充。。。)

  • 相关阅读:
    P1847 轰炸II
    c++ 如何对拍
    P2689 东南西北
    P2006 赵神牛的游戏
    P1320 压缩技术(续集版)
    vuex
    less
    将二维数组转化成一维数组
    剩余数组(从'水果数组'筛选掉'吃了的数组')
    将一维数组转化成二维数组
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/10244468.html
Copyright © 2020-2023  润新知