我有一个像这样的扩展小部件列:

 return new Container(
      child: new Column(
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: <Widget>[
          new Expanded(
            flex: 1,
            child: convertFrom,
          ),
          new Expanded(
            flex: 1,
            child: convertTo,
          ),
          new Expanded(
            flex: 1,
            child: description,
          ),
        ],
      ),
    );

它是这样的:

convertFrom,包括一个TextField。当我点击这个文本框时,Android键盘就会出现在屏幕上。这会改变屏幕大小,所以小部件会像这样调整大小:

有没有办法让键盘“覆盖”屏幕,使我的列不调整大小?如果我不使用Expanded widgets,并为每个widget硬编码一个高度,这些widget就不会调整大小,但是当键盘出现时,我会得到一个黑黄条纹错误(因为没有足够的空间)。这也不是对所有屏幕尺寸都灵活。

我不确定这是android特有的还是flutter特有的。


当前回答

当我们点击文本框和键盘打开媒体查询时,这种奇怪的媒体查询行为在堆栈中重建了一个相同的页面。

MaterialApp ( useInheritedMediaQuery:真的,)

useInheritedMediaQuery设为true会有帮助。

其他回答

将resizeToAvoidBottomInset设置为false,而不是已弃用的resizeToAvoidBottomPadding。

    return Scaffold(
      resizeToAvoidBottomInset : false,
      body: YourWidgets(),
    );

这将滚动您的键盘和崩溃大小时,键盘消失。

showModalBottomSheet(
      isScrollControlled: true,
      context: context,
      builder: (context) {
        return Padding(
            padding: MediaQuery.of(context).viewInsets,
            child:SingleChildScrollView(
            physics: ClampingScrollPhysics(),
            child: Container(.......)));

当我们点击文本框和键盘打开媒体查询时,这种奇怪的媒体查询行为在堆栈中重建了一个相同的页面。

MaterialApp ( useInheritedMediaQuery:真的,)

useInheritedMediaQuery设为true会有帮助。

你可以使用

Scaffold(
  resizeToAvoidBottomInset: false, 
  ... 
)

或者可以将小部件打包

SingleChildScrollView

根据用例,您还可以考虑使用列表视图。这将确保当没有足够的空间时,内容会滚动。作为一个例子,你可以在图库应用程序中查看文本框演示