如何在可调整大小的页面中将小部件放置在特定位置?[Flutter]

3
我正在制作一个页面,其中包括一些字段,如文本字段滑块。在页面的末尾,必须有一个按钮以进入下一步,该按钮被包装在一个Align中,以便在页面之间具有固定位置。
另一方面,resizeToAvoidBottomInset属性为true;因此,当有人点击一个文本字段时,页面会调整大小以保持文本字段可见。问题在于,如果点击文本字段,按钮会向上移动到页面的中间。
现在,我想要的是,在页面仍然可调整大小的情况下,将按钮放置在固定位置的方法。
这是build的代码:
Widget build(BuildContext context) {
    return MaterialApp(
      home: GestureDetector(
        onTap: () => FocusManager.instance.primaryFocus?.unfocus(),
        child: Scaffold(
          extendBodyBehindAppBar: true,
          resizeToAvoidBottomInset: true,
          body: Stack(
            children: [
              const Background(),
              getTopbar(),
              getBody(),
              getProceedButton()
            ],
          ),
        ),
      ),
    );
  }

这里是 getBody 函数的摘要版本:

return Padding(
    padding: const EdgeInsets.only(top: topbarHeigthSmall),
    child: Container(
        height: MediaQuery.of(context).size.height - topbarHeigthSmall,
        child: Padding(
            padding: const EdgeInsets.only(right: 30, left: 30),
            child: SingleChildScrollView(
                child: Column(
                    children: [
                        //children of page like textfields and ... 
                    ],
                ),
            ),
        ),
    ),
);

最后是按钮button的代码:

Widget getProceedButton() {
    return Align(
      alignment: const Alignment(0.0, 0.8),
      child: Container(...),
    );
}

在点击 文本域 之前的屏幕截图:

在点击之后的另一张屏幕截图: 链接到图片

1个回答

1
只需将您的按钮小部件放在Positioned中,像这样:

只需将您的按钮小部件放在Positioned中,像这样:

Positioned(
          top:MediaQuery.of(context).size.height * 0.8,
              left: 0,
              right: 0,
              child: button(),);

实际上,我之前尝试过这个方法,但好像没有起作用。不过,有一个小技巧可以让解决方案奏效,那就是给顶部属性赋一个值,例如:"MediaQuery.of(context).size.height * 0.8",而不是填充底部属性。如果你填充底部属性,按钮会在再次点击文本字段时向上移动。无论如何,感谢你提供的线索! - Farzad Jafari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接