这是从cutnumid中搜索地址,以显示列表视图,显示完成的所有地址,我如何只键入部分地址进行搜索?我尝试过很多不同的事情,但总是失败。请帮我
//search custnum showaddress
onSearch(String text) async {
if (text.isNotEmpty) {
List<Item> itemList = [];
for (var item in items) {
if (item.custnum == text.toLowerCase().toUpperCase()) {
itemList.add(item);
setState(() {
searchitems.clear();
searchitems.addAll(itemList);
print('name : ${searchitems[0].name}');
if (searchitems.isEmpty) {
searchitems = [];
// print('searchitems : ${searchitems[0].address!.length}');
// print('searchitems : ${searchitems[0].address!}');
}
});
}
}
} else {
setState(() {
searchitems.clear();
// searchitems.addAll(items);
print('searchitems : $searchitems');
});
}
}
这是只搜索文本字段中键入的单词的代码。仅显示搜索到的此部分可能是无效代码。我举了一个例子。
onSearchAddr(String text) async {
if (text.isEmpty) {
setState(() {
loading = false;
});
return;
}
searchitems[0].address!.forEach((f) {
if (f.addr1.toString().toLowerCase().contains(text))
items.add(searchitems[0]);
});
}
您在每次迭代中setState()
。如果迭代比build
方法快怎么办?它会崩溃,因为应用程序在重新绘制时必须重新绘制。
通过字符串的一部分进行搜索的天真方式。使用CCD_ 4的CCD_ 3方法。
onSearch(String text) async {
if (text.isNotEmpty) {
List<Item> itemList = [];
for (var item in items) {
if (item.custnum.toLowerCase().contains(text.toLowerCase())) {
itemList.add(item);
}
}
setState(() {
searchitems.clear();
searchitems.addAll(itemList);
print('name : ${searchitems[0].name}');
});
} else {
setState(() {
searchitems.clear();
// searchitems.addAll(items);
print('searchitems : $searchitems');
});
}
代码的逻辑似乎正在工作。
它可能是来自其他地方的错误,例如无界ListView
class MyWidget extends StatefulWidget {
const MyWidget({super.key});
@override
State<MyWidget> createState() => _MyWidgetState();
}
enum Item { one, two, three, four, ONE, TWO, THREE, FOUR }
class _MyWidgetState extends State<MyWidget> {
//search custnum showaddress
List<Item> searchitems = [Item.ONE];
List<Item> items = Item.values;
onSearch(String text) async {
if (text.isNotEmpty) {
List<Item> itemList = [];
for (var item in items) {
if (item.name.toLowerCase() == text) {
itemList.add(item);
setState(() {
searchitems.clear();
searchitems.addAll(itemList);
print('name : ${searchitems[0].name}');
if (searchitems.isEmpty) {
searchitems = [];
// print('searchitems : ${searchitems[0].address!.length}');
// print('searchitems : ${searchitems[0].address!}');
}
});
}
}
} else {
setState(() {
searchitems.clear();
// searchitems.addAll(items);
print('searchitems : $searchitems');
});
}
}
@override
Widget build(BuildContext context) {
return Column(
children: [
TextField(
onSubmitted: onSearch,
),
Expanded(
child: ListView(
children: searchitems.map((e) => Text(e.name)).toList(),
),
)
],
);
}
}