dart - 如何将底页与具有文本字段的键盘一起移动(自动对焦是真的)?

标签 dart flutter flutter-layout

我正在尝试制作一个具有文本字段且自动对焦设置为 true 的底页,以便弹出键盘。但是,底片被键盘覆盖。有没有办法将 bottomsheet 移到键盘上方?

Padding(
  padding:
      EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
  child: Column(children: <Widget>[
    TextField(
      autofocus: true,
      decoration: InputDecoration(hintText: 'Title'),
    ),
    TextField(
      decoration: InputDecoration(hintText: 'Details!'),
      keyboardType: TextInputType.multiline,
      maxLines: 4,
    ),
    TextField(
      decoration: InputDecoration(hintText: 'Additional details!'),
      keyboardType: TextInputType.multiline,
      maxLines: 4,
    ),]);

最佳答案

  • 解决这个问题
  1. isScrollControlled = true 添加到 BottomSheetDialog 它将允许底部工作表占据所需的全部高度,从而更加确保键盘不会覆盖 文本字段

  2. 使用 MediaQuery.of(context).viewInsets.bottom 添加键盘填充

  • 注意
  1. 如果您的 BottomSheetModelColumn,请确保添加 mainAxisSize: MainAxisSize.min, 否则工作表将覆盖整个屏幕.

  2. 使用多个 TextField 或 TextFormField

  • 示例
showModalBottomSheet(
        shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.vertical(top: Radius.circular(25.0))),
        backgroundColor: Colors.black,
        context: context,
        isScrollControlled: true,
        builder: (context) => Padding(
          padding: EdgeInsets.only(
                        bottom: MediaQuery.of(context).viewInsets.bottom),
          child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                mainAxisSize: MainAxisSize.min,
                children: <Widget>[
                  Padding(
                    padding: const EdgeInsets.symmetric(horizontal: 12.0),
                    child: Text('Enter your address',
                        style: TextStyles.textBody2),
                  ),
                  SizedBox(
                    height: 8.0,
                  ),
                  TextField(
                      decoration: InputDecoration(
                        hintText: 'adddrss'
                      ),
                      autofocus: true,
                      controller: _newMediaLinkAddressController,
                    ),
                  

                  SizedBox(height: 10),
                ],
              ),
        ));

请注意:

shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.vertical(top: Radius.circular(25.0))),

这不是必需的。只是我正在创建一个圆形的底部工作表。

  • 已更新

Flutter 2.2 再次打破变化!现在您需要再次提供底部填充,这样键盘就不会与 bottomsheet 重叠。

关于dart - 如何将底页与具有文本字段的键盘一起移动(自动对焦是真的)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53869078/

相关文章:

html - 在 Dart 中处理丢失的焦点

firebase - 为什么 Firebase 动态链接总是空的?

flutter - 如何制作多个图像选择器,在 flutter 中上传和设置容器内的图像?

flutter - Flutter-如何使用某种生成器在同一段落中显示具有不同样式的字符串数组?

android - 我正在尝试将Firebase添加到我的flutter项目中,但我不断收到此错误找不到方法实现()

flutter - 如何正确设计Flutter设计

flutter 将 floatingActionButton 向上移动 50 像素

flutter - 什么是Dart和Flutter开发

flutter 包在包中找不到类

flutter - 从 flutter 中的多个按钮更改一个按钮的颜色