Files
ReelShort/lib/core/widgets/download_action.dart

40 lines
1.2 KiB
Dart

// Author: fruit.com.cn
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../l10n/app_localizations.dart';
import '../data/services/download_controller.dart';
import '../platform/haptics.dart';
import 'auth_gate.dart';
/// 详情页与播放页共用的下载授权入口。
///
/// 未登录先走登录闸;业务拒绝时直接展示后端 message。
Future<void> requestEpisodeDownload(
BuildContext context,
String episodeId,
) async {
if (!await ensureSignedIn(context)) return;
if (!context.mounted) return;
unawaited(context.read<Haptics>().lightImpact());
final downloads = context.read<DownloadController>();
final result = await downloads.grant(episodeId);
if (!context.mounted) return;
final l10n = AppLocalizations.of(context)!;
final hasBackendMessage = result.message?.trim().isNotEmpty ?? false;
if (result.ok) {
unawaited(
downloads.startDownload(episodeId, license: result.license),
);
}
final message = result.ok
? l10n.downloadGranted
: hasBackendMessage
? result.message!
: l10n.downloadGrantFailed;
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(message)));
}