mirror of
https://gitlab.com/veilid/veilidchat.git
synced 2025-02-02 02:54:59 -05:00
refactor settings page
This commit is contained in:
parent
c7b541c643
commit
0a922e97b6
@ -27,45 +27,9 @@ class SettingsPageState extends State<SettingsPage> {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
List<DropdownMenuItem<dynamic>> _getThemeDropdownItems() {
|
||||
const colorPrefs = ColorPreference.values;
|
||||
final colorNames = {
|
||||
ColorPreference.scarlet: translate('themes.scarlet'),
|
||||
ColorPreference.vapor: translate('themes.vapor'),
|
||||
ColorPreference.babydoll: translate('themes.babydoll'),
|
||||
ColorPreference.gold: translate('themes.gold'),
|
||||
ColorPreference.garden: translate('themes.garden'),
|
||||
ColorPreference.forest: translate('themes.forest'),
|
||||
ColorPreference.arctic: translate('themes.arctic'),
|
||||
ColorPreference.lapis: translate('themes.lapis'),
|
||||
ColorPreference.eggplant: translate('themes.eggplant'),
|
||||
ColorPreference.lime: translate('themes.lime'),
|
||||
ColorPreference.grim: translate('themes.grim'),
|
||||
ColorPreference.contrast: translate('themes.contrast')
|
||||
};
|
||||
|
||||
return colorPrefs
|
||||
.map((e) => DropdownMenuItem(value: e, child: Text(colorNames[e]!)))
|
||||
.toList();
|
||||
}
|
||||
|
||||
List<DropdownMenuItem<dynamic>> _getBrightnessDropdownItems() {
|
||||
const brightnessPrefs = BrightnessPreference.values;
|
||||
final brightnessNames = {
|
||||
BrightnessPreference.system: translate('brightness.system'),
|
||||
BrightnessPreference.light: translate('brightness.light'),
|
||||
BrightnessPreference.dark: translate('brightness.dark')
|
||||
};
|
||||
|
||||
return brightnessPrefs
|
||||
.map(
|
||||
(e) => DropdownMenuItem(value: e, child: Text(brightnessNames[e]!)))
|
||||
.toList();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => AsyncBlocBuilder<PreferencesCubit,
|
||||
Preferences>(
|
||||
Widget build(BuildContext context) =>
|
||||
AsyncBlocBuilder<PreferencesCubit, Preferences>(
|
||||
builder: (context, state) => ThemeSwitchingArea(
|
||||
child: Scaffold(
|
||||
// resizeToAvoidBottomInset: false,
|
||||
@ -76,52 +40,18 @@ class SettingsPageState extends State<SettingsPage> {
|
||||
onPressed: () => context.pop<void>(),
|
||||
),
|
||||
actions: <Widget>[
|
||||
const SignalStrengthMeterWidget().paddingLTRB(16, 0, 16, 0),
|
||||
const SignalStrengthMeterWidget()
|
||||
.paddingLTRB(16, 0, 16, 0),
|
||||
]),
|
||||
|
||||
body: FormBuilder(
|
||||
key: _formKey,
|
||||
child: ListView(
|
||||
children: [
|
||||
ThemeSwitcher.withTheme(
|
||||
builder: (_, switcher, theme) => FormBuilderDropdown(
|
||||
name: formFieldTheme,
|
||||
decoration: InputDecoration(
|
||||
label:
|
||||
Text(translate('settings_page.color_theme'))),
|
||||
items: _getThemeDropdownItems(),
|
||||
initialValue: state.themePreferences.colorPreference,
|
||||
onChanged: (value) async {
|
||||
final newPrefs = state.copyWith(
|
||||
themePreferences: state.themePreferences
|
||||
.copyWith(
|
||||
colorPreference:
|
||||
value as ColorPreference));
|
||||
switcher.changeTheme(
|
||||
theme: newPrefs.themePreferences.themeData());
|
||||
await PreferencesRepository.instance.set(newPrefs);
|
||||
setState(() {});
|
||||
})),
|
||||
ThemeSwitcher.withTheme(
|
||||
builder: (_, switcher, theme) => FormBuilderDropdown(
|
||||
name: formFieldBrightness,
|
||||
decoration: InputDecoration(
|
||||
label: Text(
|
||||
translate('settings_page.brightness_mode'))),
|
||||
items: _getBrightnessDropdownItems(),
|
||||
initialValue:
|
||||
state.themePreferences.brightnessPreference,
|
||||
onChanged: (value) async {
|
||||
final newPrefs = state.copyWith(
|
||||
themePreferences: state.themePreferences
|
||||
.copyWith(
|
||||
brightnessPreference:
|
||||
value as BrightnessPreference));
|
||||
switcher.changeTheme(
|
||||
theme: newPrefs.themePreferences.themeData());
|
||||
await PreferencesRepository.instance.set(newPrefs);
|
||||
setState(() {});
|
||||
})),
|
||||
buildSettingsPageColorPreferences(
|
||||
onChanged: () => setState(() {})),
|
||||
buildSettingsPageBrightnessPreferences(
|
||||
onChanged: () => setState(() {})),
|
||||
],
|
||||
),
|
||||
).paddingSymmetric(horizontal: 24, vertical: 8),
|
||||
|
@ -1 +1,2 @@
|
||||
export 'models/models.dart';
|
||||
export 'views/views.dart';
|
||||
|
45
lib/theme/views/brightness_preferences.dart
Normal file
45
lib/theme/views/brightness_preferences.dart
Normal file
@ -0,0 +1,45 @@
|
||||
import 'package:animated_theme_switcher/animated_theme_switcher.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
||||
import 'package:flutter_translate/flutter_translate.dart';
|
||||
|
||||
import '../../settings/settings.dart';
|
||||
import '../models/models.dart';
|
||||
|
||||
const String formFieldBrightness = 'brightness';
|
||||
|
||||
List<DropdownMenuItem<dynamic>> _getBrightnessDropdownItems() {
|
||||
const brightnessPrefs = BrightnessPreference.values;
|
||||
final brightnessNames = {
|
||||
BrightnessPreference.system: translate('brightness.system'),
|
||||
BrightnessPreference.light: translate('brightness.light'),
|
||||
BrightnessPreference.dark: translate('brightness.dark')
|
||||
};
|
||||
|
||||
return brightnessPrefs
|
||||
.map((e) => DropdownMenuItem(value: e, child: Text(brightnessNames[e]!)))
|
||||
.toList();
|
||||
}
|
||||
|
||||
Widget buildSettingsPageBrightnessPreferences(
|
||||
{required void Function() onChanged}) {
|
||||
final preferencesRepository = PreferencesRepository.instance;
|
||||
final themePreferences = preferencesRepository.value.themePreferences;
|
||||
return ThemeSwitcher.withTheme(
|
||||
builder: (_, switcher, theme) => FormBuilderDropdown(
|
||||
name: formFieldBrightness,
|
||||
decoration: InputDecoration(
|
||||
label: Text(translate('settings_page.brightness_mode'))),
|
||||
items: _getBrightnessDropdownItems(),
|
||||
initialValue: themePreferences.brightnessPreference,
|
||||
onChanged: (value) async {
|
||||
final newThemePrefs = themePreferences.copyWith(
|
||||
brightnessPreference: value as BrightnessPreference);
|
||||
final newPrefs = preferencesRepository.value
|
||||
.copyWith(themePreferences: newThemePrefs);
|
||||
|
||||
await preferencesRepository.set(newPrefs);
|
||||
switcher.changeTheme(theme: newThemePrefs.themeData());
|
||||
onChanged();
|
||||
}));
|
||||
}
|
55
lib/theme/views/color_preferences.dart
Normal file
55
lib/theme/views/color_preferences.dart
Normal file
@ -0,0 +1,55 @@
|
||||
import 'package:animated_theme_switcher/animated_theme_switcher.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
||||
import 'package:flutter_translate/flutter_translate.dart';
|
||||
|
||||
import '../../settings/settings.dart';
|
||||
import '../models/models.dart';
|
||||
|
||||
const String formFieldTheme = 'theme';
|
||||
|
||||
List<DropdownMenuItem<dynamic>> _getThemeDropdownItems() {
|
||||
const colorPrefs = ColorPreference.values;
|
||||
final colorNames = {
|
||||
ColorPreference.scarlet: translate('themes.scarlet'),
|
||||
ColorPreference.vapor: translate('themes.vapor'),
|
||||
ColorPreference.babydoll: translate('themes.babydoll'),
|
||||
ColorPreference.gold: translate('themes.gold'),
|
||||
ColorPreference.garden: translate('themes.garden'),
|
||||
ColorPreference.forest: translate('themes.forest'),
|
||||
ColorPreference.arctic: translate('themes.arctic'),
|
||||
ColorPreference.lapis: translate('themes.lapis'),
|
||||
ColorPreference.eggplant: translate('themes.eggplant'),
|
||||
ColorPreference.lime: translate('themes.lime'),
|
||||
ColorPreference.grim: translate('themes.grim'),
|
||||
ColorPreference.contrast: translate('themes.contrast')
|
||||
};
|
||||
|
||||
return colorPrefs
|
||||
.map((e) => DropdownMenuItem(value: e, child: Text(colorNames[e]!)))
|
||||
.toList();
|
||||
}
|
||||
|
||||
Widget buildSettingsPageColorPreferences({required void Function() onChanged}) {
|
||||
final preferencesRepository = PreferencesRepository.instance;
|
||||
final themePreferences = preferencesRepository.value.themePreferences;
|
||||
return ThemeSwitcher.withTheme(
|
||||
builder: (_, switcher, theme) => FormBuilderDropdown(
|
||||
name: formFieldTheme,
|
||||
decoration: InputDecoration(
|
||||
label: Text(translate('settings_page.color_theme'))),
|
||||
items: _getThemeDropdownItems(),
|
||||
initialValue: themePreferences.colorPreference,
|
||||
onChanged: (value) async {
|
||||
final newThemePrefs = themePreferences.copyWith(
|
||||
colorPreference: value as ColorPreference);
|
||||
final newPrefs = preferencesRepository.value
|
||||
.copyWith(themePreferences: newThemePrefs);
|
||||
|
||||
await preferencesRepository.set(newPrefs);
|
||||
switcher.changeTheme(theme: newThemePrefs.themeData());
|
||||
onChanged();
|
||||
|
||||
onChanged();
|
||||
}));
|
||||
}
|
2
lib/theme/views/views.dart
Normal file
2
lib/theme/views/views.dart
Normal file
@ -0,0 +1,2 @@
|
||||
export 'brightness_preferences.dart';
|
||||
export 'color_preferences.dart';
|
Loading…
x
Reference in New Issue
Block a user