Design system - lib/theme/etm_tokens.dart : source de vérité couleurs + typo (IBM Plex Sans/Mono) - lib/models/nymea_user.dart : modèle utilisateur nymea avec permissions EtmRole - app_theme.dart : ThemeData migré vers IBM Plex Sans + couleurs EtmTokens Navigation & drawer - DrawerMenuButton : logo vert gradient + ombre - Bottom nav : EtmTokens.green actif, EtmTokens.muted inactif - DrawerPanel 320 px, restyled navy + gradient header + badges rôle Dashboard (01_dashboard.html) - Hero système : status pill + 3 métriques mono + illustration maison CustomPainter - EnergyFlowWidget : 4 nœuds animés CustomPainter (flèches directionnelles) · gridPower > 0 = soutirage → flèche Grid→Home (amber) · gridPower < 0 = injection → flèche Home→Grid (bleu) - EVChargingCard restyled : badge En charge + puissance mono 38px + 3 modes + SOC bar - KPI 2×2 : spark bars, trend line, progress bar - Consommateurs principaux + Décisions d'Héos (chips motifs) - Prévisions placeholder explicite Énergie - KPI 2×2 avec icônes + fond soft + IBM Plex Mono - Sélecteur période vert pill - LineChart double axe : kW (gauche) / SOC % (droite, normalisé) - BarChart bilan énergétique Wh (amber/bleu) - Section Météo & prévision placeholder Things - Grille 2 col à hauteur intrinsèque (pas de childAspectRatio) - Bandeau statut global (simulation / connecté / hors-ligne) - _CategoryCard : header icon+label+count, séparateur coloré, liste tous items - thing_category.dart : couleurs migrées vers EtmTokens A/C — Climatisation / Chauffage - Thermostats pièces EN HAUT : actives expandées, éteintes compactes - Températures actuelle → cible ± avec EtmTokens.mono - Sélecteur mode 4 boutons (Chauf/Clim/Auto/Vent) - Chip "Chauffe au solaire en ce moment" (Héos) - Sources pilotées par Héos EN BAS : · PAC SG-Ready : 4 états (Bloqué grisé / Normal / Recommandé / Forcé) + toggle Auto · Chauffe-eau : Surplus/Éco/Boost + temp eau 52°→60°C · Climatiseur : pré-refroidissement anticipé + info solaire Packages ajoutés : google_fonts, flutter_staggered_grid_view, flutter_secure_storage Asset : assets/house.svg (illustration maison CustomPainter) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
70 lines
3.1 KiB
Dart
70 lines
3.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:google_fonts/google_fonts.dart';
|
|
|
|
class AppTheme {
|
|
// ── Couleurs historiques (dashboard, 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);
|
|
|
|
// ── Couleurs nymea-style ─────────────────────────────────────────────────────
|
|
|
|
/// Couleur d'accent principale nymea (teal/turquoise — #57baae de StyleBase.qml)
|
|
static const Color accentTeal = Color(0xFF57BAAE);
|
|
|
|
/// Fond de tuile nymea — légèrement teinté (tileBackgroundColor dans StyleBase.qml)
|
|
static const Color tileBackground = Color(0xFFF2F4F7);
|
|
|
|
/// Rayon d'arrondi nymea standard (cornerRadius: 10 dans StyleBase.qml)
|
|
static const double cornerRadius = 10.0;
|
|
|
|
// ── Couleurs flux énergie (miroir de StyleBase.qml) ──────────────────────────
|
|
|
|
/// Soutirer du réseau (grid import) — indianred
|
|
static const Color powerAcquisitionColor = Color(0xFFCD5C5C);
|
|
|
|
/// Injection sur le réseau (grid export) — yellow
|
|
static const Color powerReturnColor = Color(0xFFCDCD5C);
|
|
|
|
/// Consommation maison — blue
|
|
static const Color powerConsumptionColor = Color(0xFF5C95CD);
|
|
|
|
/// PV → maison (autoconsommation) — green
|
|
static const Color powerSelfProductionColor = Color(0xFF5CCD5C);
|
|
|
|
/// Charge batterie — purple
|
|
static const Color powerBatteryChargingColor = Color(0xFF955CCD);
|
|
|
|
/// Décharge batterie — orange
|
|
static const Color powerBatteryDischargingColor = Color(0xFFCD955C);
|
|
|
|
// ── Thème Material3 ───────────────────────────────────────────────────────────
|
|
static ThemeData get theme => ThemeData(
|
|
colorScheme: ColorScheme.fromSeed(
|
|
seedColor: const Color(0xFF1DB86A),
|
|
surface: const Color(0xFFF3F6F8),
|
|
),
|
|
scaffoldBackgroundColor: const Color(0xFFF3F6F8),
|
|
cardTheme: CardThemeData(
|
|
color: cardWhite,
|
|
elevation: 0,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(22),
|
|
),
|
|
margin: EdgeInsets.zero,
|
|
),
|
|
textTheme: GoogleFonts.ibmPlexSansTextTheme(ThemeData.light().textTheme),
|
|
useMaterial3: true,
|
|
);
|
|
}
|