Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart [颤振/省道]:如何动态更改表单中TextFormField的键盘类型?_Dart_Flutter - Fatal编程技术网

Dart [颤振/省道]:如何动态更改表单中TextFormField的键盘类型?

Dart [颤振/省道]:如何动态更改表单中TextFormField的键盘类型?,dart,flutter,Dart,Flutter,我有一个小部件,它呈现TextFormFields的列表视图以输入数据。但是,我想动态更改其中一个文本字段的键盘类型。以下是小部件的概述: 类CreateTodo扩展StatefulWidget{ @凌驾 _CreateTodoState createState()=>\u CreateTodoState(); } 类_createToState扩展状态{ final _formKey=GlobalKey(); 最终双模板宽度=175.0; 最终地图项目映射={ “标题”:图标(Icons.t

我有一个小部件,它呈现TextFormFields的列表视图以输入数据。但是,我想动态更改其中一个文本字段的键盘类型。以下是小部件的概述:


类CreateTodo扩展StatefulWidget{
@凌驾
_CreateTodoState createState()=>\u CreateTodoState();
}
类_createToState扩展状态{
final _formKey=GlobalKey();
最终双模板宽度=175.0;
最终地图项目映射={
“标题”:图标(Icons.title),
“说明”:图标(Icons.edit),
“日期”:图标(Icons.calendar\u今天)
};
最终项目=[‘标题’、‘说明’、‘日期’];
_更改键盘类型(输入){
如果(条目=“说明”){
返回TextInputType.multiline;
}
返回TextInputType.text;
}
ListView createListItems(){
返回ListView.builder(
填充:仅限边缘设置(
左:50.0,
右图:50.0,
排名:20.0
),
滚动方向:轴垂直,
物品计数:3,
itemBuilder:(上下文,索引){
var currentHeading=此项目[索引];
var currentIcon=this.itemsMap[currentHeading];
返回填充(
填充:仅限边缘设置(底部:50.0),
子项:新建TextFormField(
验证器:(输入){
if(input.isEmpty){
return“必须为待办事项输入${currentHeading.toLowerCase()}”;
}
},
键盘类型:此。\更改键盘类型(当前标题),
装饰:新的输入装饰(
前缀:当前图标,
标签文本:当前标题,
边框:OutlineInputBorder(),
),
)
);
}
);
}
@凌驾
小部件构建(构建上下文){
报税表(
自动验证:true,
儿童:扩大(
子项:(this.createListItems())
)
);
}
}

不起作用的主线是:
keyboardType:this.\u changeKeyboardType(当前标题)
。。。我是否以错误的方式处理这个问题?任何方向都会非常有用。我基本上希望描述的textFormFeld是多行的,这样用户可以更好地可视化他们的描述。

我现在的工作解决方案:

//其中entry是包含focusNode和textInputType的对象
entry.focusNode.unfocus();
设置状态(){
entry.textInputType=类型;
});
//延迟是必要的,否则实际上只有第二次抽头会改变
Future.delayed(常量持续时间(毫秒:1),(){
FocusScope.of(context.requestFocus)(entry.focusNode);
});
到目前为止,我唯一无法修复的缺点是,键盘在重新出现新的
TextInputType
之前就消失了

谷歌的电子表格应用程序可以在没有关闭的情况下即时完成,它很想知道这是否以及如何在Flutter中实现

您必须更改逻辑,因为我的示例是异步的。
如果有帮助或需要更多帮助,请告诉我。
或者,如果你已经弄明白了,你是怎么做到的


信用证:它的灵感来自于同一个问题,我也没有找到任何解决方案:(@rickdroio)为了解决这个问题,我还添加了
maxLines
属性,允许它超过一行。当我需要多行输入时,我将它设置为
null
,当我需要单行输入时,我将它设置为1。你能提供“entry”的声明吗?这是TextFormField的控制器或键属性吗?哦,是的,我现在正在打电话,但它本质上是一个Dart类,具有属性
focusNode
textInputType
,希望能有所帮助?