Flutter 暂时禁用文本字段时保持键盘打开

Flutter 暂时禁用文本字段时保持键盘打开,flutter,mobile,soft-keyboard,Flutter,Mobile,Soft Keyboard,如何在临时禁用文本字段时保持键盘在屏幕上 CupertinoTextField在enabled=false或readOnly=true时关闭键盘。我需要将键盘保持在屏幕上。我搜索了大约四个小时,最终找到了一个解决方案:将文本字段的功能更改为一个接受键盘输入的隐藏小部件。处理完成后,再次聚焦文本字段 工作示例: 导入“包:颤振/cupertino.dart” 显示 库珀蒂诺阿普, 丘比特纽顿, CupertinoPageScaffold, 库珀提克斯菲尔德; 导入“包:flatter/widget

如何在临时禁用文本字段时保持键盘在屏幕上


CupertinoTextField
enabled=false
readOnly=true
时关闭键盘。我需要将键盘保持在屏幕上。

我搜索了大约四个小时,最终找到了一个解决方案:将文本字段的
功能更改为一个接受键盘输入的隐藏小部件。处理完成后,再次聚焦文本字段

工作示例:

导入“包:颤振/cupertino.dart”
显示
库珀蒂诺阿普,
丘比特纽顿,
CupertinoPageScaffold,
库珀提克斯菲尔德;
导入“包:flatter/widgets.dart”
显示
构建上下文,
居中
克里普雷克特,
专栏,
集装箱,
焦点节点,
聚焦镜,
主要尺寸,
runApp,
国家,,
状态控件,
文本,
TextAlign,
文本编辑控制器,
小装置;
需要导入“package:meta/meta.dart”显示;
类KeepKeyboardOnScreen扩展StatefulWidget{
最终焦点节点焦点节点;
const KeepKeyboardOnScreen({@required this.focusNode});
@凌驾
State createState()=>KeepKeyboardOnScreenState();
}
类KeepKeyboardOnScreenState扩展状态{
TextEditingController\u控制器;
@凌驾
void initState(){
super.initState();
_控制器=新文本编辑控制器();
}
@凌驾
无效处置(){
_controller.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文)=>容器(
高度:0,,
孩子:ClipRect(
孩子:CupertinoTextField(
控制器:_控制器,
focusNode:widget.focusNode,
一旦更改:()=>_controller.clear(),
),
),
);
}
类页面扩展StatefulWidget{
@凌驾
State createState()=>PageState();
}
类PageState扩展状态{
TextEditingController\u控制器;
FocusNode _FocusNode;
聚焦节点_keepKeyboardOnScreenFocusNode;
bool enabled=true;
@凌驾
void initState(){
super.initState();
_控制器=新文本编辑控制器();
_focusNode=新的focusNode();
_keepKeyboardOnScreenFocusNode=新的FocusNode();
}
@凌驾
无效处置(){
_controller.dispose();
_focusNode.dispose();
_keepKeyboardOnScreenFocusNode.dispose();
super.dispose();
}
@凌驾
小部件构建(BuildContext上下文)=>CupertinoApp(
首页:CupertinoPageScaffold(
儿童:中心(
子:列(
mainAxisSize:mainAxisSize.min,
儿童:[
库珀提诺特斯菲尔德(
控制器:_控制器,
focusNode:_focusNode,
启用:启用,
),
KeepKeyboardOnScreen(焦点节点:_keepKeyboardOnScreenFocusNode),
丘比特纽扣(
已按下:(){
设置状态(){
启用=真;
});
FocusScope.of(上下文).requestFocus(_focusNode);
},
子项:文本(“启用”,textAlign:textAlign.center)),
丘比特纽扣(
已按下:(){
设置状态(){
启用=错误;
});
聚焦范围(上下文)
.requestFocus(_keepKeyboardOnScreenFocusNode);
},
子项:文本(“禁用”,textAlign:textAlign.center)),
],
),
),
),
);
}
void main()异步{
runApp(Page());
}

另请参见:

此方法是否会保留当前的键盘类型?构造函数采用默认为的
keyboardType
参数。flatter在聚焦隐藏的小部件时显示键盘。如果显示不同的键盘,则它将切换到该键盘。要在屏幕上保留不同的键盘,必须传递匹配的
键盘类型
值。