game/lib/providers/settings_provider.dart

60 lines
2.0 KiB
Dart

import 'package:flutter/foundation.dart';
import 'package:shared_preferences/shared_preferences.dart';
class SettingsProvider with ChangeNotifier {
static const String _keyEnemyAnim = 'settings_enemy_anim';
static const String _keyAttackAnimScale = 'settings_attack_anim_scale';
bool _enableEnemyAnimations = true; // Default: Enabled
double _attackAnimScale = 5.0; // Default: 5.0
double _shakeOffset = 30.0; // Default: 30.0
double _shakeCount =
3.0; // Default: 3.0 (using double for slider convenience, cast to int where needed)
bool get enableEnemyAnimations => _enableEnemyAnimations;
double get attackAnimScale => _attackAnimScale;
double get shakeOffset => _shakeOffset;
double get shakeCount => _shakeCount;
SettingsProvider() {
_loadSettings();
}
Future<void> _loadSettings() async {
final prefs = await SharedPreferences.getInstance();
_enableEnemyAnimations = prefs.getBool(_keyEnemyAnim) ?? true;
_attackAnimScale = prefs.getDouble(_keyAttackAnimScale) ?? 5.0;
_shakeOffset = prefs.getDouble('settings_shake_offset') ?? 30.0;
_shakeCount = prefs.getDouble('settings_shake_count') ?? 3.0;
notifyListeners();
}
Future<void> toggleEnemyAnimations(bool value) async {
_enableEnemyAnimations = value;
notifyListeners();
final prefs = await SharedPreferences.getInstance();
await prefs.setBool(_keyEnemyAnim, value);
}
Future<void> setAttackAnimScale(double value) async {
_attackAnimScale = value;
notifyListeners();
final prefs = await SharedPreferences.getInstance();
await prefs.setDouble(_keyAttackAnimScale, value);
}
Future<void> setShakeOffset(double value) async {
_shakeOffset = value;
notifyListeners();
final prefs = await SharedPreferences.getInstance();
await prefs.setDouble('settings_shake_offset', value);
}
Future<void> setShakeCount(double value) async {
_shakeCount = value;
notifyListeners();
final prefs = await SharedPreferences.getInstance();
await prefs.setDouble('settings_shake_count', value);
}
}