Sarah Zakarias | 4a4d100 | 2017-04-05 09:40:35 +0200 | [diff] [blame] | 1 | // Copyright 2017 The Chromium Authors. All rights reserved. |
szakarias | 93c6dbb | 2017-02-13 11:14:34 +0100 | [diff] [blame] | 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 | |
Sarah Zakarias | d274888 | 2017-03-27 11:17:31 +0200 | [diff] [blame] | 10 | class PlatformChannel extends StatefulWidget { |
szakarias | 93c6dbb | 2017-02-13 11:14:34 +0100 | [diff] [blame] | 11 | @override |
Alexandre Ardhuin | d927c93 | 2018-09-12 08:29:29 +0200 | [diff] [blame] | 12 | _PlatformChannelState createState() => _PlatformChannelState(); |
szakarias | 93c6dbb | 2017-02-13 11:14:34 +0100 | [diff] [blame] | 13 | } |
| 14 | |
Sarah Zakarias | d274888 | 2017-03-27 11:17:31 +0200 | [diff] [blame] | 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 | 4a4d100 | 2017-04-05 09:40:35 +0200 | [diff] [blame] | 20 | |
| 21 | String _batteryLevel = 'Battery level: unknown.'; |
| 22 | String _chargingStatus = 'Battery status: unknown.'; |
Michael Thomsen | 34c63af | 2017-03-01 17:36:07 +0100 | [diff] [blame] | 23 | |
Alexandre Ardhuin | 0fb84e9 | 2018-10-16 22:03:06 +0200 | [diff] [blame] | 24 | Future<void> _getBatteryLevel() async { |
Sarah Zakarias | 63b9f56 | 2017-03-06 11:52:31 +0100 | [diff] [blame] | 25 | String batteryLevel; |
Mikkel Nygaard Ravn | 898b6f8 | 2017-03-14 00:24:41 +0100 | [diff] [blame] | 26 | try { |
Sarah Zakarias | 4a4d100 | 2017-04-05 09:40:35 +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.'; |
Michael Thomsen | 55e10a6 | 2017-03-02 16:15:52 +0100 | [diff] [blame] | 31 | } |
Michael Thomsen | 34c63af | 2017-03-01 17:36:07 +0100 | [diff] [blame] | 32 | setState(() { |
Sarah Zakarias | 63b9f56 | 2017-03-06 11:52:31 +0100 | [diff] [blame] | 33 | _batteryLevel = batteryLevel; |
Michael Thomsen | 34c63af | 2017-03-01 17:36:07 +0100 | [diff] [blame] | 34 | }); |
| 35 | } |
szakarias | 93c6dbb | 2017-02-13 11:14:34 +0100 | [diff] [blame] | 36 | |
| 37 | @override |
Sarah Zakarias | 4a4d100 | 2017-04-05 09:40:35 +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 | 4a4d100 | 2017-04-05 09:40:35 +0200 | [diff] [blame] | 44 | setState(() { |
| 45 | _chargingStatus = |
| 46 | "Battery status: ${event == 'charging' ? '' : 'dis'}charging."; |
| 47 | }); |
| 48 | } |
| 49 | |
Siva | 8379927 | 2018-03-16 16:21:33 -0700 | [diff] [blame] | 50 | void _onError(Object error) { |
Sarah Zakarias | 4a4d100 | 2017-04-05 09:40:35 +0200 | [diff] [blame] | 51 | setState(() { |
Alexandre Ardhuin | 1fce14a | 2017-10-22 18:11:36 +0200 | [diff] [blame] | 52 | _chargingStatus = 'Battery status: unknown.'; |
Sarah Zakarias | 4a4d100 | 2017-04-05 09:40:35 +0200 | [diff] [blame] | 53 | }); |
| 54 | } |
| 55 | |
| 56 | @override |
szakarias | 93c6dbb | 2017-02-13 11:14:34 +0100 | [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 | 4a4d100 | 2017-04-05 09:40:35 +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 | 4a4d100 | 2017-04-05 09:40:35 +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( |
Ian Hickson | 3eb8783 | 2017-04-07 12:24:32 -0700 | [diff] [blame] | 67 | padding: const EdgeInsets.all(16.0), |
Alexandre Ardhuin | d927c93 | 2018-09-12 08:29:29 +0200 | [diff] [blame] | 68 | child: RaisedButton( |
Ian Hickson | 3eb8783 | 2017-04-07 12:24:32 -0700 | [diff] [blame] | 69 | child: const Text('Refresh'), |
Sarah Zakarias | 4a4d100 | 2017-04-05 09:40:35 +0200 | [diff] [blame] | 70 | onPressed: _getBatteryLevel, |
| 71 | ), |
| 72 | ), |
| 73 | ], |
| 74 | ), |
Alexandre Ardhuin | d927c93 | 2018-09-12 08:29:29 +0200 | [diff] [blame] | 75 | Text(_chargingStatus), |
Sarah Zakarias | 4a4d100 | 2017-04-05 09:40:35 +0200 | [diff] [blame] | 76 | ], |
Mikkel Nygaard Ravn | 898b6f8 | 2017-03-14 00:24:41 +0100 | [diff] [blame] | 77 | ), |
szakarias | 93c6dbb | 2017-02-13 11:14:34 +0100 | [diff] [blame] | 78 | ); |
| 79 | } |
szakarias | 93c6dbb | 2017-02-13 11:14:34 +0100 | [diff] [blame] | 80 | } |
Mikkel Nygaard Ravn | 898b6f8 | 2017-03-14 00:24:41 +0100 | [diff] [blame] | 81 | |
szakarias | 93c6dbb | 2017-02-13 11:14:34 +0100 | [diff] [blame] | 82 | void main() { |
Alexandre Ardhuin | d927c93 | 2018-09-12 08:29:29 +0200 | [diff] [blame] | 83 | runApp(MaterialApp(home: PlatformChannel())); |
szakarias | 93c6dbb | 2017-02-13 11:14:34 +0100 | [diff] [blame] | 84 | } |