@@ -3,9 +3,11 @@ import 'package:flutter/material.dart';
33import '../generated/l10n/zulip_localizations.dart' ;
44import '../model/settings.dart' ;
55import 'app_bar.dart' ;
6+ import 'icons.dart' ;
67import 'page.dart' ;
78import 'store.dart' ;
89import 'text.dart' ;
10+ import 'theme.dart' ;
911
1012class 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+
55108class _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-
122159class 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-
184205class MarkReadOnScrollSettingPage extends StatelessWidget {
185206 const MarkReadOnScrollSettingPage ({super .key});
186207
0 commit comments