Skip to content

Commit da63f5a

Browse files
authored
Disable UI elements if models return null (#233)
* Add alternative Yaru widgets to pubspec * Update A11y page * Update Info page * Update Bluetooth page * Update Connections page * Update Multitasking page * Update Removable Media page * Update Keyboard page * Update Wallpaper page * Update Power page * Update Appearance page * Remove unused test * Add default values for checkboxes in A11y page * Fix enabled values for checkboxes in seeing section of A11y page * Change import for yaru_widgets in pubspec file
1 parent d29d58d commit da63f5a

21 files changed

+73
-85
lines changed

lib/view/pages/accessibility/accessibility_model.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,9 @@ class AccessibilityModel extends ChangeNotifier {
380380
notifyListeners();
381381
}
382382

383+
bool get typingAssistAvailable =>
384+
stickyKeys != null || slowKeys != null || bounceKeys != null;
385+
383386
bool get _typingAssist =>
384387
(stickyKeys ?? false) || (slowKeys ?? false) || (bounceKeys ?? false);
385388

@@ -501,10 +504,13 @@ class AccessibilityModel extends ChangeNotifier {
501504
notifyListeners();
502505
}
503506

504-
bool get clickAssist =>
507+
bool get clickAssistAvailable =>
508+
simulatedSecondaryClick != null || dwellClick != null;
509+
510+
bool get _clickAssist =>
505511
(simulatedSecondaryClick ?? false) || (dwellClick ?? false);
506512

507-
String get clickAssistString => clickAssist ? 'On' : 'Off';
513+
String get clickAssistString => _clickAssist ? 'On' : 'Off';
508514

509515
bool? get simulatedSecondaryClick =>
510516
_a11yMouseSettings?.boolValue(_secondaryClickEnabledKey);

lib/view/pages/accessibility/pointing_and_clicking_section.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class _ClickAssist extends StatelessWidget {
4545
Widget build(BuildContext context) {
4646
final model = Provider.of<AccessibilityModel>(context);
4747
return YaruRow(
48+
enabled: model.clickAssistAvailable,
4849
trailingWidget: const Text('Click Assist'),
4950
actionWidget: Row(
5051
children: [

lib/view/pages/accessibility/seeing_section.dart

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ class _CursorSize extends StatelessWidget {
6565
Widget build(BuildContext context) {
6666
final model = Provider.of<AccessibilityModel>(context);
6767
return YaruRow(
68+
enabled: model.cursorSize != null,
6869
trailingWidget: const Text('Cursor Size'),
6970
description: 'Cursor size can be combined with zoom '
7071
'to make it easier to see the cursor',
@@ -211,6 +212,7 @@ class _MagnifierOptions extends StatelessWidget {
211212
crossAxisAlignment: CrossAxisAlignment.start,
212213
children: [
213214
YaruRow(
215+
enabled: model.magFactor != null,
214216
trailingWidget: const Text('Magnification'),
215217
actionWidget: SizedBox(
216218
height: 40,
@@ -277,7 +279,7 @@ class _MagnifierPositionOptions extends StatelessWidget {
277279
children: [
278280
YaruCheckboxRow(
279281
enabled: model.screenPartEnabled,
280-
value: model.scrollAtEdges,
282+
value: model.scrollAtEdges ?? false,
281283
onChanged: (value) => model.setScrollAtEdges(value!),
282284
text: 'Magnifier extends outside of screen',
283285
),
@@ -371,14 +373,14 @@ class _CrosshairsOptions extends StatelessWidget {
371373
child: Column(
372374
children: [
373375
YaruCheckboxRow(
374-
enabled: true,
375-
value: model.crossHairs,
376+
enabled: model.crossHairs != null,
377+
value: model.crossHairs ?? false,
376378
onChanged: (value) => model.setCrossHairs(value!),
377379
text: 'Visible',
378380
),
379381
YaruCheckboxRow(
380-
enabled: true,
381-
value: model.crossHairsClip,
382+
enabled: model.crossHairsClip != null,
383+
value: model.crossHairsClip ?? false,
382384
onChanged: (value) => model.setCrossHairsClip(value!),
383385
text: 'Overlaps mouse cursor',
384386
),
@@ -432,8 +434,8 @@ class _ColorEffectsOptions extends StatelessWidget {
432434
child: Column(
433435
children: [
434436
YaruCheckboxRow(
435-
enabled: true,
436-
value: model.inverseLightness,
437+
enabled: model.inverseLightness != null,
438+
value: model.inverseLightness ?? false,
437439
onChanged: (value) => model.setInverseLightness(value!),
438440
text: 'White on black',
439441
),

lib/view/pages/accessibility/typing_section.dart

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ class _TypingAssist extends StatelessWidget {
137137
final model = Provider.of<AccessibilityModel>(context);
138138

139139
return YaruRow(
140+
enabled: model.typingAssistAvailable,
140141
trailingWidget: const Text('Typing Assist (AccessX)'),
141142
actionWidget: Row(
142143
children: [
@@ -219,14 +220,14 @@ class _StickyKeysSettings extends StatelessWidget {
219220
child: Column(
220221
children: [
221222
YaruCheckboxRow(
222-
enabled: model.stickyKeys,
223-
value: model.stickyKeysTwoKey,
223+
enabled: model.stickyKeys ?? false,
224+
value: model.stickyKeysTwoKey ?? false,
224225
onChanged: (value) => model.setStickyKeysTwoKey(value!),
225226
text: 'Disable if two keys are pressed at the same time',
226227
),
227228
YaruCheckboxRow(
228-
enabled: model.stickyKeys,
229-
value: model.stickyKeysBeep,
229+
enabled: model.stickyKeys ?? false,
230+
value: model.stickyKeysBeep ?? false,
230231
onChanged: (value) => model.setStickyKeysBeep(value!),
231232
text: 'Beep when a modifier key is pressed',
232233
),
@@ -256,20 +257,20 @@ class _SlowKeysSettings extends StatelessWidget {
256257
onChanged: (value) => model.setSlowKeysDelay(value),
257258
),
258259
YaruCheckboxRow(
259-
enabled: model.slowKeys,
260-
value: model.slowKeysBeepPress,
260+
enabled: model.slowKeys ?? false,
261+
value: model.slowKeysBeepPress ?? false,
261262
onChanged: (value) => model.setSlowKeysBeepPress(value!),
262263
text: 'Beep when a key is pressed',
263264
),
264265
YaruCheckboxRow(
265-
enabled: model.slowKeys,
266-
value: model.slowKeysBeepAccept,
266+
enabled: model.slowKeys ?? false,
267+
value: model.slowKeysBeepAccept ?? false,
267268
onChanged: (value) => model.setSlowKeysBeepAccept(value!),
268269
text: 'Beep when a key is accepted',
269270
),
270271
YaruCheckboxRow(
271-
enabled: model.slowKeys,
272-
value: model.slowKeysBeepReject,
272+
enabled: model.slowKeys ?? false,
273+
value: model.slowKeysBeepReject ?? false,
273274
onChanged: (value) => model.setSlowKeysBeepReject(value!),
274275
text: 'Beep when a key is rejected',
275276
),
@@ -299,8 +300,8 @@ class _BounceKeysSettings extends StatelessWidget {
299300
onChanged: (value) => model.setBounceKeysDelay(value),
300301
),
301302
YaruCheckboxRow(
302-
enabled: model.bounceKeys,
303-
value: model.bounceKeysBeepReject,
303+
enabled: model.bounceKeys ?? false,
304+
value: model.bounceKeysBeepReject ?? false,
304305
onChanged: (value) => model.setBounceKeysBeepReject(value!),
305306
text: 'Beep when a key is rejected',
306307
),

lib/view/pages/appearance/appearance_model.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,10 @@ class AppearanceModel extends ChangeNotifier {
7070

7171
static const dockPositions = ['LEFT', 'RIGHT', 'BOTTOM'];
7272

73-
String get _realDockPosition =>
74-
_dashToDockSettings?.stringValue(_dockPositionKey) ?? 'LEFT';
73+
String? get _realDockPosition =>
74+
_dashToDockSettings?.stringValue(_dockPositionKey);
7575

76-
String get dockPosition =>
76+
String? get dockPosition =>
7777
dockPositions.contains(_realDockPosition) ? _realDockPosition : 'LEFT';
7878

7979
set dockPosition(String? value) {
@@ -87,10 +87,10 @@ class AppearanceModel extends ChangeNotifier {
8787
'cycle-windows'
8888
];
8989

90-
String get _realClickAction =>
91-
_dashToDockSettings?.stringValue(_clickActionKey) ?? clickActions.first;
90+
String? get _realClickAction =>
91+
_dashToDockSettings?.stringValue(_clickActionKey);
9292

93-
String get clickAction => clickActions.contains(_realClickAction)
93+
String? get clickAction => clickActions.contains(_realClickAction)
9494
? _realClickAction
9595
: clickActions.first;
9696

lib/view/pages/appearance/dock_section.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ class DockSection extends StatelessWidget {
8484
onChanged: (value) => model.setMaxIconSize(value),
8585
),
8686
YaruRow(
87+
enabled: model.dockPosition != null,
8788
trailingWidget: const Text('Dock Position'),
8889
actionWidget: DropdownButton<String>(
8990
onChanged: (value) => model.dockPosition = value,
@@ -95,6 +96,7 @@ class DockSection extends StatelessWidget {
9596
),
9697
),
9798
YaruRow(
99+
enabled: model.clickAction != null,
98100
trailingWidget: const Text('Click Action'),
99101
actionWidget: DropdownButton<String>(
100102
onChanged: (value) => model.clickAction = value,

lib/view/pages/bluetooth/bluetooth_device_row.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ class _BluetoothDeviceRowState extends State<BluetoothDeviceRow> {
7878
child: Column(
7979
children: [
8080
YaruRow(
81+
enabled: true,
8182
trailingWidget: model.connected
8283
? const Text('Connected')
8384
: const Text('Disconnected'),
@@ -90,18 +91,21 @@ class _BluetoothDeviceRowState extends State<BluetoothDeviceRow> {
9091
setState(() {});
9192
})),
9293
YaruRow(
94+
enabled: true,
9395
trailingWidget: const Text('Paired'),
9496
actionWidget: Padding(
9597
padding: const EdgeInsets.only(right: 8),
9698
child: Text(model.paired ? 'Yes' : 'No'),
9799
)),
98100
YaruRow(
101+
enabled: true,
99102
trailingWidget: const Text('Address'),
100103
actionWidget: Padding(
101104
padding: const EdgeInsets.only(right: 8),
102105
child: Text(model.address),
103106
)),
104107
YaruRow(
108+
enabled: true,
105109
trailingWidget: const Text('Type'),
106110
actionWidget: Padding(
107111
padding: const EdgeInsets.only(right: 8),
@@ -156,6 +160,7 @@ class _BluetoothDeviceRowState extends State<BluetoothDeviceRow> {
156160
child: Padding(
157161
padding: const EdgeInsets.all(8.0),
158162
child: YaruRow(
163+
enabled: true,
159164
trailingWidget: Text(model.name),
160165
actionWidget: Text(
161166
model.connected ? 'connected' : 'disconnected',

lib/view/pages/connections/widgets/access_point_tile.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class AccessPointTile extends StatelessWidget {
2222
borderRadius: BorderRadius.circular(4),
2323
onTap: onTap,
2424
child: YaruRow(
25+
enabled: true,
2526
trailingWidget: Row(
2627
children: [
2728
Icon(accessPointModel.wifiIconData),

lib/view/pages/connections/wifi_content.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class WifiDevicesContent extends StatelessWidget {
1818
return Column(
1919
children: [
2020
YaruRow(
21+
enabled: true,
2122
trailingWidget: const Text('Wi-Fi'),
2223
actionWidget: Row(
2324
children: [

lib/view/pages/info/info_page.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ class _Computer extends StatelessWidget {
141141

142142
return YaruSection(headline: 'Computer', children: [
143143
YaruRow(
144+
enabled: true,
144145
trailingWidget: const Text('Hostname'),
145146
actionWidget: Row(
146147
children: [

0 commit comments

Comments
 (0)