代码优化

This commit is contained in:
DelLevin-Home
2026-06-30 17:51:39 +08:00
parent 9430524378
commit 622e534b84
9 changed files with 34 additions and 1233 deletions

View File

@@ -13,6 +13,16 @@ DateTime? _safeParseDate(String? str, {DateTime? fallback}) {
return DateTime.tryParse(str)?.toLocal() ?? fallback;
}
/// 安全将动态值转为 double失败时返回 fallback
double? _safeParseDouble(dynamic value, {double? fallback}) {
if (value == null) return fallback;
if (value is double) return value;
if (value is int) return value.toDouble();
if (value is num) return value.toDouble();
if (value is String) return double.tryParse(value) ?? fallback;
return fallback;
}
/// 解析字符串列表(通用工具函数,不限于 Movie
List<String> parseStringListGeneric(dynamic data) {
if (data == null) return [];
@@ -86,14 +96,14 @@ class Movie {
genres: _parseStringList(json['genres']),
alternateTitles: _parseStringList(json['alternate_titles']),
summary: json['summary'],
rating: json['rating']?.toDouble(),
rating: _safeParseDouble(json['rating']),
status: json['status'] ?? 'want_to_watch',
category: json['category'] ?? 'movie',
watchDate: _safeParseDate(json['watch_date']),
createdAt: _safeParseDate(json['created_at'], fallback: DateTime.now())!,
updatedAt: _safeParseDate(json['updated_at'], fallback: DateTime.now())!,
isDeleted: json['is_deleted'] == 1 || json['is_deleted'] == true,
coverOffset: (json['cover_offset'] ?? 0.0).toDouble(),
coverOffset: _safeParseDouble(json['cover_offset'], fallback: 0.0)!,
);
}
@@ -224,14 +234,14 @@ class Book {
publisher: json['publisher'],
genres: Movie.parseStringList(json['genres']),
summary: json['summary'],
rating: json['rating']?.toDouble(),
rating: _safeParseDouble(json['rating']),
status: json['status'] ?? 'want_to_read',
isbn: json['isbn'],
publishDate: _safeParseDate(json['publish_date']),
createdAt: _safeParseDate(json['created_at'], fallback: DateTime.now())!,
updatedAt: _safeParseDate(json['updated_at'], fallback: DateTime.now())!,
isDeleted: json['is_deleted'] == 1 || json['is_deleted'] == true,
coverOffset: (json['cover_offset'] ?? 0.0).toDouble(),
coverOffset: _safeParseDouble(json['cover_offset'], fallback: 0.0)!,
);
}

View File

@@ -67,7 +67,6 @@ class _ProfilePageState extends State<ProfilePage> with RouteAware {
Future<void> _loadUserData() async {
try {
await UserPrefs.init();
setState(() {
_nickname = _userPrefs.nickname;
_motto = _userPrefs.motto;

View File

@@ -194,6 +194,7 @@ class AppProvider extends ChangeNotifier {
void setThemeMode(ThemeMode mode) {
if (_themeMode != mode) {
_themeMode = mode;
UserPrefs().setThemeMode(mode.index); // 0=system, 1=light, 2=dark
notifyListeners();
}
}

View File

@@ -9,6 +9,7 @@ class DatabaseHelper {
static final DatabaseHelper instance = DatabaseHelper._init();
static Database? _database;
static Completer<void>? _reopenCompleter;
static Completer<Database>? _initCompleter;
DatabaseHelper._init();
@@ -41,13 +42,28 @@ class DatabaseHelper {
}
Future<Database> get database async {
// 如果正在重开,等待完成(无忙等待)
// 如果正在重开,等待完成
if (_reopenCompleter != null) {
await _reopenCompleter!.future;
}
if (_database != null) return _database!;
_database = await _initDB('mooknote.db');
return _database!;
// 如果已有初始化在进行,等待它完成
if (_initCompleter != null) {
return _initCompleter!.future;
}
_initCompleter = Completer<Database>();
try {
_database = await _initDB('mooknote.db');
_initCompleter!.complete(_database!);
return _database!;
} catch (e) {
_initCompleter!.completeError(e);
rethrow;
} finally {
_initCompleter = null;
}
}
Future<Database> _initDB(String filePath) async {