@@ -45,29 +45,6 @@ class DisclosurePage extends StatefulWidget {
4545 State <DisclosurePage > createState () => _DisclosurePageState ();
4646}
4747
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-
7148class _DisclosurePageState extends State <DisclosurePage >
7249 with
7350 // ignore: prefer_mixin, WidgetsBindingObserver is Framework code
@@ -94,6 +71,37 @@ class _DisclosurePageState extends State<DisclosurePage>
9471 super .dispose ();
9572 }
9673
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+
97105 @override
98106 Widget build (BuildContext context) {
99107 final titleWidget = Column (
@@ -107,37 +115,7 @@ class _DisclosurePageState extends State<DisclosurePage>
107115 ],
108116 );
109117
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 ();
141119
142120 return Scaffold (
143121 body: Column (
@@ -215,8 +193,7 @@ class _DisclosurePageState extends State<DisclosurePage>
215193
216194 // Request permissions one by one because in some cases requesting
217195 // 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 ()) {
220197 for (final Permission perm in permConfig.permissions) {
221198 if (permConfig.required && perm is PermissionWithService ) {
222199 final text = permConfig.serviceItemText;
@@ -263,9 +240,9 @@ class _DisclosurePageState extends State<DisclosurePage>
263240 // ignore: avoid-ignoring-return-values, not needed.
264241 await prefs.setBool (getRequestedPrefKey (perm), true );
265242 }
266- }
267243
268- navigator.pop ();
244+ navigator.pop ();
245+ }
269246 }
270247
271248 Future <void > _showRequiredPermDialog (
0 commit comments