- 新增模型目录占位文件与翻译类型拆分 - 调整路由配置与桌面端窗口初始化 - 移除多处冗余图表配置项 - 重构右侧面板注册表与三栏布局组件 - 添加智能AppBar、拖拽书签等新功能组件 - 优化安卓编译配置与多平台插件注册 - 新增翻译覆盖率测试与共享组件 - 格式化代码与修复静态分析警告
91 lines
2.2 KiB
Dart
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,
|
|
);
|