the*_*yer 5 dart flutter flutter2.0
我不能使用,TextEditingController因为TextFormField使用Autocomplete fieldViewBuilder TextEditingController
Autocomplete(
optionsBuilder: (TextEditingValue textEditingValue) {
if (textEditingValue.text == '') return [];
return this
.productNames
.where((Map<String, dynamic> option) {
return option['ar']
.toLowerCase()
.contains(textEditingValue.text.toLowerCase());
});
},
fieldViewBuilder: (context, textEditingController,
focusNode, onFieldSubmitted) =>
TextFormField(
controller: textEditingController,//uses fieldViewBuilder TextEditingController
focusNode: focusNode,
),
),
Run Code Online (Sandbox Code Playgroud)
log*_*og0 10
initialValueAutoComplete为此提供了一个命名参数。
Autocomplete<AutocompletePrediction>(
initialValue: const TextEditingValue(text: "Initial value"),
fieldViewBuilder: ...
...
)
Run Code Online (Sandbox Code Playgroud)
编辑
我刚刚意识到您正在使用 TextFormField,它有一个名为initialValue 的参数。如果您不需要文本编辑控制器,这个答案应该有效
fieldViewBuilder: (context, textEditingController,
focusNode, onFieldSubmitted) =>
TextFormField(
focusNode: focusNode,
initialValue:"Your initial Value",
),
Run Code Online (Sandbox Code Playgroud)
或者如果您正在使用控制器尝试
fieldViewBuilder: (context, textEditingController,
focusNode, onFieldSubmitted) =>
TextFormField(
controller: textEditingController..text="Initial Value",
focusNode: focusNode,
),
Run Code Online (Sandbox Code Playgroud)
原答案
为什么不使用文本编辑控制器本身呢?代码会是这样的
Autocomplete(
optionsBuilder: (TextEditingValue textEditingValue) {
if (textEditingValue.text == '') return [];
return this
.productNames
.where((Map<String, dynamic> option) {
return option['ar']
.toLowerCase()
.contains(textEditingValue.text.toLowerCase());
});
},
fieldViewBuilder: (context, textEditingController,
focusNode, onFieldSubmitted){
textEditingController.text = "Your initial text";// You can use the next snip of code if you dont want the initial text to come when you use setState((){});
return TextFormField(
controller: textEditingController,//uses fieldViewBuilder TextEditingController
focusNode: focusNode,
),
}
),
Run Code Online (Sandbox Code Playgroud)
如果您使用 setState 并且上面的代码不断用初始文本替换文本,请执行类似的操作
Autocomplete(
optionsBuilder: (TextEditingValue textEditingValue) {
if (textEditingValue.text == '') return [];
return this
.productNames
.where((Map<String, dynamic> option) {
return option['ar']
.toLowerCase()
.contains(textEditingValue.text.toLowerCase());
});
},
fieldViewBuilder: (context, textEditingController,
focusNode, onFieldSubmitted){
textEditingController.text = textEditingController.text == ""? "Inital Text":textEditingController.text;// You can use the next snip of code if you dont want the initial text to come when you use setState((){});
return TextFormField(
controller: textEditingController,//uses fieldViewBuilder TextEditingController
focusNode: focusNode,
),
}
),
Run Code Online (Sandbox Code Playgroud)
最后一个解决方案不太优雅但有效。如果我找到更好的解决方案,我会告诉你。您甚至可以将此 textEditingController 分配给在顶部声明的全局变量,并从代码中的任何位置访问它。并且不用检查文本是否为空,而是每次 setState 时增加一个新变量的值,如果该值 == 0,则可以设置初始文本
| 归档时间: |
|
| 查看次数: |
1044 次 |
| 最近记录: |