优化代码结构,修复部分bug

This commit is contained in:
DelLevin-Home
2026-07-06 02:49:46 +08:00
parent 4a7296f00f
commit 2fdcd4551d
23 changed files with 372 additions and 356 deletions

View File

@@ -8,6 +8,7 @@ import 'package:provider/provider.dart';
import 'package:http/http.dart' as http;
import '../../providers/app_provider.dart';
import '../../widgets/fade_in_local_image.dart';
import 'package:uuid/uuid.dart';
import '../../models/data_models.dart';
import '../../utils/toast_util.dart';
import '../../utils/image_path_helper.dart';
@@ -256,6 +257,7 @@ class _MovieFormPageState extends State<MovieFormPage> {
arguments: url,
);
if (!mounted) return;
// 处理返回的影视信息
if (result != null && result is Map<String, dynamic>) {
_fillMovieInfo(result);
@@ -353,7 +355,7 @@ class _MovieFormPageState extends State<MovieFormPage> {
if (response.bodyBytes.length > 10 * 1024 * 1024) throw Exception('图片太大');
final fileName = 'poster_${DateTime.now().millisecondsSinceEpoch}.jpg';
final movieId = widget.movie?.id ?? DateTime.now().millisecondsSinceEpoch.toString();
final movieId = widget.movie?.id ?? const Uuid().v4();
final targetPath = await ImagePathHelper.instance.getMoviePosterPath(movieId, fileName);
await ImagePathHelper.instance.ensureDirExists(p.dirname(targetPath));
await File(targetPath).writeAsBytes(response.bodyBytes);
@@ -436,6 +438,7 @@ class _MovieFormPageState extends State<MovieFormPage> {
initialValue: _titleController.text,
hint: '请输入影视名称',
);
if (!mounted) return;
if (result != null) setState(() => _titleController.text = result);
},
),
@@ -458,6 +461,7 @@ class _MovieFormPageState extends State<MovieFormPage> {
initialSelected: _alternateTitles,
hint: '输入别名',
);
if (!mounted) return;
if (result != null) setState(() => _alternateTitles = result);
},
),
@@ -483,6 +487,7 @@ class _MovieFormPageState extends State<MovieFormPage> {
initialSelected: _directors,
hint: '如:张艺谋、李安',
);
if (!mounted) return;
if (result != null) setState(() => _directors = result);
},
),
@@ -506,6 +511,7 @@ class _MovieFormPageState extends State<MovieFormPage> {
initialSelected: _writers,
hint: '如:刘慈欣、王家卫',
);
if (!mounted) return;
if (result != null) setState(() => _writers = result);
},
),
@@ -531,6 +537,7 @@ class _MovieFormPageState extends State<MovieFormPage> {
initialSelected: _actors,
hint: '如:梁朝伟、周星驰',
);
if (!mounted) return;
if (result != null) setState(() => _actors = result);
},
),
@@ -556,6 +563,7 @@ class _MovieFormPageState extends State<MovieFormPage> {
initialSelected: _genres,
hint: '如:剧情、科幻、悬疑',
);
if (!mounted) return;
if (result != null) setState(() => _genres = result);
},
),
@@ -734,6 +742,7 @@ class _MovieFormPageState extends State<MovieFormPage> {
builder: (_) => _SummaryEditorPage(initialText: _summaryController.text),
),
);
if (!mounted) return;
if (result != null) {
setState(() => _summaryController.text = result);
}
@@ -1144,7 +1153,7 @@ class _MovieFormPageState extends State<MovieFormPage> {
final fileName = 'poster_${DateTime.now().millisecondsSinceEpoch}.jpg';
// 如果是编辑模式使用现有影视ID如果是新建模式使用临时ID保存时会替换
final movieId = widget.movie?.id ?? DateTime.now().millisecondsSinceEpoch.toString();
final movieId = widget.movie?.id ?? const Uuid().v4();
// 保存到新的路径结构: images/movies/{movieId}/{fileName}
final targetPath = await ImagePathHelper.instance.getMoviePosterPath(
@@ -1155,6 +1164,7 @@ class _MovieFormPageState extends State<MovieFormPage> {
await File(pickedFile.path).copy(targetPath);
if (!mounted) return;
setState(() => _posterPath = targetPath);
}
} catch (e) {
@@ -1237,6 +1247,7 @@ class _MovieFormPageState extends State<MovieFormPage> {
builder: (context, child) => child!,
);
if (!mounted) return;
if (picked != null) {
setState(() => _releaseDate = picked);
}
@@ -1252,6 +1263,7 @@ class _MovieFormPageState extends State<MovieFormPage> {
builder: (context, child) => child!,
);
if (!mounted) return;
if (picked != null) {
setState(() => _watchDate = picked);
}
@@ -1321,7 +1333,7 @@ class _MovieFormPageState extends State<MovieFormPage> {
if (widget.movie == null) {
// 生成新的影视ID
final newMovieId = now.millisecondsSinceEpoch.toString();
final newMovieId = const Uuid().v4();
// 如果有海报需要移动到正确的ID目录
String? finalPosterPath;