// 时间: 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.weak.obs; bool get isEnabled => _isEnabled.value; RxBool get isEnabledRx => _isEnabled; TransparencyLevel get transparencyLevel => _transparencyLevel.value; Rx get transparencyLevelRx => _transparencyLevel; /// 获取透明度级别的索引(用于视图层) int get transparencyLevelIndex => _transparencyLevel.value.index; /// 获取透明度配置 /// 返回整体背景透明度 Map 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 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 _loadSettings() async { _prefs = await SharedPreferences.getInstance(); _isEnabled.value = _prefs?.getBool(AppConfig.keyTapLiquidGlass) ?? true; final levelIndex = _prefs?.getInt('tap_liquid_glass_transparency') ?? 0; _transparencyLevel.value = TransparencyLevel .values[levelIndex.clamp(0, TransparencyLevel.values.length - 1)]; } Future toggleEnabled(bool enabled) async { if (_isEnabled.value == enabled) return; _isEnabled.value = enabled; _prefs ??= await SharedPreferences.getInstance(); await _prefs?.setBool(AppConfig.keyTapLiquidGlass, enabled); } Future 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); } }