- settings_provider: AppSettings (ecuType, pollingInterval) StateNotifier - bt_provider: BtNotifier (disconnected/connecting/connected/error states), btServiceProvider singleton, pairedDevicesProvider FutureProvider, internal frameStream piped through StreamController - sensor_provider: sensorStateProvider StreamProvider (auto S300/KPro), latestSensorProvider convenience Provider - theme_provider: AppThemeVariant (red/green × dark/light) StateNotifier - main.dart: fully Riverpod — ProviderScope, ConsumerWidget throughout, no setState for BT state, providers own all lifecycle
33 lines
933 B
Dart
33 lines
933 B
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
|
|
enum AppThemeVariant { redDark, redLight, greenDark, greenLight }
|
|
|
|
class ThemeNotifier extends StateNotifier<AppThemeVariant> {
|
|
ThemeNotifier() : super(AppThemeVariant.redDark);
|
|
|
|
void set(AppThemeVariant v) => state = v;
|
|
}
|
|
|
|
final themeProvider =
|
|
StateNotifierProvider<ThemeNotifier, AppThemeVariant>(
|
|
(ref) => ThemeNotifier(),
|
|
);
|
|
|
|
/// Returns the accent color for the current theme variant.
|
|
extension AppThemeVariantX on AppThemeVariant {
|
|
Color get accentColor {
|
|
switch (this) {
|
|
case AppThemeVariant.redDark:
|
|
case AppThemeVariant.redLight:
|
|
return const Color(0xFFFF4444);
|
|
case AppThemeVariant.greenDark:
|
|
case AppThemeVariant.greenLight:
|
|
return const Color(0xFF00E676);
|
|
}
|
|
}
|
|
|
|
bool get isDark =>
|
|
this == AppThemeVariant.redDark || this == AppThemeVariant.greenDark;
|
|
}
|