43 lines
1.3 KiB
Dart
43 lines
1.3 KiB
Dart
// Author: fruit.com.cn
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
import '../../core/data/models/drama.dart';
|
|
import '../../core/data/services/catalog_controller.dart';
|
|
import '../../core/data/services/download_controller.dart';
|
|
import '../../core/data/services/wallet_controller.dart';
|
|
import '../../core/navigation/fade_page_route.dart';
|
|
import 'player_view.dart';
|
|
|
|
/// 目录卡片统一入口:补齐详情后直接进入全屏播放页。
|
|
Future<void> playDramaFromCatalog(
|
|
BuildContext context,
|
|
Drama drama, {
|
|
String? episodeId,
|
|
}) async {
|
|
final catalog = context.read<CatalogController>();
|
|
final wallet = context.read<WalletController>();
|
|
final downloads = context.read<DownloadController>();
|
|
var playable = drama;
|
|
try {
|
|
playable = await catalog.requireDetail(drama);
|
|
} catch (_) {
|
|
// 取详情失败就用卡片自带的可播预览集起播。
|
|
}
|
|
if (!context.mounted) return;
|
|
final index = episodeId == null
|
|
? 0
|
|
: playable.episodes.indexWhere((episode) => episode.id == episodeId);
|
|
await Navigator.of(context).push(
|
|
FadePageRoute<void>(
|
|
builder: (_) => PlayerPage(
|
|
drama: playable,
|
|
initialIndex: index < 0 ? 0 : index,
|
|
wallet: wallet,
|
|
downloads: downloads,
|
|
),
|
|
),
|
|
);
|
|
}
|