优化图标显示

This commit is contained in:
DelLevin-Home
2026-06-27 01:01:15 +08:00
parent 45137b96d6
commit 02242089e8
15 changed files with 63 additions and 11 deletions

View File

@@ -7,6 +7,7 @@ import 'package:flutter/foundation.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as path;
import 'package:share_plus/share_plus.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:sqflite/sqflite.dart';
import '../database_helper.dart';
import '../user_prefs.dart';
@@ -75,6 +76,7 @@ class BackupService {
'appName': 'MookNote',
'hasImages': true,
'userInfo': userInfo,
'sharedPrefs': await _exportSharedPrefs(),
'data': {
'movies': movies,
'books': books,
@@ -455,6 +457,44 @@ class BackupService {
}
}
}
// 恢复完整 SharedPreferences
if (backupData.containsKey('sharedPrefs')) {
await _restoreSharedPrefs(backupData['sharedPrefs'] as Map<String, dynamic>);
}
}
/// 导出完整 SharedPreferences
Future<Map<String, dynamic>> _exportSharedPrefs() async {
final prefs = await SharedPreferences.getInstance();
final keys = prefs.getKeys();
final map = <String, dynamic>{};
for (final key in keys) {
map[key] = prefs.get(key);
}
return map;
}
/// 恢复 SharedPreferences保留当前 avatarPath因为已在上面用 imagePathMap 更新过)
Future<void> _restoreSharedPrefs(Map<String, dynamic> data) async {
final prefs = await SharedPreferences.getInstance();
for (final entry in data.entries) {
final key = entry.key;
final value = entry.value;
// avatarPath 已单独处理,跳过
if (key == 'avatarPath') continue;
if (value is String) {
await prefs.setString(key, value);
} else if (value is int) {
await prefs.setInt(key, value);
} else if (value is double) {
await prefs.setDouble(key, value);
} else if (value is bool) {
await prefs.setBool(key, value);
} else if (value is List) {
await prefs.setStringList(key, value.cast<String>());
}
}
}
Map<String, int> _buildStats(Map<String, dynamic> data, int imageCount) {