我使用searchable_dropdown 1.1.0包实现了一个flutter下拉菜单,我对班级列表进行了测试,发现搜索TextField框不适用于班级列表。我希望当我在列表中的两个字符串/整数中搜索值时,下拉搜索框都可以工作。
例如:我希望当我输入数字1或键1时,它应该向我显示我搜索的项目
我想知道如何解决这个问题?感谢帮助
这是我的代码。
import 'package:flutter/material.dart'; import 'package:searchable_dropdown/searchable_dropdown.dart'; get_list(){ List<KeyValueModel> datas = [ KeyValueModel(key: "Key 1", value: "Value 1"), KeyValueModel(key: "Key 2", value: "Value 2"), KeyValueModel(key: "Key 3", value: "Value 3"), KeyValueModel(key: "Key 4", value: "Value 4"), KeyValueModel(key: "Key 5", value: "Value 5"), ]; return datas; } //Create a Model class to hold key-value pair data class KeyValueModel { String key; String value; KeyValueModel({this.key, this.value}); } class Test extends StatefulWidget { @override TestState createState() { return new TestState(); } } class TestState extends State<Test> { List listan = get_list(); KeyValueModel _selectedValue = KeyValueModel(key: "0", value: "value"); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Key value Pair - DropdownButton'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, mainAxisSize: MainAxisSize.max, children: <Widget>[ SearchableDropdown<KeyValueModel>( isCaseSensitiveSearch: true, items: listan .map((data) => DropdownMenuItem<KeyValueModel>( child: Text(data.key), value: data, )).toList(), onChanged: (KeyValueModel value) { setState(() => _selectedValue = value); }, hint: Text('Select Key'), ), SizedBox( height: 25.0, ), Text(_selectedValue.value), ], ), ), ); } }
这是该包中的一些源代码。
... if(widget.isCaseSensitiveSearch){ isContains = item.value.toString().contains(keyword); } else{ isContains = item.value.toString().toLowerCase().contains(keyword.toLowerCase()); } ...
它调用toString()的value。在您的情况下value,类型为KeyValueModel,并且没有重写toString()方法。因此它返回Instance of KeyValueModel而不是Key 1大约。
toString()
value
KeyValueModel
Instance of KeyValueModel
Key 1
这是返回keywhen toString()方法调用的类。
key
class KeyValueModel { String key; String value; KeyValueModel({this.key, this.value}); @override String toString() { return this.key; } }