blob: 48eddc8e39b2122553e4621ece802e467fb9d352 [file] [log] [blame]
Sarah Zakariasa94e9952017-03-30 15:11:19 +02001// 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
5import 'dart:async';
6
7import 'package:flutter/material.dart';
8import 'package:flutter/services.dart';
9
10class PlatformChannel extends StatefulWidget {
11 @override
Alexandre Ardhuind927c932018-09-12 08:29:29 +020012 _PlatformChannelState createState() => _PlatformChannelState();
Sarah Zakariasa94e9952017-03-30 15:11:19 +020013}
14
15class _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 Zakarias3dfe2252017-04-18 14:05:33 +020020
21 String _batteryLevel = 'Battery level: unknown.';
22 String _chargingStatus = 'Battery status: unknown.';
Sarah Zakariasa94e9952017-03-30 15:11:19 +020023
Alexandre Ardhuin0fb84e92018-10-16 22:03:06 +020024 Future<void> _getBatteryLevel() async {
Sarah Zakariasa94e9952017-03-30 15:11:19 +020025 String batteryLevel;
26 try {
Sarah Zakarias3dfe2252017-04-18 14:05:33 +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.';
Sarah Zakarias3dfe2252017-04-18 14:05:33 +020031 }
Sarah Zakariasa94e9952017-03-30 15:11:19 +020032 setState(() {
33 _batteryLevel = batteryLevel;
34 });
35 }
36
37 @override
Sarah Zakarias3dfe2252017-04-18 14:05:33 +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 Zakarias3dfe2252017-04-18 14:05:33 +020044 setState(() {
45 _chargingStatus =
46 "Battery status: ${event == 'charging' ? '' : 'dis'}charging.";
47 });
48 }
49
Chris Brackenb23d7022018-05-07 13:10:49 -070050 void _onError(Object error) {
Sarah Zakarias3dfe2252017-04-18 14:05:33 +020051 setState(() {
Alexandre Ardhuin1fce14a2017-10-22 18:11:36 +020052 _chargingStatus = 'Battery status: unknown.';
Sarah Zakarias3dfe2252017-04-18 14:05:33 +020053 });
54 }
55
56 @override
Sarah Zakariasa94e9952017-03-30 15:11:19 +020057 Widget build(BuildContext context) {
Alexandre Ardhuind927c932018-09-12 08:29:29 +020058 return Material(
59 child: Column(
Sarah Zakarias3dfe2252017-04-18 14:05:33 +020060 mainAxisAlignment: MainAxisAlignment.spaceEvenly,
61 children: <Widget>[
Alexandre Ardhuind927c932018-09-12 08:29:29 +020062 Column(
Sarah Zakarias3dfe2252017-04-18 14:05:33 +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(
Sarah Zakarias3dfe2252017-04-18 14:05:33 +020067 padding: const EdgeInsets.all(16.0),
Alexandre Ardhuind927c932018-09-12 08:29:29 +020068 child: RaisedButton(
Sarah Zakarias3dfe2252017-04-18 14:05:33 +020069 child: const Text('Refresh'),
70 onPressed: _getBatteryLevel,
71 ),
72 ),
73 ],
74 ),
Alexandre Ardhuind927c932018-09-12 08:29:29 +020075 Text(_chargingStatus),
Sarah Zakarias3dfe2252017-04-18 14:05:33 +020076 ],
Sarah Zakariasa94e9952017-03-30 15:11:19 +020077 ),
78 );
79 }
80}
81
82void main() {
Alexandre Ardhuind927c932018-09-12 08:29:29 +020083 runApp(MaterialApp(home: PlatformChannel()));
Sarah Zakariasa94e9952017-03-30 15:11:19 +020084}