Files
CloudHome-Ops/lib/providers/metrics_visibility_provider.dart

52 lines
1.6 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shared_preferences/shared_preferences.dart';
/// 持久化键:是否显示设备详情页的运行指标(CPU / 内存 / 磁盘 / 网络)。
const String _kShowRuntimeMetrics = 'show_runtime_metrics';
/// 读取已保存的显示偏好;默认返回 false(即默认隐藏运行指标)。
Future<bool> loadSavedShowRuntimeMetrics() async {
try {
final prefs = await SharedPreferences.getInstance();
return prefs.getBool(_kShowRuntimeMetrics) ?? false;
} catch (_) {
return false;
}
}
/// 设备详情页运行指标显示偏好管理。
///
/// - 默认关闭,首次进入设备详情时不展示 CPU/内存/磁盘/网络卡片。
/// - 用户可在「我的 → 设置」中手动开启。
/// - 状态持久化到 [SharedPreferences],切换账号/重启 App 后仍保持。
class ShowRuntimeMetricsNotifier extends Notifier<bool> {
@override
bool build() {
_load();
return false;
}
Future<void> _load() async {
final saved = await loadSavedShowRuntimeMetrics();
if (saved != state) {
state = saved;
}
}
/// 切换显示状态并持久化。
Future<void> setValue(bool value) async {
state = value;
try {
final prefs = await SharedPreferences.getInstance();
await prefs.setBool(_kShowRuntimeMetrics, value);
} catch (_) {
// 忽略持久化失败,运行时状态仍生效。
}
}
}
/// 运行指标显示偏好提供者。
final showRuntimeMetricsProvider = NotifierProvider<ShowRuntimeMetricsNotifier, bool>(
ShowRuntimeMetricsNotifier.new,
);