import 'package:flutter/material.dart'; import '../services/database.dart'; class AppState extends ChangeNotifier { final DatabaseService _db = DatabaseService(); bool _darkMode = false; String _mapStyle = 'voyager'; // 'voyager', 'osm', 'dark', 'positron' bool _isLoaded = false; bool get darkMode => _darkMode; String get mapStyle => _mapStyle; bool get isLoaded => _isLoaded; ThemeData get theme => _darkMode ? _darkTheme : _lightTheme; String get tileUrl { if (_darkMode) { return 'https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png'; } switch (_mapStyle) { case 'osm': return 'https://tile.openstreetmap.org/{z}/{x}/{y}.png'; case 'dark': return 'https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png'; case 'positron': return 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png'; case 'voyager': default: return 'https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}{r}.png'; } } String get tileSubdomains => 'abcd'; Future loadSettings() async { _darkMode = await _db.getSetting('dark_mode', false); _mapStyle = await _db.getSetting('map_style', 'voyager'); _isLoaded = true; notifyListeners(); } Future setDarkMode(bool value) async { _darkMode = value; notifyListeners(); await _db.setSetting('dark_mode', value); } Future setMapStyle(String style) async { _mapStyle = style; notifyListeners(); await _db.setSetting('map_style', style); } // ── Themes ────────────────────────────────────────────── static final _lightTheme = ThemeData( colorScheme: ColorScheme.fromSeed( seedColor: Colors.blue, brightness: Brightness.light, ), useMaterial3: true, brightness: Brightness.light, ); static final _darkTheme = ThemeData( colorScheme: ColorScheme.fromSeed( seedColor: Colors.blue, brightness: Brightness.dark, ), useMaterial3: true, brightness: Brightness.dark, scaffoldBackgroundColor: const Color(0xFF121212), cardColor: const Color(0xFF1E1E1E), appBarTheme: const AppBarTheme( backgroundColor: Color(0xFF1E1E1E), foregroundColor: Colors.white, ), bottomSheetTheme: const BottomSheetThemeData( backgroundColor: Color(0xFF1E1E1E), ), ); }