import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'ui/features/speedometer/speedometer_view.dart'; import 'ui/features/speedometer/speedometer_view_model.dart'; import 'providers/settings_provider.dart'; import 'data/repositories/location_repository.dart'; /// Stub ViewModel for the overlay feature. /// /// [Overlay] has been deferred — see ui/features/overlay/ for details. class OverlayViewModel extends ChangeNotifier { bool get isOverlayActive => false; void toggleOverlay() {} void closeOverlay() {} } void main() async { WidgetsFlutterBinding.ensureInitialized(); final prefs = await SharedPreferences.getInstance(); runApp( MultiProvider( providers: [ // Shared Provider.value(value: prefs), // Data layer ChangeNotifierProvider( create: (_) { final repo = LocationRepository(); repo.initialize(); return repo; }, ), // UI layer — ViewModels subscribe to repositories ChangeNotifierProvider( create: (context) => SettingsProvider( context.read(), ), ), ChangeNotifierProvider( create: (context) => SpeedometerViewModel( context.read(), context.read(), ), ), ChangeNotifierProvider( create: (_) => OverlayViewModel(), ), ], child: const SpeedoApp(), ), ); } class SpeedoApp extends StatelessWidget { const SpeedoApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Speedo', debugShowCheckedModeBanner: false, theme: ThemeData( useMaterial3: true, brightness: Brightness.dark, colorSchemeSeed: Colors.green, ), home: const SpeedometerView(), ); } }