Skip to content

Commit d5780b5

Browse files
committed
home: Add settings page
Signed-off-by: Zixuan James Li <[email protected]>
1 parent 4d37bb2 commit d5780b5

14 files changed

+128
-9
lines changed

assets/icons/ZulipIcons.ttf

868 Bytes
Binary file not shown.

assets/icons/settings.svg

+4
Loading

assets/l10n/app_en.arb

+4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919
"@chooseAccountPageTitle": {
2020
"description": "Title for the page to choose between Zulip accounts."
2121
},
22+
"settingsPageTitle": "Settings",
23+
"@settingsPageTitle": {
24+
"description": "Title for the settings page."
25+
},
2226
"switchAccountButton": "Switch account",
2327
"@switchAccountButton": {
2428
"description": "Label for main-menu button leading to the choose-account page."

lib/generated/l10n/zulip_localizations.dart

+6
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,12 @@ abstract class ZulipLocalizations {
135135
/// **'Choose account'**
136136
String get chooseAccountPageTitle;
137137

138+
/// Title for the settings page.
139+
///
140+
/// In en, this message translates to:
141+
/// **'Settings'**
142+
String get settingsPageTitle;
143+
138144
/// Label for main-menu button leading to the choose-account page.
139145
///
140146
/// In en, this message translates to:

lib/generated/l10n/zulip_localizations_ar.dart

+3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ class ZulipLocalizationsAr extends ZulipLocalizations {
2323
@override
2424
String get chooseAccountPageTitle => 'Choose account';
2525

26+
@override
27+
String get settingsPageTitle => 'Settings';
28+
2629
@override
2730
String get switchAccountButton => 'Switch account';
2831

lib/generated/l10n/zulip_localizations_en.dart

+3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ class ZulipLocalizationsEn extends ZulipLocalizations {
2323
@override
2424
String get chooseAccountPageTitle => 'Choose account';
2525

26+
@override
27+
String get settingsPageTitle => 'Settings';
28+
2629
@override
2730
String get switchAccountButton => 'Switch account';
2831

lib/generated/l10n/zulip_localizations_ja.dart

+3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ class ZulipLocalizationsJa extends ZulipLocalizations {
2323
@override
2424
String get chooseAccountPageTitle => 'アカウントを選択';
2525

26+
@override
27+
String get settingsPageTitle => 'Settings';
28+
2629
@override
2730
String get switchAccountButton => 'Switch account';
2831

lib/generated/l10n/zulip_localizations_nb.dart

+3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ class ZulipLocalizationsNb extends ZulipLocalizations {
2323
@override
2424
String get chooseAccountPageTitle => 'Choose account';
2525

26+
@override
27+
String get settingsPageTitle => 'Settings';
28+
2629
@override
2730
String get switchAccountButton => 'Switch account';
2831

lib/generated/l10n/zulip_localizations_pl.dart

+3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ class ZulipLocalizationsPl extends ZulipLocalizations {
2323
@override
2424
String get chooseAccountPageTitle => 'Wybierz konto';
2525

26+
@override
27+
String get settingsPageTitle => 'Settings';
28+
2629
@override
2730
String get switchAccountButton => 'Przełącz konto';
2831

lib/generated/l10n/zulip_localizations_ru.dart

+3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ class ZulipLocalizationsRu extends ZulipLocalizations {
2323
@override
2424
String get chooseAccountPageTitle => 'Выберите учетную запись';
2525

26+
@override
27+
String get settingsPageTitle => 'Settings';
28+
2629
@override
2730
String get switchAccountButton => 'Сменить учетную запись';
2831

lib/generated/l10n/zulip_localizations_sk.dart

+3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ class ZulipLocalizationsSk extends ZulipLocalizations {
2323
@override
2424
String get chooseAccountPageTitle => 'Zvoliť účet';
2525

26+
@override
27+
String get settingsPageTitle => 'Settings';
28+
2629
@override
2730
String get switchAccountButton => 'Zmeniť účet';
2831

lib/widgets/home.dart

+19-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import 'message_list.dart';
1717
import 'page.dart';
1818
import 'profile.dart';
1919
import 'recent_dm_conversations.dart';
20+
import 'settings.dart';
2021
import 'store.dart';
2122
import 'subscription_list.dart';
2223
import 'text.dart';
@@ -268,7 +269,7 @@ void _showMainMenu(BuildContext context, {
268269
const _SwitchAccountButton(),
269270
// TODO(#198): Set my status
270271
// const SizedBox(height: 8),
271-
// TODO(#97): Settings
272+
const _SettingsButton(),
272273
// TODO(#661): Notifications
273274
// const SizedBox(height: 8),
274275
const _AboutZulipButton(),
@@ -559,6 +560,23 @@ class _SwitchAccountButton extends _MenuButton {
559560
}
560561
}
561562

563+
class _SettingsButton extends _MenuButton {
564+
const _SettingsButton();
565+
566+
@override
567+
IconData? get icon => ZulipIcons.settings;
568+
569+
@override
570+
String label(ZulipLocalizations zulipLocalizations) {
571+
return zulipLocalizations.settingsPageTitle;
572+
}
573+
574+
@override
575+
void onPressed(BuildContext context) {
576+
Navigator.of(context).push(SettingsPage.buildRoute());
577+
}
578+
}
579+
562580
class _AboutZulipButton extends _MenuButton {
563581
const _AboutZulipButton();
564582

lib/widgets/icons.dart

+11-8
Original file line numberDiff line numberDiff line change
@@ -105,29 +105,32 @@ abstract final class ZulipIcons {
105105
/// The Zulip custom icon "send".
106106
static const IconData send = IconData(0xf11b, fontFamily: "Zulip Icons");
107107

108+
/// The Zulip custom icon "settings".
109+
static const IconData settings = IconData(0xf11c, fontFamily: "Zulip Icons");
110+
108111
/// The Zulip custom icon "share".
109-
static const IconData share = IconData(0xf11c, fontFamily: "Zulip Icons");
112+
static const IconData share = IconData(0xf11d, fontFamily: "Zulip Icons");
110113

111114
/// The Zulip custom icon "share_ios".
112-
static const IconData share_ios = IconData(0xf11d, fontFamily: "Zulip Icons");
115+
static const IconData share_ios = IconData(0xf11e, fontFamily: "Zulip Icons");
113116

114117
/// The Zulip custom icon "smile".
115-
static const IconData smile = IconData(0xf11e, fontFamily: "Zulip Icons");
118+
static const IconData smile = IconData(0xf11f, fontFamily: "Zulip Icons");
116119

117120
/// The Zulip custom icon "star".
118-
static const IconData star = IconData(0xf11f, fontFamily: "Zulip Icons");
121+
static const IconData star = IconData(0xf120, fontFamily: "Zulip Icons");
119122

120123
/// The Zulip custom icon "star_filled".
121-
static const IconData star_filled = IconData(0xf120, fontFamily: "Zulip Icons");
124+
static const IconData star_filled = IconData(0xf121, fontFamily: "Zulip Icons");
122125

123126
/// The Zulip custom icon "topic".
124-
static const IconData topic = IconData(0xf121, fontFamily: "Zulip Icons");
127+
static const IconData topic = IconData(0xf122, fontFamily: "Zulip Icons");
125128

126129
/// The Zulip custom icon "unmute".
127-
static const IconData unmute = IconData(0xf122, fontFamily: "Zulip Icons");
130+
static const IconData unmute = IconData(0xf123, fontFamily: "Zulip Icons");
128131

129132
/// The Zulip custom icon "user".
130-
static const IconData user = IconData(0xf123, fontFamily: "Zulip Icons");
133+
static const IconData user = IconData(0xf124, fontFamily: "Zulip Icons");
131134

132135
// END GENERATED ICON DATA
133136
}

lib/widgets/settings.dart

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import 'package:drift/drift.dart' hide Column;
2+
import 'package:flutter/material.dart';
3+
4+
import '../generated/l10n/zulip_localizations.dart';
5+
import '../model/database.dart';
6+
import '../model/settings.dart';
7+
import 'page.dart';
8+
import 'store.dart';
9+
10+
class SettingsPage extends StatelessWidget {
11+
const SettingsPage({super.key});
12+
13+
static Route<void> buildRoute() {
14+
return MaterialWidgetRoute(page: const SettingsPage());
15+
}
16+
17+
@override
18+
Widget build(BuildContext context) {
19+
final globalStore = GlobalStoreWidget.of(context);
20+
final zulipLocalizations = ZulipLocalizations.of(context);
21+
22+
return Scaffold(
23+
appBar: AppBar(title: Text(zulipLocalizations.settingsPageTitle)),
24+
body: Column(children: [
25+
_Select(initialValue: globalStore.globalSettings.themeSetting),
26+
]));
27+
}
28+
}
29+
30+
class _Select extends StatefulWidget {
31+
const _Select({required this.initialValue});
32+
33+
final ThemeSetting initialValue;
34+
35+
@override
36+
State<_Select> createState() => _SelectState();
37+
}
38+
39+
class _SelectState extends State<_Select> {
40+
late ThemeSetting value = widget.initialValue;
41+
42+
@override
43+
Widget build(BuildContext context) {
44+
final globalStore = GlobalStoreWidget.of(context);
45+
return Column(
46+
children: [
47+
const ListTile(title: Text('Theme')),
48+
for (final option in ThemeSetting.values)
49+
ListTile(
50+
title: Text(option.name),
51+
leading: Radio.adaptive(
52+
value: option,
53+
groupValue: value,
54+
onChanged: (newValue) {
55+
setState(() {
56+
value = newValue!;
57+
});
58+
globalStore.updateGlobalSettings(GlobalSettingsCompanion(
59+
themeSetting: Value(value)));
60+
})),
61+
]);
62+
}
63+
}

0 commit comments

Comments
 (0)