Files
xianyan/lib/core/layout/panel_bookmark.dart
Developer ca68fe29c7 chore: 批量整理优化项目代码与配置
- 新增模型目录占位文件与翻译类型拆分
- 调整路由配置与桌面端窗口初始化
- 移除多处冗余图表配置项
- 重构右侧面板注册表与三栏布局组件
- 添加智能AppBar、拖拽书签等新功能组件
- 优化安卓编译配置与多平台插件注册
- 新增翻译覆盖率测试与共享组件
- 格式化代码与修复静态分析警告
2026-05-29 10:08:02 +08:00

91 lines
2.2 KiB
Dart

/// ============================================================
/// 闲言APP — 面板书签功能
/// 创建时间: 2026-05-29
/// 更新时间: 2026-05-29
/// 作用: 收藏常用面板组合,一键切换
/// 上次更新: 初始创建
/// ============================================================
import 'dart:convert';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../storage/kv_storage.dart';
/// 面板书签数据模型
class PanelBookmark {
const PanelBookmark({
required this.name,
required this.tabIndex,
required this.panelId,
this.panelArgs,
});
final String name;
final int tabIndex;
final String panelId;
final Map<String, dynamic>? panelArgs;
/// 序列化为JSON
Map<String, dynamic> toJson() => {
'name': name,
'tabIndex': tabIndex,
'panelId': panelId,
'panelArgs': panelArgs,
};
/// 从JSON反序列化
factory PanelBookmark.fromJson(Map<String, dynamic> json) => PanelBookmark(
name: json['name'] as String,
tabIndex: json['tabIndex'] as int,
panelId: json['panelId'] as String,
panelArgs: json['panelArgs'] as Map<String, dynamic>?,
);
}
/// 面板书签状态管理Notifier
class PanelBookmarkNotifier extends Notifier<List<PanelBookmark>> {
static const _key = 'panel_bookmarks';
@override
List<PanelBookmark> build() {
final raw = KvStorage.getString(_key);
if (raw == null) return [];
try {
final list = jsonDecode(raw) as List;
return list
.map((e) => PanelBookmark.fromJson(e as Map<String, dynamic>))
.toList();
} catch (_) {
return [];
}
}
/// 添加书签
void addBookmark(PanelBookmark bookmark) {
state = [...state, bookmark];
_save();
}
/// 移除书签
void removeBookmark(int index) {
if (index < 0 || index >= state.length) return;
state = [...state]..removeAt(index);
_save();
}
/// 持久化到KvStorage
void _save() {
KvStorage.setString(
_key,
jsonEncode(state.map((e) => e.toJson()).toList()),
);
}
}
/// 面板书签Provider
final panelBookmarkProvider =
NotifierProvider<PanelBookmarkNotifier, List<PanelBookmark>>(
PanelBookmarkNotifier.new,
);