Skip to content

Commit

Permalink
home: Add settings page
Browse files Browse the repository at this point in the history
Signed-off-by: Zixuan James Li <[email protected]>
  • Loading branch information
PIG208 committed Dec 30, 2024
1 parent 78ddf0e commit c8a7ea6
Show file tree
Hide file tree
Showing 13 changed files with 125 additions and 9 deletions.
Binary file modified assets/icons/ZulipIcons.ttf
Binary file not shown.
4 changes: 4 additions & 0 deletions assets/icons/settings.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions assets/l10n/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@
"@chooseAccountPageTitle": {
"description": "Title for the page to choose between Zulip accounts."
},
"settingsPageTitle": "Settings",
"@settingsPageTitle": {
"description": "Title for the settings page."
},
"switchAccountButton": "Switch account",
"@switchAccountButton": {
"description": "Label for main-menu button leading to the choose-account page."
Expand Down
6 changes: 6 additions & 0 deletions lib/generated/l10n/zulip_localizations.dart
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,12 @@ abstract class ZulipLocalizations {
/// **'Choose account'**
String get chooseAccountPageTitle;

/// Title for the settings page.
///
/// In en, this message translates to:
/// **'Settings'**
String get settingsPageTitle;

/// Label for main-menu button leading to the choose-account page.
///
/// In en, this message translates to:
Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_ar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ class ZulipLocalizationsAr extends ZulipLocalizations {
@override
String get chooseAccountPageTitle => 'Choose account';

@override
String get settingsPageTitle => 'Settings';

@override
String get switchAccountButton => 'Switch account';

Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_en.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ class ZulipLocalizationsEn extends ZulipLocalizations {
@override
String get chooseAccountPageTitle => 'Choose account';

@override
String get settingsPageTitle => 'Settings';

@override
String get switchAccountButton => 'Switch account';

Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_fr.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ class ZulipLocalizationsFr extends ZulipLocalizations {
@override
String get chooseAccountPageTitle => 'Choose account';

@override
String get settingsPageTitle => 'Settings';

@override
String get switchAccountButton => 'Switch account';

Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_ja.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ class ZulipLocalizationsJa extends ZulipLocalizations {
@override
String get chooseAccountPageTitle => 'アカウントを選択';

@override
String get settingsPageTitle => 'Settings';

@override
String get switchAccountButton => 'Switch account';

Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_pl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ class ZulipLocalizationsPl extends ZulipLocalizations {
@override
String get chooseAccountPageTitle => 'Wybierz konto';

@override
String get settingsPageTitle => 'Settings';

@override
String get switchAccountButton => 'Switch account';

Expand Down
3 changes: 3 additions & 0 deletions lib/generated/l10n/zulip_localizations_ru.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ class ZulipLocalizationsRu extends ZulipLocalizations {
@override
String get chooseAccountPageTitle => 'Выберите учетную запись';

@override
String get settingsPageTitle => 'Settings';

@override
String get switchAccountButton => 'Switch account';

Expand Down
20 changes: 19 additions & 1 deletion lib/widgets/home.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import 'message_list.dart';
import 'page.dart';
import 'profile.dart';
import 'recent_dm_conversations.dart';
import 'settings.dart';
import 'store.dart';
import 'subscription_list.dart';
import 'text.dart';
Expand Down Expand Up @@ -268,7 +269,7 @@ void _showMainMenu(BuildContext context, {
const _SwitchAccountButton(),
// TODO(#198): Set my status
// const SizedBox(height: 8),
// TODO(#97): Settings
const _SettingsButton(),
// TODO(#661): Notifications
// const SizedBox(height: 8),
const _AboutZulipButton(),
Expand Down Expand Up @@ -559,6 +560,23 @@ class _SwitchAccountButton extends _MenuButton {
}
}

class _SettingsButton extends _MenuButton {
const _SettingsButton();

@override
IconData? get icon => ZulipIcons.settings;

@override
String label(ZulipLocalizations zulipLocalizations) {
return zulipLocalizations.settingsPageTitle;
}

@override
void onPressed(BuildContext context) {
Navigator.of(context).push(SettingsPage.buildRoute());
}
}

class _AboutZulipButton extends _MenuButton {
const _AboutZulipButton();

Expand Down
19 changes: 11 additions & 8 deletions lib/widgets/icons.dart
Original file line number Diff line number Diff line change
Expand Up @@ -105,29 +105,32 @@ abstract final class ZulipIcons {
/// The Zulip custom icon "send".
static const IconData send = IconData(0xf11b, fontFamily: "Zulip Icons");

/// The Zulip custom icon "settings".
static const IconData settings = IconData(0xf11c, fontFamily: "Zulip Icons");

/// The Zulip custom icon "share".
static const IconData share = IconData(0xf11c, fontFamily: "Zulip Icons");
static const IconData share = IconData(0xf11d, fontFamily: "Zulip Icons");

/// The Zulip custom icon "share_ios".
static const IconData share_ios = IconData(0xf11d, fontFamily: "Zulip Icons");
static const IconData share_ios = IconData(0xf11e, fontFamily: "Zulip Icons");

/// The Zulip custom icon "smile".
static const IconData smile = IconData(0xf11e, fontFamily: "Zulip Icons");
static const IconData smile = IconData(0xf11f, fontFamily: "Zulip Icons");

/// The Zulip custom icon "star".
static const IconData star = IconData(0xf11f, fontFamily: "Zulip Icons");
static const IconData star = IconData(0xf120, fontFamily: "Zulip Icons");

/// The Zulip custom icon "star_filled".
static const IconData star_filled = IconData(0xf120, fontFamily: "Zulip Icons");
static const IconData star_filled = IconData(0xf121, fontFamily: "Zulip Icons");

/// The Zulip custom icon "topic".
static const IconData topic = IconData(0xf121, fontFamily: "Zulip Icons");
static const IconData topic = IconData(0xf122, fontFamily: "Zulip Icons");

/// The Zulip custom icon "unmute".
static const IconData unmute = IconData(0xf122, fontFamily: "Zulip Icons");
static const IconData unmute = IconData(0xf123, fontFamily: "Zulip Icons");

/// The Zulip custom icon "user".
static const IconData user = IconData(0xf123, fontFamily: "Zulip Icons");
static const IconData user = IconData(0xf124, fontFamily: "Zulip Icons");

// END GENERATED ICON DATA
}
Expand Down
63 changes: 63 additions & 0 deletions lib/widgets/settings.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import 'package:drift/drift.dart' hide Column;
import 'package:flutter/material.dart';

import '../generated/l10n/zulip_localizations.dart';
import '../model/database.dart';
import '../model/settings.dart';
import 'page.dart';
import 'store.dart';

class SettingsPage extends StatelessWidget {
const SettingsPage({super.key});

static Route<void> buildRoute() {
return MaterialWidgetRoute(page: const SettingsPage());
}

@override
Widget build(BuildContext context) {
final globalStore = GlobalStoreWidget.of(context);
final zulipLocalizations = ZulipLocalizations.of(context);

return Scaffold(
appBar: AppBar(title: Text(zulipLocalizations.settingsPageTitle)),
body: Column(children: [
_Select(initialValue: globalStore.globalSettings.themeSetting),
]));
}
}

class _Select extends StatefulWidget {
const _Select({required this.initialValue});

final ThemeSetting initialValue;

@override
State<_Select> createState() => _SelectState();
}

class _SelectState extends State<_Select> {
late ThemeSetting value = widget.initialValue;

@override
Widget build(BuildContext context) {
final globalStore = GlobalStoreWidget.of(context);
return Column(
children: [
const ListTile(title: Text('Theme')),
for (final option in ThemeSetting.values)
ListTile(
title: Text(option.name),
leading: Radio.adaptive(
value: option,
groupValue: value,
onChanged: (newValue) {
setState(() {
value = newValue!;
});
globalStore.updateGlobalSettings(GlobalSettingsCompanion(
themeSetting: Value(value)));
})),
]);
}
}

0 comments on commit c8a7ea6

Please sign in to comment.