Start to build app skeleton
This commit is contained in:
42
moneymgr_mobile/lib/utils/provider_observer.dart
Normal file
42
moneymgr_mobile/lib/utils/provider_observer.dart
Normal 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');
|
||||
}
|
||||
}
|
36
moneymgr_mobile/lib/utils/theme_utils.dart
Normal file
36
moneymgr_mobile/lib/utils/theme_utils.dart
Normal 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);
|
||||
}
|
Reference in New Issue
Block a user