Skip to content

Commit 47c4ffc

Browse files
settings: modular settings navigation item
Added to maintain consistent style and reuse the components enhancing modularity.
1 parent d1dc938 commit 47c4ffc

File tree

1 file changed

+58
-37
lines changed

1 file changed

+58
-37
lines changed

lib/widgets/settings.dart

Lines changed: 58 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ import 'package:flutter/material.dart';
33
import '../generated/l10n/zulip_localizations.dart';
44
import '../model/settings.dart';
55
import 'app_bar.dart';
6+
import 'icons.dart';
67
import 'page.dart';
78
import 'store.dart';
89
import 'text.dart';
10+
import 'theme.dart';
911

1012
class SettingsPage extends StatelessWidget {
1113
const SettingsPage({super.key});
@@ -23,12 +25,31 @@ class SettingsPage extends StatelessWidget {
2325
body: ListView(children: [
2426
const _SettingsHeader(title: 'THEME'),
2527
const _ThemeSetting(),
26-
const _BrowserPreferenceSetting(),
27-
const _VisitFirstUnreadSetting(),
28-
const _MarkReadOnScrollSetting(),
28+
_BrowserPreferenceSetting(),
29+
_SettingsNavitem(
30+
title: 'Notifications',
31+
onTap: () {
32+
// TODO: Implement notifications settings page
33+
}),
34+
_SettingsNavitem(
35+
title: 'Open message feeds at',
36+
subtitle: VisitFirstUnreadSettingPage._valueDisplayName(
37+
GlobalStoreWidget.settingsOf(context).visitFirstUnread,
38+
zulipLocalizations: zulipLocalizations),
39+
onTap: () => Navigator.push(context,
40+
VisitFirstUnreadSettingPage.buildRoute()),
41+
),
42+
_SettingsNavitem(
43+
title: 'Mark messages as read on scroll',
44+
subtitle: MarkReadOnScrollSettingPage._valueDisplayName(
45+
GlobalStoreWidget.settingsOf(context).markReadOnScroll,
46+
zulipLocalizations: zulipLocalizations),
47+
onTap: () => Navigator.push(context,
48+
MarkReadOnScrollSettingPage.buildRoute()),
49+
),
2950
if (GlobalSettingsStore.experimentalFeatureFlags.isNotEmpty)
30-
ListTile(
31-
title: Text(zulipLocalizations.experimentalFeatureSettingsPageTitle),
51+
_SettingsNavitem(
52+
title: zulipLocalizations.experimentalFeatureSettingsPageTitle,
3253
onTap: () => Navigator.push(context,
3354
ExperimentalFeaturesPage.buildRoute()))
3455
]));
@@ -52,6 +73,38 @@ class _SettingsHeader extends StatelessWidget {
5273
)));
5374
}}
5475

76+
class _SettingsNavitem extends StatelessWidget {
77+
const _SettingsNavitem({
78+
required this.title,
79+
this.subtitle,
80+
required this.onTap,
81+
});
82+
83+
final String title;
84+
final String? subtitle;
85+
final VoidCallback onTap;
86+
87+
@override
88+
Widget build(BuildContext context) {
89+
final designVariables = DesignVariables.of(context);
90+
return Material(
91+
color: Colors.transparent,
92+
child: ListTile(
93+
title: Text(title,
94+
style: TextStyle(
95+
color: designVariables.contextMenuItemText,
96+
fontSize: 20).merge(weightVariableTextStyle(context, wght: 600))),
97+
subtitle: subtitle != null ? Text(
98+
subtitle!,
99+
style: TextStyle(
100+
fontSize: 17).merge(weightVariableTextStyle(context, wght: 400))) : null,
101+
onTap: onTap,
102+
trailing: Icon(
103+
ZulipIcons.chevron_right,
104+
color: designVariables.contextMenuItemIcon,),
105+
));}
106+
}
107+
55108
class _ThemeSetting extends StatelessWidget {
56109
const _ThemeSetting();
57110

@@ -103,22 +156,6 @@ class _BrowserPreferenceSetting extends StatelessWidget {
103156
}
104157
}
105158

106-
class _VisitFirstUnreadSetting extends StatelessWidget {
107-
const _VisitFirstUnreadSetting();
108-
109-
@override
110-
Widget build(BuildContext context) {
111-
final zulipLocalizations = ZulipLocalizations.of(context);
112-
final globalSettings = GlobalStoreWidget.settingsOf(context);
113-
return ListTile(
114-
title: Text(zulipLocalizations.initialAnchorSettingTitle),
115-
subtitle: Text(VisitFirstUnreadSettingPage._valueDisplayName(
116-
globalSettings.visitFirstUnread, zulipLocalizations: zulipLocalizations)),
117-
onTap: () => Navigator.push(context,
118-
VisitFirstUnreadSettingPage.buildRoute()));
119-
}
120-
}
121-
122159
class VisitFirstUnreadSettingPage extends StatelessWidget {
123160
const VisitFirstUnreadSettingPage({super.key});
124161

@@ -165,22 +202,6 @@ class VisitFirstUnreadSettingPage extends StatelessWidget {
165202
}
166203
}
167204

168-
class _MarkReadOnScrollSetting extends StatelessWidget {
169-
const _MarkReadOnScrollSetting();
170-
171-
@override
172-
Widget build(BuildContext context) {
173-
final zulipLocalizations = ZulipLocalizations.of(context);
174-
final globalSettings = GlobalStoreWidget.settingsOf(context);
175-
return ListTile(
176-
title: Text(zulipLocalizations.markReadOnScrollSettingTitle),
177-
subtitle: Text(MarkReadOnScrollSettingPage._valueDisplayName(
178-
globalSettings.markReadOnScroll, zulipLocalizations: zulipLocalizations)),
179-
onTap: () => Navigator.push(context,
180-
MarkReadOnScrollSettingPage.buildRoute()));
181-
}
182-
}
183-
184205
class MarkReadOnScrollSettingPage extends StatelessWidget {
185206
const MarkReadOnScrollSettingPage({super.key});
186207

0 commit comments

Comments
 (0)