如何将一个Widget定位在SingleChildScrollView的底部?

问题描述 投票:1回答:1

我需要使用SingleChildScrollView以便能够使用keyboard_actions以便我可以在iOS的键盘顶部放置一个“完成”按钮(目前使用数字键盘)

SingleChildScrollView将有一个小时候的列,然后一个按钮放在底部。我尝试使用LayoutBuilder强制执行SingleChildScrollView的高度。

LayoutBuilder(
      builder: (BuildContext context, BoxConstraints viewportConstraints) {
    return SingleChildScrollView(
        child: ConstrainedBox(
            constraints:
                BoxConstraints(minHeight: viewportConstraints.maxHeight),
            child: Column(
                crossAxisAlignment: CrossAxisAlignment.stretch,
                mainAxisSize: MainAxisSize.max,
                children: <Widget>[
                  Column(),
                  // Spacer() ?
                  FlatButton()
                ])));
  });

我尝试使用带有BoxConstraints属性的maxHeight,但最终当键盘出现时,小部件不会晃动。

旁注:Scaffold将resizeToAvoidBottomInsetresizeToAvoidBottomPadding设置为true(默认值)

flutter flutter-layout
1个回答
3
投票

SingleChildScrollView的问题在于它是shrikwrap它的孩子。所以要介于两者之间的自动尺寸小部件 - 我们需要使用MediaQuery来获得屏幕高度和SizedBox扩展 - SingleChildScrollView

这里按钮位于屏幕底部。

工作代码:

double height = MediaQuery.of(context).size.height;

    SingleChildScrollView(
          child: SizedBox(
              height: height,
              child: Column(
                  crossAxisAlignment: CrossAxisAlignment.stretch,
                  mainAxisSize: MainAxisSize.max,
                  children: <Widget>[
                    Column(
                      children: <Widget>[
                        Text('Dummy'),
                        Text('Dummy'),
                        Text('Dummy'),
                      ],
                    ),
                    Spacer(),
                    FlatButton(
                      onPressed: () {},
                      child: Text('Demo'),
                    )
                  ])),
        ) 
© www.soinside.com 2019 - 2024. All rights reserved.