fix(comment): 修复 iOS 评论输入弹窗键盘避让
This commit is contained in:
1 parent
dfc33027d8
commit
349ea12404
3 files changed
+222
-121
No files matched your search
@@ -88,6 +88,53 @@ void main() {
|
||||
});
|
||||
});
|
||||
|
||||
testWidgets('should_follow_live_view_insets_on_ios', (tester) async {
|
||||
debugDefaultTargetPlatformOverride = TargetPlatform.iOS;
|
||||
addTearDown(() => debugDefaultTargetPlatformOverride = null);
|
||||
tester.view.physicalSize = const Size(390, 844);
|
||||
tester.view.devicePixelRatio = 1;
|
||||
addTearDown(tester.view.resetPhysicalSize);
|
||||
addTearDown(tester.view.resetDevicePixelRatio);
|
||||
addTearDown(tester.view.resetViewInsets);
|
||||
final repository = FakeCommentRepository(pages: [const CommentPage()]);
|
||||
|
||||
await _pumpSheet(tester, repository: repository);
|
||||
await tester.tap(find.byKey(const Key('comment-input-placeholder')));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
tester.view.viewInsets = const FakeViewPadding(bottom: 300);
|
||||
await tester.pump();
|
||||
await tester.pump(const Duration(milliseconds: 160));
|
||||
|
||||
final animatedPadding = tester.widget<AnimatedPadding>(
|
||||
find.byKey(const Key('comment-composer-keyboard-padding')),
|
||||
);
|
||||
expect((animatedPadding.padding as EdgeInsets).bottom, 300);
|
||||
expect(
|
||||
tester.getBottomLeft(find.byKey(const Key('comment-composer-post'))).dy,
|
||||
lessThanOrEqualTo(844 - 300),
|
||||
);
|
||||
debugDefaultTargetPlatformOverride = null;
|
||||
});
|
||||
|
||||
testWidgets('should_use_zero_live_inset_when_ios_keyboard_is_hidden', (
|
||||
tester,
|
||||
) async {
|
||||
debugDefaultTargetPlatformOverride = TargetPlatform.iOS;
|
||||
addTearDown(() => debugDefaultTargetPlatformOverride = null);
|
||||
final repository = FakeCommentRepository(pages: [const CommentPage()]);
|
||||
|
||||
await _pumpSheet(tester, repository: repository);
|
||||
await tester.tap(find.byKey(const Key('comment-input-placeholder')));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
final animatedPadding = tester.widget<AnimatedPadding>(
|
||||
find.byKey(const Key('comment-composer-keyboard-padding')),
|
||||
);
|
||||
expect((animatedPadding.padding as EdgeInsets).bottom, 0);
|
||||
debugDefaultTargetPlatformOverride = null;
|
||||
});
|
||||
|
||||
testWidgets('should_gate_guest_comment_input_without_focus', (tester) async {
|
||||
SharedPreferencesAsyncPlatform.instance =
|
||||
InMemorySharedPreferencesAsync.empty();
|
||||
@@ -402,6 +449,8 @@ void main() {
|
||||
testWidgets('should_keep_comment_panel_fixed_and_open_composer_sheet', (
|
||||
tester,
|
||||
) async {
|
||||
debugDefaultTargetPlatformOverride = TargetPlatform.android;
|
||||
addTearDown(() => debugDefaultTargetPlatformOverride = null);
|
||||
tester.view.physicalSize = const Size(390, 844);
|
||||
tester.view.devicePixelRatio = 1;
|
||||
addTearDown(tester.view.resetPhysicalSize);
|
||||
@@ -462,6 +511,7 @@ void main() {
|
||||
|
||||
tester.view.viewInsets = const FakeViewPadding(bottom: 180);
|
||||
await tester.pump();
|
||||
await tester.pump(const Duration(milliseconds: 90));
|
||||
await tester.pump(const Duration(milliseconds: 200));
|
||||
final keyboardUpInputTop = tester.getTopLeft(composer).dy;
|
||||
final keyboardUpBottom = tester.getBottomLeft(composer).dy;
|
||||
@@ -497,11 +547,14 @@ void main() {
|
||||
await tester.pumpAndSettle();
|
||||
expect(composer, findsOneWidget);
|
||||
expect(tester.getBottomLeft(composer).dy, closeTo(844, 0.1));
|
||||
debugDefaultTargetPlatformOverride = null;
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
'should_keep_composer_input_position_when_safe_area_padding_changes',
|
||||
(tester) async {
|
||||
debugDefaultTargetPlatformOverride = TargetPlatform.android;
|
||||
addTearDown(() => debugDefaultTargetPlatformOverride = null);
|
||||
tester.view.physicalSize = const Size(390, 844);
|
||||
tester.view.devicePixelRatio = 1;
|
||||
tester.view.padding = const FakeViewPadding();
|
||||
@@ -525,6 +578,7 @@ void main() {
|
||||
tester.view.viewInsets = const FakeViewPadding(bottom: 180);
|
||||
await tester.pump();
|
||||
await tester.pump(const Duration(milliseconds: 90));
|
||||
await tester.pump(const Duration(milliseconds: 200));
|
||||
final keyboardUpInputRect = tester.getRect(input);
|
||||
|
||||
tester.view.viewInsets = const FakeViewPadding();
|
||||
@@ -544,12 +598,15 @@ void main() {
|
||||
keyboardClosedInputRect.height,
|
||||
closeTo(keyboardUpInputRect.height, 0.1),
|
||||
);
|
||||
debugDefaultTargetPlatformOverride = null;
|
||||
},
|
||||
);
|
||||
|
||||
testWidgets(
|
||||
'should_keep_composer_position_when_keyboard_insets_change_after_settling',
|
||||
(tester) async {
|
||||
debugDefaultTargetPlatformOverride = TargetPlatform.android;
|
||||
addTearDown(() => debugDefaultTargetPlatformOverride = null);
|
||||
tester.view.physicalSize = const Size(390, 2200);
|
||||
tester.view.devicePixelRatio = 1;
|
||||
addTearDown(tester.view.resetPhysicalSize);
|
||||
@@ -573,6 +630,7 @@ void main() {
|
||||
tester.view.viewInsets = const FakeViewPadding(bottom: 1100);
|
||||
await tester.pump();
|
||||
await tester.pump(const Duration(milliseconds: 90));
|
||||
await tester.pump(const Duration(milliseconds: 200));
|
||||
final settledTop = tester.getTopLeft(composer).dy;
|
||||
final settledBottom = tester.getBottomLeft(composer).dy;
|
||||
final settledHeight = tester.getSize(composer).height;
|
||||
@@ -598,6 +656,7 @@ void main() {
|
||||
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));
|
||||
debugDefaultTargetPlatformOverride = null;
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
Reference in new issue
Block a user