我正在尝试实现基于以下链接的Flutter Typeahead:Flutter TypeAhead
class _CallAddState extends State<CallAdd> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final TextEditingController _typeAheadController = TextEditingController();
var SerVerConfig = [
{
"name":"Mike",
"id":"1"
},
{
"name":"Bill",
"id":"2"
},
{
"name":"Juan",
"id":"3"
},
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Form(
key: this._formKey,
child: Padding(
padding: EdgeInsets.all(32.0),
child: Column(
children: <Widget>[
TypeAheadField(
textFieldConfiguration: TextFieldConfiguration(
autofocus: true,
style: DefaultTextStyle.of(context)
.style
.copyWith(fontStyle: FontStyle.italic),
decoration:
InputDecoration(border: OutlineInputBorder())),
suggestionsCallback: (pattern) async {
return SerVerConfig;
},
itemBuilder: (context, suggestion) {
print("item builder " + suggestion);
return ListTile(
leading: Icon(Icons.shopping_cart),
title: Text(suggestion['name']),
// subtitle: Text('\$${suggestion['id']}'),
);
},
onSuggestionSelected: (suggestion) {
Navigator.of(context).push(MaterialPageRoute(
// builder: (context) => ProductPage(product: suggestion)
));
},
)
],
),
),
));
}
}
很遗憾,我在sugestionsCallback函数中收到以下消息的错误。“类型”_InternalLinkedHashMap“不是类型”String“的子类型
任何帮助或建议都是非常感谢的。谢谢。
2条答案
按热度按时间rsl1atfo1#
SerVerConfig使用列表,您可以比较差异
您可以看到完整的代码和演示图片(示例2:表格)
代码片段
全码
weylhg0b2#
您可以使用2种方法使其可行:
方法一:
在itemBuilder中使用GestureDetector,如下所示。
这样做,您仍然需要'onSuggestionSelected'方法,但您可以将其留空。
方法二:
您需要对窗体使用TypeAheadFormField。
我从以下链接onSuggestionSelected not called in Web中获得这些答案