Add settings page (#46)

Fixes #37, fixes #47.

Reviewed-on: Nexus/nexus#46
This commit is contained in:
Henry Hiles 2026-07-17 20:36:41 -04:00 committed by Henry Hiles
commit 0ef9b25320
20 changed files with 970 additions and 28 deletions

16
lib/models/setting.dart Normal file
View file

@ -0,0 +1,16 @@
import "package:flutter/material.dart";
class Setting {
final String title;
final String description;
final IconData icon;
final Widget Function(String title, String description, IconData icon)
builder;
Setting({
required this.title,
required this.description,
required this.builder,
required this.icon,
});
}

16
lib/models/settings.dart Normal file
View file

@ -0,0 +1,16 @@
import "package:flutter/material.dart";
import "package:freezed_annotation/freezed_annotation.dart";
part "settings.freezed.dart";
part "settings.g.dart";
@freezed
abstract class Settings with _$Settings {
const factory Settings({
@Default(ThemeMode.system) ThemeMode theme,
@Default(true) bool useDynamicTheming,
@Default(false) bool linuxMobileMode,
}) = _Settings;
factory Settings.fromJson(Map<String, Object?> json) =>
_$SettingsFromJson(json);
}

View file

@ -0,0 +1,14 @@
import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:flutter/material.dart";
import "package:freezed_annotation/freezed_annotation.dart";
import "package:nexus/models/setting.dart";
part "settings_category.freezed.dart";
@freezed
abstract class SettingsCategory with _$SettingsCategory {
const factory SettingsCategory({
required String title,
required IconData icon,
required IList<Setting> settings,
}) = _SettingsCategory;
}