Skip to content

Commit 4d1baae

Browse files
committed
settings: Migrate to new RadioGroup API for radio buttons
This migration is verified by the tests that we touched in the previous commits; they ensure that the buttons' checked state still updates visibly. Fixes: #1545
1 parent 985c29d commit 4d1baae

File tree

2 files changed

+40
-52
lines changed

2 files changed

+40
-52
lines changed

lib/widgets/settings.dart

Lines changed: 40 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -46,21 +46,19 @@ class _ThemeSetting extends StatelessWidget {
4646
Widget build(BuildContext context) {
4747
final zulipLocalizations = ZulipLocalizations.of(context);
4848
final globalSettings = GlobalStoreWidget.settingsOf(context);
49-
return Column(
50-
children: [
51-
ListTile(title: Text(zulipLocalizations.themeSettingTitle)),
52-
for (final themeSettingOption in [null, ...ThemeSetting.values])
53-
RadioListTile<ThemeSetting?>.adaptive(
54-
title: Text(ThemeSetting.displayName(
55-
themeSetting: themeSettingOption,
56-
zulipLocalizations: zulipLocalizations)),
57-
value: themeSettingOption,
58-
// TODO(#1545) stop using the deprecated members
59-
// ignore: deprecated_member_use
60-
groupValue: globalSettings.themeSetting,
61-
// ignore: deprecated_member_use
62-
onChanged: (newValue) => _handleChange(context, newValue)),
63-
]);
49+
return RadioGroup<ThemeSetting?>(
50+
groupValue: globalSettings.themeSetting,
51+
onChanged: (newValue) => _handleChange(context, newValue),
52+
child: Column(
53+
children: [
54+
ListTile(title: Text(zulipLocalizations.themeSettingTitle)),
55+
for (final themeSettingOption in [null, ...ThemeSetting.values])
56+
RadioListTile<ThemeSetting?>.adaptive(
57+
title: Text(ThemeSetting.displayName(
58+
themeSetting: themeSettingOption,
59+
zulipLocalizations: zulipLocalizations)),
60+
value: themeSettingOption),
61+
]));
6462
}
6563
}
6664

@@ -135,19 +133,17 @@ class VisitFirstUnreadSettingPage extends StatelessWidget {
135133
final globalSettings = GlobalStoreWidget.settingsOf(context);
136134
return Scaffold(
137135
appBar: AppBar(title: Text(zulipLocalizations.initialAnchorSettingTitle)),
138-
body: Column(children: [
139-
ListTile(title: Text(zulipLocalizations.initialAnchorSettingDescription)),
140-
for (final value in VisitFirstUnreadSetting.values)
141-
RadioListTile.adaptive(
142-
title: Text(_valueDisplayName(value,
143-
zulipLocalizations: zulipLocalizations)),
144-
value: value,
145-
// TODO(#1545) stop using the deprecated members
146-
// ignore: deprecated_member_use
147-
groupValue: globalSettings.visitFirstUnread,
148-
// ignore: deprecated_member_use
149-
onChanged: (newValue) => _handleChange(context, newValue)),
150-
]));
136+
body: RadioGroup<VisitFirstUnreadSetting>(
137+
groupValue: globalSettings.visitFirstUnread,
138+
onChanged: (newValue) => _handleChange(context, newValue),
139+
child: Column(children: [
140+
ListTile(title: Text(zulipLocalizations.initialAnchorSettingDescription)),
141+
for (final value in VisitFirstUnreadSetting.values)
142+
RadioListTile<VisitFirstUnreadSetting>.adaptive(
143+
title: Text(_valueDisplayName(value,
144+
zulipLocalizations: zulipLocalizations)),
145+
value: value),
146+
])));
151147
}
152148
}
153149

@@ -210,24 +206,22 @@ class MarkReadOnScrollSettingPage extends StatelessWidget {
210206
final globalSettings = GlobalStoreWidget.settingsOf(context);
211207
return Scaffold(
212208
appBar: AppBar(title: Text(zulipLocalizations.markReadOnScrollSettingTitle)),
213-
body: Column(children: [
214-
ListTile(title: Text(zulipLocalizations.markReadOnScrollSettingDescription)),
215-
for (final value in MarkReadOnScrollSetting.values)
216-
RadioListTile.adaptive(
217-
title: Text(_valueDisplayName(value,
218-
zulipLocalizations: zulipLocalizations)),
219-
subtitle: () {
220-
final result = _valueDescription(value,
221-
zulipLocalizations: zulipLocalizations);
222-
return result == null ? null : Text(result);
223-
}(),
224-
value: value,
225-
// TODO(#1545) stop using the deprecated members
226-
// ignore: deprecated_member_use
227-
groupValue: globalSettings.markReadOnScroll,
228-
// ignore: deprecated_member_use
229-
onChanged: (newValue) => _handleChange(context, newValue)),
230-
]));
209+
body: RadioGroup<MarkReadOnScrollSetting>(
210+
groupValue: globalSettings.markReadOnScroll,
211+
onChanged: (newValue) => _handleChange(context, newValue),
212+
child: Column(children: [
213+
ListTile(title: Text(zulipLocalizations.markReadOnScrollSettingDescription)),
214+
for (final value in MarkReadOnScrollSetting.values)
215+
RadioListTile<MarkReadOnScrollSetting>.adaptive(
216+
title: Text(_valueDisplayName(value,
217+
zulipLocalizations: zulipLocalizations)),
218+
subtitle: () {
219+
final result = _valueDescription(value,
220+
zulipLocalizations: zulipLocalizations);
221+
return result == null ? null : Text(result);
222+
}(),
223+
value: value),
224+
])));
231225
}
232226
}
233227

test/flutter_checks.dart

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -249,9 +249,3 @@ extension IconButtonChecks on Subject<IconButton> {
249249
extension SwitchListTileChecks<T> on Subject<SwitchListTile> {
250250
Subject<bool> get value => has((x) => x.value, 'value');
251251
}
252-
253-
extension RadioListTileChecks<T> on Subject<RadioListTile<T>> {
254-
// TODO(#1545) stop using the deprecated member
255-
// ignore: deprecated_member_use
256-
Subject<bool> get checked => has((x) => x.checked, 'checked');
257-
}

0 commit comments

Comments
 (0)