This commit is contained in:
Henry Hiles 2026-07-16 23:53:01 -04:00
commit b2fd944293
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
4 changed files with 45 additions and 35 deletions

View file

@ -1,7 +1,7 @@
import "package:flutter/material.dart";
extension SchemeToTheme on ColorScheme {
ThemeData get theme => .from(colorScheme: this).copyWith(
ThemeData getTheme(bool useDefaultFont) => .from(colorScheme: this).copyWith(
cardTheme: .new(color: primaryContainer),
popupMenuTheme: .new(
shape: RoundedRectangleBorder(borderRadius: .circular(16)),
@ -11,7 +11,9 @@ extension SchemeToTheme on ColorScheme {
titleSpacing: 0,
backgroundColor: surfaceContainerLow,
),
textTheme: ThemeData(
textTheme: useDefaultFont
? null
: ThemeData(
fontFamilyFallback: ["sans", "emoji"],
brightness: brightness,
).textTheme,

View file

@ -8,6 +8,7 @@ import "package:nexus/controllers/client_controller.dart";
import "package:nexus/controllers/client_state_controller.dart";
import "package:nexus/controllers/header_controller.dart";
import "package:nexus/controllers/multi_provider_controller.dart";
import "package:nexus/controllers/settings_controller.dart";
import "package:nexus/controllers/shared_prefs_controller.dart";
import "package:nexus/helpers/extensions/better_when.dart";
import "package:nexus/helpers/extensions/scheme_to_theme.dart";
@ -90,20 +91,43 @@ class App extends StatelessWidget {
@override
Widget build(BuildContext context) => DynamicColorBuilder(
builder: (lightDynamic, darkDynamic) => MaterialApp(
builder: (lightDynamic, darkDynamic) => Consumer(
builder: (context, ref, child) => MaterialApp(
navigatorKey: navigatorKey,
debugShowCheckedModeBanner: false,
// Use indigo to work around bugs in theme generation
theme: (lightDynamic ?? ColorScheme.fromSeed(seedColor: Colors.indigo))
.theme,
.getTheme(
ref
.watch(SettingsController.provider)
.maybeWhen(
orElse: () => true,
data: (settings) => settings.useSystemFont,
),
),
darkTheme:
(darkDynamic ??
ColorScheme.fromSeed(
seedColor: Colors.indigo,
brightness: Brightness.dark,
))
.theme,
home: Scaffold(
.getTheme(
ref
.watch(SettingsController.provider)
.maybeWhen(
orElse: () => true,
data: (settings) => settings.useSystemFont,
),
),
themeMode: ref
.watch(SettingsController.provider)
.maybeWhen(
data: (settings) => settings.theme,
orElse: () => ThemeMode.system,
),
home: child,
),
child: Scaffold(
body: Consumer(
builder: (_, ref, _) => ref
.watch(

View file

@ -7,7 +7,6 @@ part "settings.g.dart";
abstract class Settings with _$Settings {
const factory Settings({
@Default(ThemeMode.light) ThemeMode theme,
@Default(true) bool useClientSideGenerations,
@Default(false) bool useSystemFont,
}) = _Settings;

View file

@ -48,21 +48,6 @@ class SettingsPage extends ConsumerWidget {
.onError(showError),
),
),
Setting(
title: "Use Client Side Decorations",
description:
"On desktop, toggle between client-side or server-side decorations",
builder: (title, description) => SwitchListTile(
title: Text(title),
secondary: Icon(Icons.border_top),
subtitle: Text(description),
value: settings.useClientSideGenerations,
onChanged: (value) => ref
.watch(SettingsController.provider.notifier)
.set(settings.copyWith(useClientSideGenerations: value))
.onError(showError),
),
),
Setting(
title: "Use System Font",
description: