我需要使用SingleChildScrollView才能使用keyboard_actions,以便可以在iOS的键盘上方放置一个“完成”按钮(此刻使用数字键盘)
SingleChildScrollView
在SingleChildScrollView将有一列作为一个孩子,然后一个按钮被放置在底部。我尝试过使用LayoutBuilder来将高度提高到SingleChildScrollView。
LayoutBuilder
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() ]))); });
我尝试将BoxConstraintswith与该maxHeight属性一起使用,但是最终当键盘出现时,该小部件不会消失。
BoxConstraints
maxHeight
旁注:脚手架同时具有resizeToAvoidBottomInset和resizeToAvoidBottomPadding设置为true(默认值)
resizeToAvoidBottomInset
resizeToAvoidBottomPadding
true
问题SingleChildScrollView在于shrikwrap它是孩子。因此,要在两者之间使用自动尺寸小部件- 我们需要使用MediaQuery来获取屏幕高度并SizedBox展开- SingleChildScrollView。
shrikwrap
MediaQuery
SizedBox
这里的按钮将在屏幕底部。
工作代码:
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'), ) ])), )