fix(flutter): 评论入口增加登录闸
This commit is contained in:
1 parent
a5c84b0297
commit
870a170fad
3 files changed
+59
-2
No files matched your search
@@ -0,0 +1,24 @@
|
|||||||
|
// Author: fruit.com.cn
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
import '../../core/data/models/drama.dart';
|
||||||
|
import '../../core/data/services/auth_controller.dart';
|
||||||
|
import '../../core/widgets/auth_gate.dart';
|
||||||
|
|
||||||
|
/// 评论入口统一登录闸:登录成功且页面仍存在时再打开评论面板。
|
||||||
|
Future<void> openCommentsWithAuth(
|
||||||
|
BuildContext context,
|
||||||
|
Drama drama, {
|
||||||
|
required Future<void> Function(BuildContext context, Drama drama) show,
|
||||||
|
}) async {
|
||||||
|
final auth = context.read<AuthController>();
|
||||||
|
if (auth.isSignedIn) {
|
||||||
|
await show(context, drama);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await ensureSignedIn(context);
|
||||||
|
if (!context.mounted || !auth.isSignedIn) return;
|
||||||
|
await show(context, drama);
|
||||||
|
}
|
||||||
@@ -22,6 +22,7 @@ import '../../core/widgets/auth_gate.dart';
|
|||||||
import '../../core/widgets/download_action.dart';
|
import '../../core/widgets/download_action.dart';
|
||||||
import '../../core/widgets/remote_image.dart';
|
import '../../core/widgets/remote_image.dart';
|
||||||
import '../../l10n/app_localizations.dart';
|
import '../../l10n/app_localizations.dart';
|
||||||
|
import 'comments_auth.dart';
|
||||||
import 'player_binding.dart';
|
import 'player_binding.dart';
|
||||||
import 'player_logic.dart';
|
import 'player_logic.dart';
|
||||||
import 'widgets/home_feed_header.dart';
|
import 'widgets/home_feed_header.dart';
|
||||||
@@ -454,7 +455,9 @@ class _PlayerPageState extends State<PlayerPage> with WidgetsBindingObserver {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onComments: () => logic.showComments(context, drama),
|
onComments: () => unawaited(
|
||||||
|
openCommentsWithAuth(context, drama, show: logic.showComments),
|
||||||
|
),
|
||||||
onShare: () => logic.shareDrama(context, drama),
|
onShare: () => logic.shareDrama(context, drama),
|
||||||
onDetail: () => unawaited(logic.openDetail(context)),
|
onDetail: () => unawaited(logic.openDetail(context)),
|
||||||
onOpenFullPlayer: () async {
|
onOpenFullPlayer: () async {
|
||||||
@@ -498,7 +501,9 @@ class _PlayerPageState extends State<PlayerPage> with WidgetsBindingObserver {
|
|||||||
onDetail: () => unawaited(logic.openDetail(context)),
|
onDetail: () => unawaited(logic.openDetail(context)),
|
||||||
onSpeed: () => unawaited(_openSpeedSheet(context)),
|
onSpeed: () => unawaited(_openSpeedSheet(context)),
|
||||||
onEpisodes: () => logic.showEpisodes(context),
|
onEpisodes: () => logic.showEpisodes(context),
|
||||||
onComments: () => logic.showComments(context, drama),
|
onComments: () => unawaited(
|
||||||
|
openCommentsWithAuth(context, drama, show: logic.showComments),
|
||||||
|
),
|
||||||
onLike: () =>
|
onLike: () =>
|
||||||
unawaited(_toggleLike(context, interactions, drama)),
|
unawaited(_toggleLike(context, interactions, drama)),
|
||||||
onSave: () => unawaited(_toggleSave(context, drama)),
|
onSave: () => unawaited(_toggleSave(context, drama)),
|
||||||
|
|||||||
@@ -69,6 +69,34 @@ void main() {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testWidgets('should_gate_comments_before_opening_sheet_when_signed_out', (
|
||||||
|
tester,
|
||||||
|
) async {
|
||||||
|
await _pumpApp(tester);
|
||||||
|
await _openSeriesPlayer(tester);
|
||||||
|
|
||||||
|
await tester.tap(find.byKey(const Key('player-rail-comments')));
|
||||||
|
await tester.pumpAndSettle();
|
||||||
|
|
||||||
|
expect(find.text('Sign in to continue'), findsOneWidget);
|
||||||
|
expect(find.byKey(const Key('player-comments-sheet')), findsNothing);
|
||||||
|
});
|
||||||
|
|
||||||
|
testWidgets('should_open_feed_comments_when_signed_in', (tester) async {
|
||||||
|
SharedPreferencesAsyncPlatform.instance =
|
||||||
|
InMemorySharedPreferencesAsync.withData({
|
||||||
|
'auth.accessToken': 'access',
|
||||||
|
'auth.refreshToken': 'refresh',
|
||||||
|
'auth.user': '{"uid":"9","nickname":"Viewer","avatarUrl":""}',
|
||||||
|
});
|
||||||
|
await _pumpApp(tester);
|
||||||
|
|
||||||
|
await tester.tap(find.byKey(const Key('rail-comments')));
|
||||||
|
await tester.pumpAndSettle();
|
||||||
|
|
||||||
|
expect(find.byKey(const Key('player-comments-sheet')), findsOneWidget);
|
||||||
|
});
|
||||||
|
|
||||||
testWidgets('should_show_center_toggle_only_when_paused', (tester) async {
|
testWidgets('should_show_center_toggle_only_when_paused', (tester) async {
|
||||||
await _pumpApp(tester);
|
await _pumpApp(tester);
|
||||||
await _openSeriesPlayer(tester);
|
await _openSeriesPlayer(tester);
|
||||||
|
|||||||
Reference in new issue
Block a user