1
- import 'dart:async' ;
2
-
3
1
import 'package:flutter/material.dart' ;
4
- import 'package:flutter/services.dart' ;
5
2
import 'package:permission_handler/permission_enums.dart' ;
6
3
import 'package:permission_handler/permission_handler.dart' ;
7
4
8
5
void main () => runApp (new MyApp ());
9
6
10
- class MyApp extends StatefulWidget {
11
- @override
12
- _MyAppState createState () => new _MyAppState ();
13
- }
14
-
15
- class _MyAppState extends State <MyApp > {
16
- String _permissionStatus = 'Unknown' ;
17
-
7
+ class MyApp extends StatelessWidget {
8
+
18
9
@override
19
- void initState () {
20
- super .initState ();
21
- initPlatformState ();
10
+ Widget build (BuildContext context) {
11
+ return new MaterialApp (
12
+ home: new Scaffold (
13
+ appBar: new AppBar (
14
+ title: const Text ('Plugin example app' ),
15
+ ),
16
+ body: new Center (
17
+ child: new ListView (
18
+ children: PermissionGroup .values
19
+ .where ((PermissionGroup permission) => permission != PermissionGroup .unknown)
20
+ .map ((PermissionGroup permission) => new PermissionWidget (permission)).toList ()
21
+ ),
22
+ ),
23
+ ));
22
24
}
25
+ }
23
26
24
- // Platform messages are asynchronous, so we initialize in an async method.
25
- Future <void > initPlatformState () async {
26
- PermissionStatus permissionStatus;
27
+ class PermissionWidget extends StatefulWidget {
28
+ final PermissionGroup _permissionGroup;
27
29
28
- // Platform messages may fail, so we use a try/catch PlatformException.
29
- try {
30
- permissionStatus = await PermissionHandler
31
- .checkPermissionStatus (PermissionGroup .calendar);
30
+ const PermissionWidget (this ._permissionGroup);
32
31
33
- /*
34
- if (permissionStatus != PermissionStatus.granted) {
35
- final bool shouldShowRationale = await PermissionHandler
36
- .shouldShowRequestPermissionRationale(PermissionGroup.calendar);
32
+ @override
33
+ _PermissionState createState () => _PermissionState (_permissionGroup);
34
+ }
37
35
38
- if (shouldShowRationale) {
39
- final Map<PermissionGroup, PermissionStatus> permissions =
40
- await PermissionHandler.requestPermissions(
41
- <PermissionGroup>[PermissionGroup.calendar]);
36
+ class _PermissionState extends State <PermissionWidget > {
37
+ final PermissionGroup _permissionGroup;
38
+ PermissionStatus _permissionStatus = PermissionStatus .unknown;
42
39
43
- if (permissions.containsKey(PermissionGroup.calendar)) {
44
- permissionStatus = permissions[PermissionGroup.calendar];
45
- }
46
- }
47
- }
48
- */
49
- } on PlatformException {
50
- permissionStatus = PermissionStatus .unknown;
51
- }
40
+ _PermissionState (this ._permissionGroup);
41
+
42
+ @override
43
+ void initState () {
44
+ super .initState ();
52
45
53
- // If the widget was removed from the tree while the asynchronous platform
54
- // message was in flight, we want to discard the reply rather than calling
55
- // setState to update our non-existent appearance.
56
- if (! mounted) {
57
- return ;
58
- }
46
+ _listenForPermissionStatus ();
47
+ }
59
48
60
- setState (() {
61
- _permissionStatus = permissionStatus .toString ();
62
- } );
49
+ void _listenForPermissionStatus () async {
50
+ print (_permissionGroup .toString () );
51
+ _permissionStatus = await PermissionHandler . checkPermissionStatus (_permissionGroup );
63
52
}
64
53
65
- @override
54
+ @override
66
55
Widget build (BuildContext context) {
67
- return new MaterialApp (
68
- home: new Scaffold (
69
- appBar: new AppBar (
70
- title: const Text ('Plugin example app' ),
71
- ),
72
- body: new Center (
73
- child: new Column (
74
- children: < Widget > [
75
- new Text ('Running on: $_permissionStatus \n ' ),
76
- new RaisedButton (
77
- child: const Text ('Open settings' ),
78
- onPressed: () async =>
79
- await PermissionHandler .openAppSettings (),
80
- ),
81
- ],
82
- ),
83
- ),
84
- ),
56
+ return new ListTile (
57
+ title: new Text (_permissionGroup.toString ()),
58
+ subtitle: new Text (_permissionStatus.toString ()),
85
59
);
86
60
}
87
- }
61
+ }
0 commit comments