import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'data/hub_endpoint.dart'; import 'data/hub_repository.dart'; import 'data/repository.dart'; import 'pages/landing_page.dart'; import 'theme/lawheatmap_theme.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); final settings = await HubSettings.load(); final repository = await _pickRepository(settings); runApp(LawHeatmapApp(repository: repository, settings: settings)); } /// Decide which repository to start with. /// /// useHub=false → Mock, no probe (fast offline start) /// useHub=true, healthy → HubRepository /// useHub=true, NOT ok → MockRepository (graceful fallback; /// UI banner shows hub-down so the /// user can re-try from settings) Future _pickRepository(HubSettings settings) async { if (!settings.useHub) return const MockRepository(); final hub = await HubRepository.connect(settings); if (hub.isHealthy) return hub; return const MockRepository(); } class LawHeatmapApp extends StatelessWidget { const LawHeatmapApp({ super.key, this.repository = const MockRepository(), this.settings, }); final EvaluationRepository repository; final HubSettings? settings; @override Widget build(BuildContext context) { return MaterialApp( title: 'F∆I Law-Heatmap', debugShowCheckedModeBanner: false, theme: LawHeatmapTheme.light(), darkTheme: LawHeatmapTheme.dark(), themeMode: ThemeMode.dark, localizationsDelegates: const [ GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: const [Locale('de'), Locale('en')], home: LandingPage(repository: repository), ); } }