在 Auto complete() 中,如果想要设置初始值是非常棘手的问题,因为该组件没有内置的 initialValue 属性。然而,可以重写 TextEditingController 来解决这个问题。我们可以引入一个新的构造函数来初始化控制器并设置初始值。
示例代码:
class AutoCompleteTextField extends StatefulWidget {
final String initialValue;
AutoCompleteTextField({
this.initialValue,
});
@override
_AutoCompleteTextFieldState createState() => _AutoCompleteTextFieldState();
}
class _AutoCompleteTextFieldState extends State {
TextEditingController _controller;
@override
void initState() {
super.initState();
_controller = TextEditingController(text: widget.initialValue);
}
@override
Widget build(BuildContext context) {
return Autocomplete(
optionsBuilder: (TextEditingValue textEditingValue) =>
_getOptions(textEditingValue),
onSelected: (String selection) =>
_controller.text = selection,
fieldViewBuilder: (BuildContext context,
TextEditingController textEditingController,
FocusNode focusNode,
VoidCallback onFieldSubmitted) =>
TextField(
controller: _controller,
focusNode: focusNode,
onChanged: (String value) => setState(() {}), // 使选项重新生成
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: 'Type a country or region',
),
),
);
}
List _getOptions(TextEditingValue textEditingValue) {
// 返回一些选项列表
}
}