Flutter Listview不过滤到搜索结果



我创建了一个appbar搜索,它获取用户的姓名并将其发送到配置文件页面。问题是当我输入用户名时,listview没有更新(列表顺序没有改变(当我键入不在列表中的不同名称时,它显示为空,但当我键入在列表视图中显示第一个不相同的名称时

这是我的搜索代理类

class CustomSearchDelegate extends SearchDelegate {
@override
List<Widget>? buildActions(BuildContext context) {
return [
IconButton(
onPressed: () {
if (query == "") {
close(context, null);
} else {
query = query = '';
}
},
icon: const Icon(Icons.clear),
),
];
}
// second overwrite to pop out of search menu
@override
Widget? buildLeading(BuildContext context) {
return IconButton(
onPressed: () {
close(context, null);
},
icon: const Icon(Icons.arrow_back),
);
}
// third overwrite to show query result
@override
Widget buildResults(BuildContext context) {
List<String> matchQuery = [];
for (var documentName in data!) {
if (documentName.recipientName!.contains(query.toLowerCase())) {
matchQuery.add(documentName.recipientName.toString());
}
}
return ListView.builder(
physics: const BouncingScrollPhysics(),
itemCount: matchQuery.length,
itemBuilder: (context, index) {
return InkWell(
onTap: () {
Navigator.pop(context);
UtilFunctions.navigateTo(context,
MainScreen(patientid: data![index].senderId.toString()));
query = "";
},
child: ProfileList(
patientid: data![index].senderId.toString(),
phn: data![index].phn.toString(),
sharedDate: data![index].sharedDate.toString(),
username: data![index].senderName.toString(),
));
},
);
}
@override
Widget buildSuggestions(BuildContext context) {
List<String> matchQuery = [];
for (var document in data!) {
if (document.senderName!.toLowerCase().contains(query.toLowerCase())) {
matchQuery.add(document.senderName.toString());
}
}
return ListView.builder(
physics: const BouncingScrollPhysics(),
itemCount: matchQuery.length,
itemBuilder: (context, index) {
return InkWell(
onTap: () {
close(context, null);
query = "";
UtilFunctions.navigateTo(context,
MainScreen(patientid: data![index].senderId.toString()));
},
child: ProfileList(
patientid: data![index].senderId.toString(),
phn: data![index].phn.toString(),
sharedDate: data![index].sharedDate.toString(),
username: data![index].senderName.toString(),
));
},
);
}
}

你可以在这里查看我的视频列表查看无更新

import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/container.dart';
import 'package:flutter/src/widgets/framework.dart';
class SearchBarWidget extends StatefulWidget {
const SearchBarWidget({super.key});
@override
State<SearchBarWidget> createState() => _SearchBarWidgetState();
}
class _SearchBarWidgetState extends State<SearchBarWidget> {
List<String> list = ["Arshad", "khan", "junaid", "Babar", "Tariq", "Mobile"];
String search = "";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: TextField(
onChanged: (value) {
setState(() {
search = value;
});
},
),
),
body: ListView.builder(
itemCount: list.length,
itemBuilder: (context, index) {
if (search.isEmpty) {
return ListTile(
title: Text(list[index]),
);
}
if (list[index].toLowerCase().contains(search)) {
return ListTile(
title: Text(list[index]),
);
}
return Container();
},
),
);
}
}

你们可以利用这个想法。注意:删除for循环并在ListView.builder 中写入if条件

最新更新