From 0a6cde914c7012f71b9caf7ff59e0ac8ea7c3dc7 Mon Sep 17 00:00:00 2001 From: Patrick Schurig ETM-Schurig Date: Thu, 28 May 2026 22:56:48 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20web=20layout=20=E2=80=94=20mobile-frame?= =?UTF-8?q?=20container=20on=20desktop=20browsers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.dart | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/lib/main.dart b/lib/main.dart index 934fb2b..afca94f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; +import 'package:flutter/foundation.dart' show kIsWeb; import 'providers/app_settings_provider.dart'; import 'providers/energy_setup_provider.dart'; @@ -156,6 +157,34 @@ class NymeaEnergyApp extends StatelessWidget { debugShowCheckedModeBanner: false, theme: AppTheme.theme, routerConfig: _router, + builder: (context, child) { + // Sur mobile natif, on rend tel quel + if (!kIsWeb) return child!; + // Sur web : si la fenêtre est déjà étroite (smartphone qui visite la PWA), + // on rend plein écran. Sur desktop, on encadre dans un viewport "mobile". + final width = MediaQuery.sizeOf(context).width; + if (width < 600) return child!; + return Container( + color: const Color(0xFF0a1f2b), // navy ETM en arrière-plan + alignment: Alignment.center, + child: Container( + constraints: const BoxConstraints(maxWidth: 440, maxHeight: 900), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(24), + boxShadow: [ + BoxShadow( + color: Colors.black.withValues(alpha: 0.5), + blurRadius: 40, + ), + ], + ), + child: ClipRRect( + borderRadius: BorderRadius.circular(24), + child: child, + ), + ), + ); + }, ); } }