fix(player): 固定评论输入浮层位置避免收键盘跳动

This commit is contained in:
Zhou Weidong committed 2026-10-21 14:54:05 +08:00
1 parent e90217bdfd
commit d2f2459a96
2 files changed
+98 -6

No files matched your search

@@ -469,6 +469,60 @@ void main() {
expect(tester.getBottomLeft(composer).dy, closeTo(844, 0.1));
});
testWidgets(
'should_keep_composer_position_when_keyboard_insets_change_after_settling',
(tester) async {
tester.view.physicalSize = const Size(390, 2200);
tester.view.devicePixelRatio = 1;
addTearDown(tester.view.resetPhysicalSize);
addTearDown(tester.view.resetDevicePixelRatio);
addTearDown(tester.view.resetViewInsets);
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();
final composer = find.byKey(const Key('comment-composer-sheet'));
expect(composer, findsOneWidget);
tester.view.viewInsets = const FakeViewPadding(bottom: 1100);
await tester.pump();
await tester.pump(const Duration(milliseconds: 90));
final settledTop = tester.getTopLeft(composer).dy;
final settledBottom = tester.getBottomLeft(composer).dy;
final settledHeight = tester.getSize(composer).height;
expect(settledBottom, closeTo(2200 - 1100, 0.1));
tester.view.viewInsets = const FakeViewPadding(bottom: 1150);
await tester.pump();
await tester.pump(const Duration(milliseconds: 90));
expect(tester.getTopLeft(composer).dy, closeTo(settledTop, 0.1));
expect(tester.getBottomLeft(composer).dy, closeTo(settledBottom, 0.1));
expect(tester.getSize(composer).height, closeTo(settledHeight, 0.1));
tester.view.viewInsets = const FakeViewPadding(bottom: 600);
await tester.pump();
await tester.pump(const Duration(milliseconds: 90));
expect(tester.getTopLeft(composer).dy, closeTo(settledTop, 0.1));
expect(tester.getBottomLeft(composer).dy, closeTo(settledBottom, 0.1));
expect(tester.getSize(composer).height, closeTo(settledHeight, 0.1));
tester.view.viewInsets = const FakeViewPadding();
await tester.pumpAndSettle();
expect(composer, findsOneWidget);
expect(tester.getTopLeft(composer).dy, closeTo(settledTop, 0.1));
expect(tester.getBottomLeft(composer).dy, closeTo(settledBottom, 0.1));
expect(tester.getSize(composer).height, closeTo(settledHeight, 0.1));
},
);
testWidgets('should_keep_composer_open_after_input_loses_focus', (
tester,
) async {