即使调整大小设置为 false,如果键盘出现,Flutter Widget 也会移动

问题描述 投票:0回答:2

我的应用程序中有一个奇怪的行为...我正在使用

PageView
,在第二页上我将
TextField
集中在页面初始化上。效果很好。然而,在第一页上,即使我设置了包装纸
Widgets
,我的
Scaffold
仍然移动了一点:
resizeToAvoidBottomInset = false

这里有一个屏幕视频,以便更好地理解。

这是我的包装视图:

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      resizeToAvoidBottomInset: false,
      backgroundColor: AppColors.secondary,
      body: SafeArea(
        child: Column(
          children: [
            _buildDismissButton(),
            Expanded(
              child: PageView(
                controller: _pageController,
                onPageChanged: (index) {
                  if (index == 0) {
                    FocusScope.of(context).unfocus();
                  }
                },
                children: [
                  AddPhotoPage(onNextPage: () {
                    _pageController.nextPage(
                        duration: Duration(milliseconds: 350),
                        curve: Curves.easeInOut);
                  }),
                  AddTitlePage(),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }

问题出在

AddPhotoPage

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: EdgeInsets.symmetric(horizontal: sidePadding),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Text(
            'Foto wählen',
            style: AppTextStyles.montserratH2SemiBold,
          ),
          Spacer(flex: 1),
          _buildEmptyImageStateWidgets(),
          Spacer(
            flex: 3,
          ),
          RoundedCornersTextButton(
            title: 'Weiter',
            isLoading: isUploadingImage,
            onTap: () {
              widget.onNextPage();
            },
          ),
          SizedBox(
            height: 50.scaled,
          ),
        ],
      ),
    );
  }

我觉得这和

Spacer()
有关系。因为如果我移除它们并仅将
SizedBoxes
放置在特定高度,则不会发生该行为。

我在这里缺少什么?如果您需要更多信息,请告诉我!

flutter dart widget scaffold flutter-pageview
2个回答
1
投票

检查widget树中是否有上面的Scaffold。我也遇到了类似的问题,结果发现我的 main.dart 文件中也有一个 Scaffold。在 Scaffold() 添加 resizeToAvoidBottomInset: false 后,元素停止移动。


0
投票

Tomasz Kot 的答案是正确的。

我的底部导航栏使用脚手架,然后导航栏内部也有使用脚手架的主页。当我同时实现 resizeToAvoidBottomInset = false 时,它可以工作,但是如果我在导航栏中仅实现根脚手架,则它不起作用。也许有人可以深入解释一下。

© www.soinside.com 2019 - 2024. All rights reserved.