深色模式、首页设置页面和功能优化
This commit is contained in:
89
lib/services/get/tap_liquid_glass_controller.dart
Normal file
89
lib/services/get/tap_liquid_glass_controller.dart
Normal file
@@ -0,0 +1,89 @@
|
||||
// 时间: 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user