flutter - 点击 DropdownButton 时防止键盘关闭
问题描述
这个问题与 Flutter 有关。我在 TextField 上方有一个 DropdownButton,如下所示:
DropdownButton<String>(
isExpanded: true,
hint: Text(associatedHint),
disabledHint: Text(associatedHint),
items: diagnosesList.map((int value) {
return DropdownMenuItem<String>(
value: value.toString(),
child: Text(dxDisplay),
);
}).toList(),
value: ANID,
onChanged: (String newANID) {
setState(() {
ANID = newANID;
});
},
),
TextField(
autofocus: true,
keyboardType: keyboardType,
maxLines: maxLines,
textCapitalization: TextCapitalization.sentences,
controller: _textEntryController,
decoration: InputDecoration(hintText: "Entry"),
onChanged: (value) {
noteEntry = value;
},
),
TextField 自动对焦会立即调出键盘。当您点击 DropdownButton 时,它会从 TextField 中移除焦点,从而关闭键盘。这会在屏幕上移动东西并创建糟糕的用户体验。
有关如何解决此问题的任何建议?即使在点击 DropdownButton 之后,有没有办法让键盘保持打开状态?
解决方案
终于找到了解决办法。需要将 AlertDialog 包装在 SingleChildScrollView 中。这会在屏幕顶部打开 AlertDialog,并且在键盘打开/关闭时不会移动它。它还确保如果内容过长(垂直),它可以在键盘下滑动,并且用户可以使用滚动手势来查看/与隐藏的内容交互。
return SingleChildScrollView(
child: AlertDialog(
title: alertTitle,
content: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget> [
DropdownButton<String>(
.......
),
TextField(
autofocus: true,
.......
),
],
),
)
);
推荐阅读
- java - HashMap 的代理 NullPointerException
- java - 无法在 Sybase DB 中插入大字符串
- azure-ad-b2c - B2C Graph API - 即使启用 Directory.ReadWrite.All 也没有足够的权限
- python-3.x - 如何检查熊猫数据框组是否具有相同的数据
- vhdl - 如何在没有测试平台的情况下在 vhdl(ISE 设计套件)中设置输入?
- c++ - OpenGL围绕点移动相机
- sql - 在 SQL Server 中 sp_rename 之后丢失了一个表,第二个参数中有不必要的架构名称
- javascript - 如何使用JS在IE浏览器中重新加载/刷新页面而不弹出表单重新提交
- c++ - 不包含密钥时的 std::map::lower_bound 或 std::map::upper_bound ?
- angular - 使用 Angular 2-4 编写 Jasmine 测试用例时 first 不是函数