diff --git a/lib/pages/player/widgets/drama_comments_sheet.dart b/lib/pages/player/widgets/drama_comments_sheet.dart index 72abbf5..0cdf480 100644 --- a/lib/pages/player/widgets/drama_comments_sheet.dart +++ b/lib/pages/player/widgets/drama_comments_sheet.dart @@ -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 { return PopScope( canPop: _composerOverlay == null, onPopInvokedWithResult: (didPop, _) { - if (!didPop && _composerOverlay != null) _closeComposer(); + if (!didPop && _composerOverlay != null) { + FocusManager.instance.primaryFocus?.unfocus(); + unawaited( + SystemChannels.textInput.invokeMethod('TextInput.hide'), + ); + } }, child: content, ); diff --git a/test/comment/drama_comments_sheet_test.dart b/test/comment/drama_comments_sheet_test.dart index aad5a5a..bb65995 100644 --- a/test/comment/drama_comments_sheet_test.dart +++ b/test/comment/drama_comments_sheet_test.dart @@ -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(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(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(