blob: 48eddc8e39b2122553e4621ece802e467fb9d352 [file] [log] [blame]
Sarah Zakarias4a4d1002017-04-05 09:40:35 +02001// Copyright 2017 The Chromium Authors. All rights reserved.
szakarias93c6dbb2017-02-13 11:14:34 +01002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5import 'dart:async';
6
7import 'package:flutter/material.dart';
8import 'package:flutter/services.dart';
9
Sarah Zakariasd2748882017-03-27 11:17:31 +020010class PlatformChannel extends StatefulWidget {
szakarias93c6dbb2017-02-13 11:14:34 +010011 @override
Alexandre Ardhuind927c932018-09-12 08:29:29 +020012 _PlatformChannelState createState() => _PlatformChannelState();
szakarias93c6dbb2017-02-13 11:14:34 +010013}
14
Sarah Zakariasd2748882017-03-27 11:17:31 +020015class _PlatformChannelState extends State<PlatformChannel> {
Mikkel Nygaard Ravn945cfc32017-04-18 15:23:15 +020016 static const MethodChannel methodChannel =
Alexandre Ardhuineda03e22018-08-02 12:02:32 +020017 MethodChannel('samples.flutter.io/battery');
Mikkel Nygaard Ravn945cfc32017-04-18 15:23:15 +020018 static const EventChannel eventChannel =
Alexandre Ardhuineda03e22018-08-02 12:02:32 +020019 EventChannel('samples.flutter.io/charging');
Sarah Zakarias4a4d1002017-04-05 09:40:35 +020020
21 String _batteryLevel = 'Battery level: unknown.';
22 String _chargingStatus = 'Battery status: unknown.';
Michael Thomsen34c63af2017-03-01 17:36:07 +010023
Alexandre Ardhuin0fb84e92018-10-16 22:03:06 +020024 Future<void> _getBatteryLevel() async {
Sarah Zakarias63b9f562017-03-06 11:52:31 +010025 String batteryLevel;
Mikkel Nygaard Ravn898b6f82017-03-14 00:24:41 +010026 try {
Sarah Zakarias4a4d1002017-04-05 09:40:35 +020027 final int result = await methodChannel.invokeMethod('getBatteryLevel');
28 batteryLevel = 'Battery level: $result%.';
29 } on PlatformException {
Alexandre Ardhuin1fce14a2017-10-22 18:11:36 +020030 batteryLevel = 'Failed to get battery level.';
Michael Thomsen55e10a62017-03-02 16:15:52 +010031 }
Michael Thomsen34c63af2017-03-01 17:36:07 +010032 setState(() {
Sarah Zakarias63b9f562017-03-06 11:52:31 +010033 _batteryLevel = batteryLevel;
Michael Thomsen34c63af2017-03-01 17:36:07 +010034 });
35 }
szakarias93c6dbb2017-02-13 11:14:34 +010036
37 @override
Sarah Zakarias4a4d1002017-04-05 09:40:35 +020038 void initState() {
39 super.initState();
40 eventChannel.receiveBroadcastStream().listen(_onEvent, onError: _onError);
41 }
42
Leaf Petersenb3cfa782017-12-21 13:39:03 -080043 void _onEvent(Object event) {
Sarah Zakarias4a4d1002017-04-05 09:40:35 +020044 setState(() {
45 _chargingStatus =
46 "Battery status: ${event == 'charging' ? '' : 'dis'}charging.";
47 });
48 }
49
Siva83799272018-03-16 16:21:33 -070050 void _onError(Object error) {
Sarah Zakarias4a4d1002017-04-05 09:40:35 +020051 setState(() {
Alexandre Ardhuin1fce14a2017-10-22 18:11:36 +020052 _chargingStatus = 'Battery status: unknown.';
Sarah Zakarias4a4d1002017-04-05 09:40:35 +020053 });
54 }
55
56 @override
szakarias93c6dbb2017-02-13 11:14:34 +010057 Widget build(BuildContext context) {
Alexandre Ardhuind927c932018-09-12 08:29:29 +020058 return Material(
59 child: Column(
Sarah Zakarias4a4d1002017-04-05 09:40:35 +020060 mainAxisAlignment: MainAxisAlignment.spaceEvenly,
61 children: <Widget>[
Alexandre Ardhuind927c932018-09-12 08:29:29 +020062 Column(
Sarah Zakarias4a4d1002017-04-05 09:40:35 +020063 mainAxisAlignment: MainAxisAlignment.center,
64 children: <Widget>[
Alexandre Ardhuind927c932018-09-12 08:29:29 +020065 Text(_batteryLevel, key: const Key('Battery level label')),
66 Padding(
Ian Hickson3eb87832017-04-07 12:24:32 -070067 padding: const EdgeInsets.all(16.0),
Alexandre Ardhuind927c932018-09-12 08:29:29 +020068 child: RaisedButton(
Ian Hickson3eb87832017-04-07 12:24:32 -070069 child: const Text('Refresh'),
Sarah Zakarias4a4d1002017-04-05 09:40:35 +020070 onPressed: _getBatteryLevel,
71 ),
72 ),
73 ],
74 ),
Alexandre Ardhuind927c932018-09-12 08:29:29 +020075 Text(_chargingStatus),
Sarah Zakarias4a4d1002017-04-05 09:40:35 +020076 ],
Mikkel Nygaard Ravn898b6f82017-03-14 00:24:41 +010077 ),
szakarias93c6dbb2017-02-13 11:14:34 +010078 );
79 }
szakarias93c6dbb2017-02-13 11:14:34 +010080}
Mikkel Nygaard Ravn898b6f82017-03-14 00:24:41 +010081
szakarias93c6dbb2017-02-13 11:14:34 +010082void main() {
Alexandre Ardhuind927c932018-09-12 08:29:29 +020083 runApp(MaterialApp(home: PlatformChannel()));
szakarias93c6dbb2017-02-13 11:14:34 +010084}