Start to build app skeleton
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing

This commit is contained in:
2025-07-01 09:29:03 -04:00
parent 369a5ec764
commit ab8974c0a8
30 changed files with 1264 additions and 185 deletions

View File

@ -0,0 +1,42 @@
import 'package:flutter/foundation.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
/// A utility to observe Riverpod providers.
class AppProviderObserver extends ProviderObserver {
@override
void didAddProvider(
ProviderBase<Object?> provider,
Object? value,
ProviderContainer container,
) {
debugPrint('Provider $provider was initialized with $value');
}
@override
void didDisposeProvider(
ProviderBase<Object?> provider,
ProviderContainer container,
) {
debugPrint('Provider $provider was disposed');
}
@override
void didUpdateProvider(
ProviderBase<Object?> provider,
Object? previousValue,
Object? newValue,
ProviderContainer container,
) {
debugPrint('Provider $provider updated from $previousValue to $newValue');
}
@override
void providerDidFail(
ProviderBase<Object?> provider,
Object error,
StackTrace stackTrace,
ProviderContainer container,
) {
debugPrint('Provider $provider threw $error at $stackTrace');
}
}

View File

@ -0,0 +1,36 @@
import 'package:flutter/material.dart';
/// Creates two [ThemeData]s (light and dark variants) from a given [seedColor].
///
/// This method is needed because once a [ThemeData] is generated, we cannot get
/// the [ColorScheme] seed to generate another one based on the same seed.
(ThemeData, ThemeData) createDualThemeData({
required Color seedColor,
TextTheme? textTheme,
bool? useMaterial3,
ThemeData Function(ThemeData)? transformer,
}) {
var lightTheme = ThemeData.from(
colorScheme: ColorScheme.fromSeed(
seedColor: seedColor,
brightness: Brightness.light,
),
textTheme: textTheme,
useMaterial3: useMaterial3,
);
var darkTheme = ThemeData.from(
colorScheme: ColorScheme.fromSeed(
seedColor: seedColor,
brightness: Brightness.dark,
),
textTheme: textTheme,
useMaterial3: useMaterial3,
);
if (transformer != null) {
lightTheme = transformer(lightTheme);
darkTheme = transformer(darkTheme);
}
return (lightTheme, darkTheme);
}