mirror of
https://github.com/rzuasti/oott.git
synced 2026-07-08 19:21:54 +02:00
Frontend usability and aesthetics pass across web and mobile: - Add shared layout tokens (theme/dimens.dart: Insets + Breakpoints) and replace magic-number spacing and per-file breakpoint consts. - Route both themes through buildAppTheme (theme/theme_builder.dart): explicit useMaterial3 and a shared branded textTheme (Barlow Condensed for display/headline/title styles); logo now reads its style from the theme. - Move screen titles into the shared AppBar (route-derived) and drop the redundant in-body headers; upgrade Settings buttons to M3 FilledButton. - Add reusable EmptyState and skeleton loaders; Devices empty state links to scanner status, notifications get filter-aware messages. - Add a first-run welcome intro and Save-disabled helper text in Settings. - Make device Filter/Sort adaptive: bottom sheet on phones, dialog on wide. - Collapse the device-list filter chips and Sort/Filter buttons into one row; rename the home Scanners card title and align its style. Tests: add EmptyState/skeleton widget tests and Settings first-run cases; update tests for the FilledButton swap and relocated titles. 89 passing, dart analyze clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
37 lines
1.3 KiB
Dart
37 lines
1.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:google_fonts/google_fonts.dart';
|
|
|
|
import 'app_colors.dart';
|
|
|
|
/// Builds a Material 3 [ThemeData] from a [ColorScheme] and the app's custom
|
|
/// [AppColorExtension], applying the shared OOTT typography.
|
|
///
|
|
/// Both bundled themes (Catppuccin Mocha, Gruvbox Dark) go through here so they
|
|
/// stay visually consistent — only their colors differ.
|
|
ThemeData buildAppTheme({
|
|
required ColorScheme colorScheme,
|
|
required AppColorExtension appColors,
|
|
}) {
|
|
final base = ThemeData(colorScheme: colorScheme, useMaterial3: true);
|
|
return base.copyWith(
|
|
textTheme: _brandTextTheme(base.textTheme),
|
|
extensions: [appColors],
|
|
);
|
|
}
|
|
|
|
/// Applies the OOTT brand font (Barlow Condensed) to display, headline and
|
|
/// large-title styles while leaving body/label styles on the default face for
|
|
/// readability. Sizes and colors from [base] are preserved.
|
|
TextTheme _brandTextTheme(TextTheme base) {
|
|
final branded = GoogleFonts.barlowCondensedTextTheme(base);
|
|
return base.copyWith(
|
|
displayLarge: branded.displayLarge,
|
|
displayMedium: branded.displayMedium,
|
|
displaySmall: branded.displaySmall,
|
|
headlineLarge: branded.headlineLarge,
|
|
headlineMedium: branded.headlineMedium,
|
|
headlineSmall: branded.headlineSmall,
|
|
titleLarge: branded.titleLarge,
|
|
);
|
|
}
|