fix(player): 返回键仅收起评论输入键盘

This commit is contained in:
Zhou Weidong committed 2026-10-21 14:48:01 +08:00
1 parent a66cdb2e1b
commit ea1a9f424b
2 files changed
+39 -24

No files matched your search

@@ -4,6 +4,7 @@ import 'dart:async';
import 'dart:math' as math;
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import '../../../core/data/models/comment.dart';
@@ -202,7 +203,12 @@ class _DramaCommentsSheetState extends State<DramaCommentsSheet> {
return PopScope(
canPop: _composerOverlay == null,
onPopInvokedWithResult: (didPop, _) {
if (!didPop && _composerOverlay != null) _closeComposer();
if (!didPop && _composerOverlay != null) {
FocusManager.instance.primaryFocus?.unfocus();
unawaited(
SystemChannels.textInput.invokeMethod<void>('TextInput.hide'),
);
}
},
child: content,
);
+32 -23
View File
@@ -549,32 +549,41 @@ void main() {
expect(sheet, findsNothing);
});
testWidgets(
'should_close_composer_overlay_on_back_without_closing_comments',
(tester) async {
final repository = FakeCommentRepository(
pages: [
CommentPage(
comments: [commentFixture(id: '10', content: 'A comment')],
),
],
);
testWidgets('should_hide_keyboard_on_back_without_closing_composer_overlay', (
tester,
) async {
final repository = FakeCommentRepository(
pages: [
CommentPage(
comments: [commentFixture(id: '10', content: 'A comment')],
),
],
);
await _pumpSheet(tester, repository: repository);
await tester.tap(find.byKey(const Key('comment-input-placeholder')));
await tester.pumpAndSettle();
await _pumpSheet(tester, repository: repository);
await tester.tap(find.byKey(const Key('comment-input-placeholder')));
await tester.pumpAndSettle();
final sheet = find.byKey(const Key('player-comments-sheet'));
final composer = find.byKey(const Key('comment-composer-sheet'));
expect(sheet, findsOneWidget);
expect(composer, findsOneWidget);
final sheet = find.byKey(const Key('player-comments-sheet'));
final composer = find.byKey(const Key('comment-composer-sheet'));
expect(sheet, findsOneWidget);
expect(composer, findsOneWidget);
final input = find.byKey(const Key('comment-composer-input'));
await tester.tap(input);
await tester.pump();
expect(tester.widget<TextField>(input).focusNode?.hasFocus, isTrue);
await tester.binding.handlePopRoute();
await tester.pumpAndSettle();
expect(sheet, findsOneWidget);
expect(composer, findsNothing);
},
);
await tester.binding.handlePopRoute();
await tester.pumpAndSettle();
expect(sheet, findsOneWidget);
expect(composer, findsOneWidget);
expect(tester.widget<TextField>(input).focusNode?.hasFocus, isFalse);
await tester.tapAt(const Offset(20, 20));
await tester.pumpAndSettle();
expect(sheet, findsOneWidget);
expect(composer, findsNothing);
});
testWidgets('should_use_polished_comment_sizes', (tester) async {
final repository = FakeCommentRepository(