merge: 合并 K86.20 评论输入浮层打开状态修正

This commit is contained in:
Zhou Weidong committed 2026-10-21 14:48:10 +08:00
commit e90217bdfd
2 files changed
+39 -24

No files matched your search

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