Lot Connexions multi-HEMS : - modèle Installation + InstallationStore (persistance par UUID ; métadonnées SharedPreferences, token via flutter_secure_storage) - ConnectionManager au-dessus de nymea_service : mono-connexion, switchTo, connectNew, enterDemo (démo = active factice), contrôle d'identité DHCP - nymea_service : connect() réveillé (ws://4444, token par UUID), capture Hello (uuid/name/initialSetupRequired), authenticate/createUser, resetState - écran Installations (3 états) + déverrouillage installateur depuis la racine - écran Connexion : auth 2 branches (JSONRPC.Authenticate / CreateUser), détection auto via initialSetupRequired, segmenteur de repli - gate de routage (redirect + refreshListenable merge[cm,svc]) ; hasActiveConnection = isSimulation || (connected && authenticated) - en-tête drawer cliquable → Installations - invalidation des caches au switch (service.resetState + clearForSwitch rôles/scheduler/tariff), sans persist() Lot Rôles & appareils : - EnergySetupProvider refondu en tri-état (present/absent/non-configuré) - écran roles_devices_screen (3 zones, drag-priorité, inférence solaire/batterie) - LoadDescriptor (etmvariableload, rév.2 : PAC exclue → SG-Ready) ; Energy.SetRootMeter réel, Get/SetLoadConfig en stub loggé Correctifs : - bug signe énergie : production +, consommation NÉGATIVE sur nymea 1.15.2 → consumptionW/home en .abs() (autoconso n'est plus clouée à 0) - UUID Hello brace-wrapped normalisé Tests : flutter analyze 0 erreur ; gate + zéro-fuite au switch (5/5 verts). Validé en vrai : login auth .120, .75 ouvert, switch, déverrouillage installateur. Note : embarque aussi le WIP dashboard/thème déjà présent dans l'arbre. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
70 lines
3.2 KiB
Dart
70 lines
3.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:google_fonts/google_fonts.dart';
|
|
|
|
class AppTheme {
|
|
// ── Couleurs historiques (widgets existants) ──────────────────────────────
|
|
static const Color primaryGreen = Color(0xFF4CAF50);
|
|
static const Color solarYellow = Color(0xFFF5C842);
|
|
static const Color gridGray = Color(0xFF5A6473);
|
|
static const Color homeBlue = Color(0xFF5BA4CF);
|
|
static const Color batteryGreen = Color(0xFF4CAF50);
|
|
static const Color accentOrange = Color(0xFFFF7043);
|
|
static const Color backgroundGray= Color(0xFFF0F2F5);
|
|
static const Color cardWhite = Color(0xFFFFFFFF);
|
|
static const Color textDark = Color(0xFF1A1A2E);
|
|
static const Color textLight = Color(0xFF6B7280);
|
|
static const Color boostRed = Color(0xFFEF5350);
|
|
static const Color pvGreen = Color(0xFF43A047);
|
|
static const Color minPvBlue = Color(0xFF42A5F5);
|
|
static const Color accentTeal = Color(0xFF57BAAE);
|
|
static const Color tileBackground= Color(0xFFF2F4F7);
|
|
static const double cornerRadius = 10.0;
|
|
|
|
static const Color powerAcquisitionColor = Color(0xFFCD5C5C);
|
|
static const Color powerReturnColor = Color(0xFFCDCD5C);
|
|
static const Color powerConsumptionColor = Color(0xFF5C95CD);
|
|
static const Color powerSelfProductionColor= Color(0xFF5CCD5C);
|
|
static const Color powerBatteryChargingColor = Color(0xFF955CCD);
|
|
static const Color powerBatteryDischargingColor= Color(0xFFCD955C);
|
|
|
|
// ── Thème clair ───────────────────────────────────────────────────────────
|
|
static ThemeData get theme => ThemeData(
|
|
colorScheme: ColorScheme.fromSeed(
|
|
seedColor: const Color(0xFF31A3DD),
|
|
surface: const Color(0xFFEEF2F5),
|
|
),
|
|
scaffoldBackgroundColor: const Color(0xFFEEF2F5),
|
|
cardTheme: const CardThemeData(
|
|
color: Colors.white,
|
|
elevation: 0,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.all(Radius.circular(20)),
|
|
),
|
|
margin: EdgeInsets.zero,
|
|
),
|
|
textTheme: GoogleFonts.ibmPlexSansTextTheme(ThemeData.light().textTheme),
|
|
useMaterial3: true,
|
|
);
|
|
|
|
// ── Thème sombre ──────────────────────────────────────────────────────────
|
|
static ThemeData get darkTheme => ThemeData(
|
|
brightness: Brightness.dark,
|
|
colorScheme: ColorScheme.fromSeed(
|
|
seedColor: const Color(0xFF31A3DD),
|
|
brightness: Brightness.dark,
|
|
surface: const Color(0xFF0D2B3B),
|
|
),
|
|
scaffoldBackgroundColor: const Color(0xFF06141D),
|
|
cardTheme: const CardThemeData(
|
|
color: Color(0xFF0D2B3B),
|
|
elevation: 0,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.all(Radius.circular(20)),
|
|
),
|
|
margin: EdgeInsets.zero,
|
|
),
|
|
textTheme: GoogleFonts.ibmPlexSansTextTheme(ThemeData.dark().textTheme),
|
|
useMaterial3: true,
|
|
);
|
|
}
|