84 lines
2.4 KiB
Dart
84 lines
2.4 KiB
Dart
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<void> loadSettings() async {
|
|
_darkMode = await _db.getSetting('dark_mode', false);
|
|
_mapStyle = await _db.getSetting('map_style', 'voyager');
|
|
_isLoaded = true;
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> setDarkMode(bool value) async {
|
|
_darkMode = value;
|
|
notifyListeners();
|
|
await _db.setSetting('dark_mode', value);
|
|
}
|
|
|
|
Future<void> 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),
|
|
),
|
|
);
|
|
}
|