generated from dellevin/template
数据备份
This commit is contained in:
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../utils/backup_service.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
|
||||
/// 数据备份页面
|
||||
class BackupPage extends StatefulWidget {
|
||||
@@ -185,9 +186,7 @@ class _BackupPageState extends State<BackupPage> {
|
||||
if (!mounted) return;
|
||||
|
||||
if (result.cancelled) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('已取消导出')),
|
||||
);
|
||||
ToastUtil.show(context, '已取消导出');
|
||||
} else if (result.success) {
|
||||
// 显示导出成功信息
|
||||
showDialog(
|
||||
@@ -214,15 +213,11 @@ class _BackupPageState extends State<BackupPage> {
|
||||
),
|
||||
);
|
||||
} else {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text(result.errorMessage ?? '导出失败')),
|
||||
);
|
||||
ToastUtil.show(context, result.errorMessage ?? '导出失败');
|
||||
}
|
||||
} catch (e) {
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('导出失败: $e')),
|
||||
);
|
||||
ToastUtil.show(context, '导出失败: $e');
|
||||
}
|
||||
} finally {
|
||||
if (mounted) {
|
||||
@@ -267,9 +262,7 @@ class _BackupPageState extends State<BackupPage> {
|
||||
if (!mounted) return;
|
||||
|
||||
if (result.cancelled) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('已取消导入')),
|
||||
);
|
||||
ToastUtil.show(context, '已取消导入');
|
||||
} else if (result.success) {
|
||||
// 刷新数据
|
||||
await context.read<AppProvider>().loadMovies();
|
||||
@@ -293,15 +286,11 @@ class _BackupPageState extends State<BackupPage> {
|
||||
),
|
||||
);
|
||||
} else {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text(result.errorMessage ?? '导入失败')),
|
||||
);
|
||||
ToastUtil.show(context, result.errorMessage ?? '导入失败');
|
||||
}
|
||||
} catch (e) {
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('导入失败: $e')),
|
||||
);
|
||||
ToastUtil.show(context, '导入失败: $e');
|
||||
}
|
||||
} finally {
|
||||
if (mounted) {
|
||||
|
||||
@@ -5,6 +5,7 @@ import 'package:share_plus/share_plus.dart';
|
||||
import 'package:cross_file/cross_file.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../models/data_models.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
import 'book_reviews_page.dart';
|
||||
import 'book_excerpts_page.dart';
|
||||
|
||||
@@ -657,9 +658,7 @@ class _BookDetailPageState extends State<BookDetailPage> {
|
||||
if (!mounted) return;
|
||||
Navigator.pop(context);
|
||||
Navigator.pop(context);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('已删除')),
|
||||
);
|
||||
ToastUtil.show(context, '已删除');
|
||||
},
|
||||
child: const Text('删除', style: TextStyle(color: Colors.red)),
|
||||
),
|
||||
@@ -692,9 +691,7 @@ class _BookDetailPageState extends State<BookDetailPage> {
|
||||
);
|
||||
await context.read<AppProvider>().updateBook(updatedBook);
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('封面已清空')),
|
||||
);
|
||||
ToastUtil.show(context, '封面已清空');
|
||||
}
|
||||
},
|
||||
child: const Text('清空', style: TextStyle(color: Colors.red)),
|
||||
@@ -707,18 +704,14 @@ class _BookDetailPageState extends State<BookDetailPage> {
|
||||
/// 下载封面到本地
|
||||
Future<void> _downloadCover(Book book) async {
|
||||
if (book.coverPath == null || book.coverPath!.isEmpty) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('没有可下载的封面')),
|
||||
);
|
||||
ToastUtil.show(context, '没有可下载的封面');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
final sourceFile = File(book.coverPath!);
|
||||
if (!await sourceFile.exists()) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('封面文件不存在')),
|
||||
);
|
||||
ToastUtil.show(context, '封面文件不存在');
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -738,9 +731,7 @@ class _BookDetailPageState extends State<BookDetailPage> {
|
||||
text: '下载自 MookNote',
|
||||
);
|
||||
} catch (e) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('下载失败: $e')),
|
||||
);
|
||||
ToastUtil.show(context, '下载失败: $e');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../models/data_models.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
/// 摘抄表单页面 - 新增/编辑摘抄
|
||||
@@ -171,15 +172,11 @@ class _BookExcerptFormPageState extends State<BookExcerptFormPage> {
|
||||
|
||||
if (mounted) {
|
||||
Navigator.pop(context);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text(_isEditing ? '摘抄已更新' : '摘抄已添加')),
|
||||
);
|
||||
ToastUtil.show(context, _isEditing ? '摘抄已更新' : '摘抄已添加');
|
||||
}
|
||||
} catch (e) {
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('保存失败: $e')),
|
||||
);
|
||||
ToastUtil.show(context, '保存失败: $e');
|
||||
}
|
||||
} finally {
|
||||
if (mounted) {
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../models/data_models.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
import 'book_excerpt_form_page.dart';
|
||||
|
||||
/// 书籍摘抄列表页面
|
||||
@@ -34,9 +35,7 @@ class _BookExcerptsPageState extends State<BookExcerptsPage> {
|
||||
});
|
||||
} catch (e) {
|
||||
setState(() => _isLoading = false);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('加载失败: $e')),
|
||||
);
|
||||
ToastUtil.show(context, '加载失败: $e');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -287,9 +286,7 @@ class _BookExcerptsPageState extends State<BookExcerptsPage> {
|
||||
await context.read<AppProvider>().removeBookExcerpt(excerpt.id);
|
||||
Navigator.pop(context);
|
||||
_loadExcerpts();
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('已删除')),
|
||||
);
|
||||
ToastUtil.show(context, '已删除');
|
||||
},
|
||||
child: const Text('删除', style: TextStyle(color: Colors.red)),
|
||||
),
|
||||
|
||||
@@ -6,6 +6,7 @@ import 'package:path/path.dart' as path;
|
||||
import 'package:provider/provider.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../models/data_models.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
|
||||
/// 添加/编辑书籍页面 - 紧凑双行布局设计
|
||||
class BookFormPage extends StatefulWidget {
|
||||
@@ -663,9 +664,7 @@ class _BookFormPageState extends State<BookFormPage> {
|
||||
}
|
||||
} catch (e) {
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('选择封面失败: $e')),
|
||||
);
|
||||
ToastUtil.show(context, '选择封面失败: $e');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -718,12 +717,7 @@ class _BookFormPageState extends State<BookFormPage> {
|
||||
|
||||
if (!mounted) return;
|
||||
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(widget.book == null ? '添加成功' : '更新成功'),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
),
|
||||
);
|
||||
ToastUtil.show(context, widget.book == null ? '添加成功' : '更新成功');
|
||||
|
||||
Navigator.pop(context);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../models/data_models.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
/// 添加/编辑书评页面 - 极简设计
|
||||
@@ -253,12 +254,7 @@ class _BookReviewFormPageState extends State<BookReviewFormPage> {
|
||||
|
||||
if (!mounted) return;
|
||||
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(widget.review == null ? '添加成功' : '更新成功'),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
),
|
||||
);
|
||||
ToastUtil.show(context, widget.review == null ? '添加成功' : '更新成功');
|
||||
|
||||
Navigator.pop(context);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../models/data_models.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
import 'book_review_form_page.dart';
|
||||
|
||||
/// 书籍书评列表页面
|
||||
@@ -34,9 +35,7 @@ class _BookReviewsPageState extends State<BookReviewsPage> {
|
||||
});
|
||||
} catch (e) {
|
||||
setState(() => _isLoading = false);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('加载失败: $e')),
|
||||
);
|
||||
ToastUtil.show(context, '加载失败: $e');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -257,9 +256,7 @@ class _BookReviewsPageState extends State<BookReviewsPage> {
|
||||
await context.read<AppProvider>().removeBookReview(review.id);
|
||||
Navigator.pop(context);
|
||||
_loadReviews();
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('已删除')),
|
||||
);
|
||||
ToastUtil.show(context, '已删除');
|
||||
},
|
||||
child: const Text('删除', style: TextStyle(color: Colors.red)),
|
||||
),
|
||||
|
||||
@@ -8,6 +8,7 @@ import 'package:cross_file/cross_file.dart';
|
||||
import 'package:permission_handler/permission_handler.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../models/data_models.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
import 'movie_reviews_page.dart';
|
||||
import 'movie_posters_page.dart';
|
||||
|
||||
@@ -212,9 +213,7 @@ class _MovieDetailPageState extends State<MovieDetailPage> {
|
||||
);
|
||||
await context.read<AppProvider>().updateMovie(updatedMovie);
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('海报已清空')),
|
||||
);
|
||||
ToastUtil.show(context, '海报已清空');
|
||||
}
|
||||
},
|
||||
child: const Text('清空', style: TextStyle(color: Colors.red)),
|
||||
@@ -768,9 +767,7 @@ class _MovieDetailPageState extends State<MovieDetailPage> {
|
||||
if (!mounted) return;
|
||||
Navigator.pop(context);
|
||||
Navigator.pop(context);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('已删除')),
|
||||
);
|
||||
ToastUtil.show(context, '已删除');
|
||||
},
|
||||
child: const Text('删除', style: TextStyle(color: Colors.red)),
|
||||
),
|
||||
@@ -782,18 +779,14 @@ class _MovieDetailPageState extends State<MovieDetailPage> {
|
||||
/// 下载海报到本地
|
||||
Future<void> _downloadPoster(Movie movie) async {
|
||||
if (movie.posterPath == null || movie.posterPath!.isEmpty) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('没有可下载的海报')),
|
||||
);
|
||||
ToastUtil.show(context, '没有可下载的海报');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
final sourceFile = File(movie.posterPath!);
|
||||
if (!await sourceFile.exists()) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('海报文件不存在')),
|
||||
);
|
||||
ToastUtil.show(context, '海报文件不存在');
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -813,9 +806,7 @@ class _MovieDetailPageState extends State<MovieDetailPage> {
|
||||
text: '下载自 MookNote',
|
||||
);
|
||||
} catch (e) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('下载失败: $e')),
|
||||
);
|
||||
ToastUtil.show(context, '下载失败: $e');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import 'package:path/path.dart' as path;
|
||||
import 'package:provider/provider.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../models/data_models.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
|
||||
/// 添加/编辑影视页面 - 紧凑双行布局设计
|
||||
class MovieFormPage extends StatefulWidget {
|
||||
@@ -705,9 +706,7 @@ class _MovieFormPageState extends State<MovieFormPage> {
|
||||
}
|
||||
} catch (e) {
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('选择海报失败: $e')),
|
||||
);
|
||||
ToastUtil.show(context, '选择海报失败: $e');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -788,12 +787,7 @@ class _MovieFormPageState extends State<MovieFormPage> {
|
||||
|
||||
if (!mounted) return;
|
||||
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(widget.movie == null ? '添加成功' : '更新成功'),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
),
|
||||
);
|
||||
ToastUtil.show(context, widget.movie == null ? '添加成功' : '更新成功');
|
||||
|
||||
Navigator.pop(context);
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import 'package:provider/provider.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../models/data_models.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
|
||||
/// 添加/编辑影视记录页面(Typecho 风格)
|
||||
class MovieFormPage extends StatefulWidget {
|
||||
@@ -527,23 +528,12 @@ class _MovieFormPageState extends State<MovieFormPage> {
|
||||
|
||||
if (!mounted) return;
|
||||
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(widget.movie == null ? '添加成功' : '更新成功'),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
),
|
||||
);
|
||||
ToastUtil.show(context, widget.movie == null ? '添加成功' : '更新成功');
|
||||
|
||||
Navigator.pop(context);
|
||||
} catch (e) {
|
||||
if (!mounted) return;
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text('保存失败:$e'),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
);
|
||||
ToastUtil.show(context, '保存失败:$e');
|
||||
} finally {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
|
||||
@@ -248,9 +248,7 @@ class _MoviePostersPageState extends State<MoviePostersPage> {
|
||||
}
|
||||
} catch (e) {
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('添加海报失败: $e')),
|
||||
);
|
||||
ToastUtil.show(context, '添加海报失败: $e');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../models/data_models.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
|
||||
/// 添加/编辑影评页面 - 极简设计
|
||||
class MovieReviewFormPage extends StatefulWidget {
|
||||
@@ -251,12 +252,7 @@ class _MovieReviewFormPageState extends State<MovieReviewFormPage> {
|
||||
|
||||
if (!mounted) return;
|
||||
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(widget.review == null ? '添加成功' : '更新成功'),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
),
|
||||
);
|
||||
ToastUtil.show(context, widget.review == null ? '添加成功' : '更新成功');
|
||||
|
||||
Navigator.pop(context);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../models/data_models.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
import 'movie_review_form_page.dart';
|
||||
|
||||
/// 影视影评列表页面
|
||||
@@ -250,9 +251,7 @@ class _MovieReviewsPageState extends State<MovieReviewsPage> {
|
||||
await context.read<AppProvider>().removeMovieReview(review.id);
|
||||
Navigator.pop(context);
|
||||
_loadReviews();
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('已删除')),
|
||||
);
|
||||
ToastUtil.show(context, '已删除');
|
||||
},
|
||||
child: const Text('删除', style: TextStyle(color: Colors.red)),
|
||||
),
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'package:flutter_markdown/flutter_markdown.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../models/data_models.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
|
||||
/// 笔记详情页 - 极简主义设计
|
||||
class NoteDetailPage extends StatefulWidget {
|
||||
@@ -255,9 +256,7 @@ class _NoteDetailPageState extends State<NoteDetailPage> {
|
||||
if (!mounted) return;
|
||||
Navigator.pop(context);
|
||||
Navigator.pop(context);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('已删除')),
|
||||
);
|
||||
ToastUtil.show(context, '已删除');
|
||||
},
|
||||
child: const Text('删除', style: TextStyle(color: Colors.red)),
|
||||
),
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../models/data_models.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
|
||||
/// 添加/编辑笔记页面 - 极简书写界面
|
||||
class NoteFormPage extends StatefulWidget {
|
||||
@@ -331,9 +332,7 @@ class _NoteFormPageState extends State<NoteFormPage> {
|
||||
final content = _contentController.text.trim();
|
||||
|
||||
if (content.isEmpty) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('笔记内容不能为空')),
|
||||
);
|
||||
ToastUtil.show(context, '笔记内容不能为空');
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -363,12 +362,7 @@ class _NoteFormPageState extends State<NoteFormPage> {
|
||||
|
||||
if (!mounted) return;
|
||||
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(_isEditing ? '保存成功' : '添加成功'),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
),
|
||||
);
|
||||
ToastUtil.show(context, _isEditing ? '保存成功' : '添加成功');
|
||||
|
||||
Navigator.pop(context);
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import 'package:path/path.dart' as path;
|
||||
import 'package:provider/provider.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../utils/user_prefs.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
import 'recycle_bin_page.dart';
|
||||
import 'backup_page.dart';
|
||||
import 'statistics_page.dart';
|
||||
@@ -446,13 +447,7 @@ class _ProfilePageState extends State<ProfilePage> {
|
||||
|
||||
/// 显示提示
|
||||
void _showToast(String message) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(message),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
duration: const Duration(seconds: 2),
|
||||
),
|
||||
);
|
||||
ToastUtil.show(context, message);
|
||||
}
|
||||
|
||||
/// 选择头像
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../models/data_models.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
|
||||
/// 回收站页面
|
||||
class RecycleBinPage extends StatefulWidget {
|
||||
@@ -246,9 +247,7 @@ class _RecycleBinPageState extends State<RecycleBinPage> with SingleTickerProvid
|
||||
await context.read<AppProvider>().restoreMovie(movie.id);
|
||||
_loadDeletedItems();
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('影视已恢复')),
|
||||
);
|
||||
ToastUtil.show(context, '影视已恢复');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,9 +258,7 @@ class _RecycleBinPageState extends State<RecycleBinPage> with SingleTickerProvid
|
||||
await context.read<AppProvider>().permanentDeleteMovie(movie.id);
|
||||
_loadDeletedItems();
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('已彻底删除')),
|
||||
);
|
||||
ToastUtil.show(context, '已彻底删除');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -271,9 +268,7 @@ class _RecycleBinPageState extends State<RecycleBinPage> with SingleTickerProvid
|
||||
await context.read<AppProvider>().restoreBook(book.id);
|
||||
_loadDeletedItems();
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('书籍已恢复')),
|
||||
);
|
||||
ToastUtil.show(context, '书籍已恢复');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -284,9 +279,7 @@ class _RecycleBinPageState extends State<RecycleBinPage> with SingleTickerProvid
|
||||
await context.read<AppProvider>().permanentDeleteBook(book.id);
|
||||
_loadDeletedItems();
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('已彻底删除')),
|
||||
);
|
||||
ToastUtil.show(context, '已彻底删除');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -296,9 +289,7 @@ class _RecycleBinPageState extends State<RecycleBinPage> with SingleTickerProvid
|
||||
await context.read<AppProvider>().restoreNote(note.id);
|
||||
_loadDeletedItems();
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('笔记已恢复')),
|
||||
);
|
||||
ToastUtil.show(context, '笔记已恢复');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -309,9 +300,7 @@ class _RecycleBinPageState extends State<RecycleBinPage> with SingleTickerProvid
|
||||
await context.read<AppProvider>().permanentDeleteNote(note.id);
|
||||
_loadDeletedItems();
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('已彻底删除')),
|
||||
);
|
||||
ToastUtil.show(context, '已彻底删除');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -362,9 +351,7 @@ class _RecycleBinPageState extends State<RecycleBinPage> with SingleTickerProvid
|
||||
await context.read<AppProvider>().clearRecycleBin();
|
||||
_loadDeletedItems();
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('回收站已清空')),
|
||||
);
|
||||
ToastUtil.show(context, '回收站已清空');
|
||||
}
|
||||
},
|
||||
child: const Text('清空', style: TextStyle(color: Colors.red)),
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../models/data_models.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
import 'movie_detail_page.dart';
|
||||
import 'book_detail_page.dart';
|
||||
import 'note_detail_page.dart';
|
||||
@@ -65,9 +66,7 @@ class _SearchPageState extends State<SearchPage> {
|
||||
});
|
||||
} catch (e) {
|
||||
setState(() => _isSearching = false);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('搜索失败: $e')),
|
||||
);
|
||||
ToastUtil.show(context, '搜索失败: $e');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../providers/app_provider.dart';
|
||||
import '../utils/user_prefs.dart';
|
||||
import '../utils/toast_util.dart';
|
||||
|
||||
/// 自定义左侧弹出菜单 - 极简主义设计
|
||||
class CustomDrawer extends StatelessWidget {
|
||||
@@ -188,12 +189,6 @@ class CustomDrawer extends StatelessWidget {
|
||||
|
||||
/// 显示提示
|
||||
void _showToast(BuildContext context, String message) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(message),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
duration: const Duration(seconds: 2),
|
||||
),
|
||||
);
|
||||
ToastUtil.show(context, message);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user