merge: 合并 K86.17 输入弹窗位置固定修正

This commit is contained in:
Zhou Weidong committed 2026-10-21 14:15:11 +08:00
commit 5b4526cb97
2 files changed
+16 -4

No files matched your search

@@ -39,6 +39,7 @@ class _CommentComposerSheetState extends State<CommentComposerSheet> {
final _input = TextEditingController(); final _input = TextEditingController();
final _inputFocus = FocusNode(); final _inputFocus = FocusNode();
final _keyboardInset = KeyboardInsetNotifier.instance; final _keyboardInset = KeyboardInsetNotifier.instance;
double _pinnedKeyboardInset = 0;
bool _closing = false; bool _closing = false;
@override @override
@@ -114,7 +115,8 @@ class _CommentComposerSheetState extends State<CommentComposerSheet> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final keyboardHeight = _keyboardHeight(context); final currentKeyboardInset = _keyboardHeight(context);
_pinnedKeyboardInset = math.max(_pinnedKeyboardInset, currentKeyboardInset);
final l10n = AppLocalizations.of(context)!; final l10n = AppLocalizations.of(context)!;
final signedIn = context.watch<AuthController>().isSignedIn; final signedIn = context.watch<AuthController>().isSignedIn;
final hasContent = _input.text.trim().isNotEmpty; final hasContent = _input.text.trim().isNotEmpty;
@@ -139,7 +141,7 @@ class _CommentComposerSheetState extends State<CommentComposerSheet> {
child: AnimatedPadding( child: AnimatedPadding(
duration: const Duration(milliseconds: 200), duration: const Duration(milliseconds: 200),
curve: Curves.easeOut, curve: Curves.easeOut,
padding: EdgeInsets.only(bottom: keyboardHeight), padding: EdgeInsets.only(bottom: _pinnedKeyboardInset),
child: GestureDetector( child: GestureDetector(
behavior: HitTestBehavior.opaque, behavior: HitTestBehavior.opaque,
onTap: () {}, onTap: () {},
+12 -2
View File
@@ -377,8 +377,9 @@ void main() {
tester.view.viewInsets = const FakeViewPadding(bottom: 180); tester.view.viewInsets = const FakeViewPadding(bottom: 180);
await tester.pump(); await tester.pump();
await tester.pump(const Duration(milliseconds: 200)); await tester.pump(const Duration(milliseconds: 200));
final keyboardUpBottom = tester.getBottomLeft(composer).dy;
expect(tester.getSize(composer).height, closeTo(compactHeight, 0.1)); expect(tester.getSize(composer).height, closeTo(compactHeight, 0.1));
expect(tester.getBottomLeft(composer).dy, closeTo(844 - 180, 0.1)); expect(keyboardUpBottom, closeTo(844 - 180, 0.1));
expect( expect(
tester.getBottomLeft(composerInput).dy, tester.getBottomLeft(composerInput).dy,
lessThanOrEqualTo(844 - 180), lessThanOrEqualTo(844 - 180),
@@ -388,12 +389,21 @@ void main() {
tester.view.viewInsets = const FakeViewPadding(); tester.view.viewInsets = const FakeViewPadding();
await tester.pumpAndSettle(); await tester.pumpAndSettle();
expect(composer, findsOneWidget); expect(composer, findsOneWidget);
expect(tester.getBottomLeft(composer).dy, closeTo(844, 0.1)); expect(tester.getBottomLeft(composer).dy, closeTo(keyboardUpBottom, 0.1));
expect(commentsSheet, findsOneWidget); expect(commentsSheet, findsOneWidget);
expect(list, findsOneWidget); expect(list, findsOneWidget);
expect(placeholder, findsOneWidget); expect(placeholder, findsOneWidget);
expect(tester.getRect(commentsSheet), sheetRect); expect(tester.getRect(commentsSheet), sheetRect);
expect(tester.getSize(commentsSheet).height, closeTo(sheetHeight, 0.1)); expect(tester.getSize(commentsSheet).height, closeTo(sheetHeight, 0.1));
await tester.tapAt(const Offset(20, 20));
await tester.pumpAndSettle();
expect(composer, findsNothing);
await tester.tap(placeholder);
await tester.pumpAndSettle();
expect(composer, findsOneWidget);
expect(tester.getBottomLeft(composer).dy, closeTo(844, 0.1));
}); });
testWidgets('should_keep_composer_open_after_input_loses_focus', ( testWidgets('should_keep_composer_open_after_input_loses_focus', (