delivery_app/lib/providers/app_state.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),
),
);
}