@@ -45,29 +45,6 @@ class DisclosurePage extends StatefulWidget {
45
45
State <DisclosurePage > createState () => _DisclosurePageState ();
46
46
}
47
47
48
- @immutable
49
- class _PermissionItem {
50
- const _PermissionItem (this .permission, this .itemText);
51
-
52
- final Permission permission;
53
- final PermissionItemText itemText;
54
-
55
- @override
56
- bool operator == (Object other) =>
57
- identical (this , other) ||
58
- other is _PermissionItem &&
59
- runtimeType == other.runtimeType &&
60
- permission == other.permission &&
61
- itemText == other.itemText;
62
-
63
- @override
64
- int get hashCode => permission.hashCode ^ itemText.hashCode;
65
-
66
- @override
67
- String toString () =>
68
- '_PermissionItem{permission: $permission , itemText: $itemText }' ;
69
- }
70
-
71
48
class _DisclosurePageState extends State <DisclosurePage >
72
49
with
73
50
// ignore: prefer_mixin, WidgetsBindingObserver is Framework code
@@ -94,6 +71,37 @@ class _DisclosurePageState extends State<DisclosurePage>
94
71
super .dispose ();
95
72
}
96
73
74
+ List <PermissionItemConfig > _getRequestingPermissions () =>
75
+ widget.permissionConfig.permissionItemConfigs.expand ((e) {
76
+ var denied = false ;
77
+ var requested = false ;
78
+ var serviceDisabled = false ;
79
+ for (final Permission p in e.permissions) {
80
+ if (widget.permissionStatuses[p]? .status !=
81
+ PermissionStatus .granted) {
82
+ denied = true ;
83
+ }
84
+ if (widget.permissionStatuses[p]? .requested ?? true ) {
85
+ requested = true ;
86
+ }
87
+ if (widget.permissionStatuses[p]? .serviceStatus ==
88
+ ServiceStatus .disabled) {
89
+ serviceDisabled = true ;
90
+ }
91
+ }
92
+ final serviceText = e.serviceItemText;
93
+
94
+ final List <PermissionItemConfig > result = [];
95
+ if (serviceDisabled && serviceText != null ) {
96
+ result.add (e);
97
+ }
98
+ if (denied && (! requested || e.required )) {
99
+ result.add (e);
100
+ }
101
+
102
+ return result;
103
+ }).toList ();
104
+
97
105
@override
98
106
Widget build (BuildContext context) {
99
107
final titleWidget = Column (
@@ -107,37 +115,7 @@ class _DisclosurePageState extends State<DisclosurePage>
107
115
],
108
116
);
109
117
110
- final permissionItems =
111
- widget.permissionConfig.permissionItemConfigs.expand ((e) {
112
- var denied = false ;
113
- var requested = false ;
114
- var serviceDisabled = false ;
115
- for (final Permission p in e.permissions) {
116
- if (widget.permissionStatuses[p]? .status != PermissionStatus .granted) {
117
- denied = true ;
118
- }
119
- if (widget.permissionStatuses[p]? .requested ?? true ) {
120
- requested = true ;
121
- }
122
- if (widget.permissionStatuses[p]? .serviceStatus ==
123
- ServiceStatus .disabled) {
124
- serviceDisabled = true ;
125
- }
126
- }
127
- final itemText = e.itemText;
128
- final serviceText = e.serviceItemText;
129
- final permission = e.permissions.first;
130
-
131
- final List <_PermissionItem > result = [];
132
- if (serviceDisabled && serviceText != null ) {
133
- result.add (_PermissionItem (permission, serviceText));
134
- }
135
- if (denied && (! requested || e.required )) {
136
- result.add (_PermissionItem (permission, itemText));
137
- }
138
-
139
- return result;
140
- }).toList ();
118
+ final permissionItems = _getRequestingPermissions ();
141
119
142
120
return Scaffold (
143
121
body: Column (
@@ -215,8 +193,7 @@ class _DisclosurePageState extends State<DisclosurePage>
215
193
216
194
// Request permissions one by one because in some cases requesting
217
195
// multiple permissions does not ask the user as expected.
218
- for (final PermissionItemConfig permConfig
219
- in widget.permissionConfig.permissionItemConfigs) {
196
+ for (final PermissionItemConfig permConfig in _getRequestingPermissions ()) {
220
197
for (final Permission perm in permConfig.permissions) {
221
198
if (permConfig.required && perm is PermissionWithService ) {
222
199
final text = permConfig.serviceItemText;
@@ -263,9 +240,9 @@ class _DisclosurePageState extends State<DisclosurePage>
263
240
// ignore: avoid-ignoring-return-values, not needed.
264
241
await prefs.setBool (getRequestedPrefKey (perm), true );
265
242
}
266
- }
267
243
268
- navigator.pop ();
244
+ navigator.pop ();
245
+ }
269
246
}
270
247
271
248
Future <void > _showRequiredPermDialog (
0 commit comments