mirror of
https://gitlab.com/veilid/veilidchat.git
synced 2025-02-02 11:24:50 -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();
|
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
|
@override
|
||||||
Widget build(BuildContext context) => AsyncBlocBuilder<PreferencesCubit,
|
Widget build(BuildContext context) =>
|
||||||
Preferences>(
|
AsyncBlocBuilder<PreferencesCubit, Preferences>(
|
||||||
builder: (context, state) => ThemeSwitchingArea(
|
builder: (context, state) => ThemeSwitchingArea(
|
||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
// resizeToAvoidBottomInset: false,
|
// resizeToAvoidBottomInset: false,
|
||||||
@ -76,52 +40,18 @@ class SettingsPageState extends State<SettingsPage> {
|
|||||||
onPressed: () => context.pop<void>(),
|
onPressed: () => context.pop<void>(),
|
||||||
),
|
),
|
||||||
actions: <Widget>[
|
actions: <Widget>[
|
||||||
const SignalStrengthMeterWidget().paddingLTRB(16, 0, 16, 0),
|
const SignalStrengthMeterWidget()
|
||||||
|
.paddingLTRB(16, 0, 16, 0),
|
||||||
]),
|
]),
|
||||||
|
|
||||||
body: FormBuilder(
|
body: FormBuilder(
|
||||||
key: _formKey,
|
key: _formKey,
|
||||||
child: ListView(
|
child: ListView(
|
||||||
children: [
|
children: [
|
||||||
ThemeSwitcher.withTheme(
|
buildSettingsPageColorPreferences(
|
||||||
builder: (_, switcher, theme) => FormBuilderDropdown(
|
onChanged: () => setState(() {})),
|
||||||
name: formFieldTheme,
|
buildSettingsPageBrightnessPreferences(
|
||||||
decoration: InputDecoration(
|
onChanged: () => setState(() {})),
|
||||||
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(() {});
|
|
||||||
})),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
).paddingSymmetric(horizontal: 24, vertical: 8),
|
).paddingSymmetric(horizontal: 24, vertical: 8),
|
||||||
|
@ -1 +1,2 @@
|
|||||||
export 'models/models.dart';
|
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