Sarah Zakarias | a94e995 | 2017-03-30 15:11:19 +0200 | [diff] [blame] | 1 | // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | import 'dart:async'; |
| 6 | |
| 7 | import 'package:flutter/material.dart'; |
| 8 | import 'package:flutter/services.dart'; |
| 9 | |
| 10 | class PlatformChannel extends StatefulWidget { |
| 11 | @override |
Alexandre Ardhuin | d927c93 | 2018-09-12 08:29:29 +0200 | [diff] [blame] | 12 | _PlatformChannelState createState() => _PlatformChannelState(); |
Sarah Zakarias | a94e995 | 2017-03-30 15:11:19 +0200 | [diff] [blame] | 13 | } |
| 14 | |
| 15 | class _PlatformChannelState extends State<PlatformChannel> { |
Mikkel Nygaard Ravn | 945cfc3 | 2017-04-18 15:23:15 +0200 | [diff] [blame] | 16 | static const MethodChannel methodChannel = |
Alexandre Ardhuin | eda03e2 | 2018-08-02 12:02:32 +0200 | [diff] [blame] | 17 | MethodChannel('samples.flutter.io/battery'); |
Mikkel Nygaard Ravn | 945cfc3 | 2017-04-18 15:23:15 +0200 | [diff] [blame] | 18 | static const EventChannel eventChannel = |
Alexandre Ardhuin | eda03e2 | 2018-08-02 12:02:32 +0200 | [diff] [blame] | 19 | EventChannel('samples.flutter.io/charging'); |
Sarah Zakarias | 3dfe225 | 2017-04-18 14:05:33 +0200 | [diff] [blame] | 20 | |
| 21 | String _batteryLevel = 'Battery level: unknown.'; |
| 22 | String _chargingStatus = 'Battery status: unknown.'; |
Sarah Zakarias | a94e995 | 2017-03-30 15:11:19 +0200 | [diff] [blame] | 23 | |
Alexandre Ardhuin | 0fb84e9 | 2018-10-16 22:03:06 +0200 | [diff] [blame] | 24 | Future<void> _getBatteryLevel() async { |
Sarah Zakarias | a94e995 | 2017-03-30 15:11:19 +0200 | [diff] [blame] | 25 | String batteryLevel; |
| 26 | try { |
Sarah Zakarias | 3dfe225 | 2017-04-18 14:05:33 +0200 | [diff] [blame] | 27 | final int result = await methodChannel.invokeMethod('getBatteryLevel'); |
| 28 | batteryLevel = 'Battery level: $result%.'; |
| 29 | } on PlatformException { |
Alexandre Ardhuin | 1fce14a | 2017-10-22 18:11:36 +0200 | [diff] [blame] | 30 | batteryLevel = 'Failed to get battery level.'; |
Sarah Zakarias | 3dfe225 | 2017-04-18 14:05:33 +0200 | [diff] [blame] | 31 | } |
Sarah Zakarias | a94e995 | 2017-03-30 15:11:19 +0200 | [diff] [blame] | 32 | setState(() { |
| 33 | _batteryLevel = batteryLevel; |
| 34 | }); |
| 35 | } |
| 36 | |
| 37 | @override |
Sarah Zakarias | 3dfe225 | 2017-04-18 14:05:33 +0200 | [diff] [blame] | 38 | void initState() { |
| 39 | super.initState(); |
| 40 | eventChannel.receiveBroadcastStream().listen(_onEvent, onError: _onError); |
| 41 | } |
| 42 | |
Leaf Petersen | b3cfa78 | 2017-12-21 13:39:03 -0800 | [diff] [blame] | 43 | void _onEvent(Object event) { |
Sarah Zakarias | 3dfe225 | 2017-04-18 14:05:33 +0200 | [diff] [blame] | 44 | setState(() { |
| 45 | _chargingStatus = |
| 46 | "Battery status: ${event == 'charging' ? '' : 'dis'}charging."; |
| 47 | }); |
| 48 | } |
| 49 | |
Chris Bracken | b23d702 | 2018-05-07 13:10:49 -0700 | [diff] [blame] | 50 | void _onError(Object error) { |
Sarah Zakarias | 3dfe225 | 2017-04-18 14:05:33 +0200 | [diff] [blame] | 51 | setState(() { |
Alexandre Ardhuin | 1fce14a | 2017-10-22 18:11:36 +0200 | [diff] [blame] | 52 | _chargingStatus = 'Battery status: unknown.'; |
Sarah Zakarias | 3dfe225 | 2017-04-18 14:05:33 +0200 | [diff] [blame] | 53 | }); |
| 54 | } |
| 55 | |
| 56 | @override |
Sarah Zakarias | a94e995 | 2017-03-30 15:11:19 +0200 | [diff] [blame] | 57 | Widget build(BuildContext context) { |
Alexandre Ardhuin | d927c93 | 2018-09-12 08:29:29 +0200 | [diff] [blame] | 58 | return Material( |
| 59 | child: Column( |
Sarah Zakarias | 3dfe225 | 2017-04-18 14:05:33 +0200 | [diff] [blame] | 60 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, |
| 61 | children: <Widget>[ |
Alexandre Ardhuin | d927c93 | 2018-09-12 08:29:29 +0200 | [diff] [blame] | 62 | Column( |
Sarah Zakarias | 3dfe225 | 2017-04-18 14:05:33 +0200 | [diff] [blame] | 63 | mainAxisAlignment: MainAxisAlignment.center, |
| 64 | children: <Widget>[ |
Alexandre Ardhuin | d927c93 | 2018-09-12 08:29:29 +0200 | [diff] [blame] | 65 | Text(_batteryLevel, key: const Key('Battery level label')), |
| 66 | Padding( |
Sarah Zakarias | 3dfe225 | 2017-04-18 14:05:33 +0200 | [diff] [blame] | 67 | padding: const EdgeInsets.all(16.0), |
Alexandre Ardhuin | d927c93 | 2018-09-12 08:29:29 +0200 | [diff] [blame] | 68 | child: RaisedButton( |
Sarah Zakarias | 3dfe225 | 2017-04-18 14:05:33 +0200 | [diff] [blame] | 69 | child: const Text('Refresh'), |
| 70 | onPressed: _getBatteryLevel, |
| 71 | ), |
| 72 | ), |
| 73 | ], |
| 74 | ), |
Alexandre Ardhuin | d927c93 | 2018-09-12 08:29:29 +0200 | [diff] [blame] | 75 | Text(_chargingStatus), |
Sarah Zakarias | 3dfe225 | 2017-04-18 14:05:33 +0200 | [diff] [blame] | 76 | ], |
Sarah Zakarias | a94e995 | 2017-03-30 15:11:19 +0200 | [diff] [blame] | 77 | ), |
| 78 | ); |
| 79 | } |
| 80 | } |
| 81 | |
| 82 | void main() { |
Alexandre Ardhuin | d927c93 | 2018-09-12 08:29:29 +0200 | [diff] [blame] | 83 | runApp(MaterialApp(home: PlatformChannel())); |
Sarah Zakarias | a94e995 | 2017-03-30 15:11:19 +0200 | [diff] [blame] | 84 | } |