34 lines
1.1 KiB
Dart
34 lines
1.1 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 result = await context.read<DownloadController>().grant(episodeId);
|
|
if (!context.mounted) return;
|
|
final l10n = AppLocalizations.of(context)!;
|
|
final hasBackendMessage = result.message?.trim().isNotEmpty ?? false;
|
|
final message = result.ok
|
|
? l10n.downloadGranted
|
|
: hasBackendMessage
|
|
? result.message!
|
|
: l10n.downloadGrantFailed;
|
|
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(message)));
|
|
}
|