Files
wushu/lib/services/get/tap_liquid_glass_controller.dart
Developer cba04235c8 release
2026-04-03 03:26:06 +08:00

90 lines
2.9 KiB
Dart

// 时间: 2026-04-02
// 功能: Tap沉浸光感导航栏控制器
// 介绍: 管理液态玻璃导航栏的开关状态和透明度级别
// 最新变化: 添加透明度级别控制(弱、中、强)
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../../config/app_config.dart';
/// 透明度级别枚举
enum TransparencyLevel {
weak, // 弱 - 当前效果
medium, // 中 - 中等透明度
strong, // 强 - 几乎透明
}
class TapLiquidGlassController extends GetxController {
SharedPreferences? _prefs;
final _isEnabled = true.obs;
final _transparencyLevel = TransparencyLevel.medium.obs;
bool get isEnabled => _isEnabled.value;
RxBool get isEnabledRx => _isEnabled;
TransparencyLevel get transparencyLevel => _transparencyLevel.value;
Rx<TransparencyLevel> get transparencyLevelRx => _transparencyLevel;
/// 获取透明度级别的索引(用于视图层)
int get transparencyLevelIndex => _transparencyLevel.value.index;
/// 获取透明度配置
/// 返回整体背景透明度
Map<String, double> get transparencyValues {
switch (_transparencyLevel.value) {
case TransparencyLevel.weak:
return {'backgroundOpacity': 0.5};
case TransparencyLevel.medium:
return {'backgroundOpacity': 0.2};
case TransparencyLevel.strong:
return {'backgroundOpacity': 0.01};
}
}
/// 获取透明度级别的中文名称
String get transparencyLevelLabel {
switch (_transparencyLevel.value) {
case TransparencyLevel.weak:
return '';
case TransparencyLevel.medium:
return '';
case TransparencyLevel.strong:
return '';
}
}
/// 通过索引设置透明度级别
Future<void> setTransparencyLevelByIndex(int index) async {
final level = TransparencyLevel
.values[index.clamp(0, TransparencyLevel.values.length - 1)];
await setTransparencyLevel(level);
}
@override
void onInit() {
super.onInit();
_loadSettings();
}
Future<void> _loadSettings() async {
_prefs = await SharedPreferences.getInstance();
_isEnabled.value = _prefs?.getBool(AppConfig.keyTapLiquidGlass) ?? true;
final levelIndex = _prefs?.getInt('tap_liquid_glass_transparency') ?? 1;
_transparencyLevel.value = TransparencyLevel
.values[levelIndex.clamp(0, TransparencyLevel.values.length - 1)];
}
Future<void> toggleEnabled(bool enabled) async {
if (_isEnabled.value == enabled) return;
_isEnabled.value = enabled;
_prefs ??= await SharedPreferences.getInstance();
await _prefs?.setBool(AppConfig.keyTapLiquidGlass, enabled);
}
Future<void> setTransparencyLevel(TransparencyLevel level) async {
if (_transparencyLevel.value == level) return;
_transparencyLevel.value = level;
_prefs ??= await SharedPreferences.getInstance();
await _prefs?.setInt('tap_liquid_glass_transparency', level.index);
}
}