90 lines
2.9 KiB
Dart
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.weak.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') ?? 0;
|
|
_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);
|
|
}
|
|
}
|