ListView在搜索栏上键入时重复数据
我的Listview在搜索栏上重复搜索数据,我有几天找不到问题。这是我的完整代码。ListView在搜索栏上键入时重复数据,listview,flutter,search,Listview,Flutter,Search,我的Listview在搜索栏上重复搜索数据,我有几天找不到问题。这是我的完整代码。 import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:atrack/commonimplentations/groupmembers.dart'; import 'package:atrack/commonimplentations/membersdetails.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:atrack/commonimplentations/groupmembers.dart';
import 'package:atrack/commonimplentations/membersdetails.dart';
//HERE IS THE MAIN CLASS TO DISPLAY DATA FROM A FIRESTORE
class SearchMembers extends StatelessWidget {
final groupName;
List<GroupMembers> list=List();
SearchMembers({this.groupName });
@override
Widget build(BuildContext context) {
final groupUsers = Provider.of<List<Members>>(context);
groupUsers.forEach((groupUser) {
list.add(GroupMembers(groupUser.username,groupName));
});
return Scaffold(
appBar: new AppBar(
title:Text('Search Member'),
backgroundColor:Colors.redAccent,
actions:<Widget>[
IconButton(
icon:Icon(Icons.search),onPressed:(){
showSearch(context: context, delegate: MembersData(membersList:list,GroupName: groupName));
},
)
]
),
body: new ListView(
padding:EdgeInsets.symmetric(vertical:8.0),
children:_buildList()
),
);
}
List<GroupMembers> _buildList() {
return list;
}
}
class MembersData extends SearchDelegate<String>{
List membersList;
final String GroupName;
MembersData({this.membersList,this.GroupName});
List<GroupMembers> returnList(){
return membersList;
}
@override
List<Widget> buildActions(BuildContext context) {
// ACTIONS ON THE APPBAR
return[
IconButton(
icon:Icon(Icons.clear),onPressed:(){
query="";
}
)
];
}
@override
Widget buildLeading(BuildContext context) {
// LEADING ICON OF THE APPBAR
return IconButton(
icon:AnimatedIcon(
icon:AnimatedIcons.menu_arrow,
progress:transitionAnimation,
),onPressed:(){
close(context, null);
},
);
}
@override
Widget buildResults(BuildContext context) {
// SHOW RESULTS
}
@override
Widget buildSuggestions(BuildContext context) {
// WHEN USER SEARCHES SOMETHING
List<GroupMembers> buildSearchList(){
List<GroupMembers> searchList=List();
if(query.isEmpty){
return membersList;
}
else{
membersList.forEach((groupmember){
if(groupmember.name.contains(query.toUpperCase())){
searchList.add(groupmember);
}
});
return searchList.toSet().toList();
}
}
return ListView(
padding:EdgeInsets.symmetric(vertical:8.0),
children:buildSearchList()
);
}
}
导入“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
导入“包:atrack/commonimplementations/groupmembers.dart”;
导入“包:atrack/commonimplementations/membersdetails.dart”;
//下面是显示FIRESTORE中数据的主类
类SearchMembers扩展了无状态小部件{
最终组名;
List=List();
SearchMembers({this.groupName});
@凌驾
小部件构建(构建上下文){
final groupUsers=Provider.of(上下文);
groupUsers.forEach((groupUser){
添加(GroupMembers(groupUser.username,groupName));
});
返回脚手架(
appBar:新的appBar(
标题:文本(“搜索成员”),
背景颜色:Colors.redAccent,
行动:[
图标按钮(
图标:图标(Icons.search),按下时:(){
showSearch(context:context,delegate:MembersData(membersList:list,GroupName:GroupName));
},
)
]
),
正文:新列表视图(
填充:边缘设置。对称(垂直:8.0),
子项:_buildList()
),
);
}
列表_buildList(){
退货清单;
}
}
类成员数据扩展了SearchDelegate{
名单成员名单;
最后一个字符串GroupName;
MembersData({this.membersList,this.GroupName});
列表返回列表(){
返回成员列表;
}
@凌驾
列出buildActions(BuildContext上下文){
//APPBAR上的操作
返回[
图标按钮(
图标:图标(Icons.clear),按下时:(){
query=“”;
}
)
];
}
@凌驾
小部件buildLeading(BuildContext上下文){
//应用程序栏的主图标
返回图标按钮(
图标:动画指令(
图标:animateDictions.menu\u箭头,
进展:过渡化,
),onPressed:(){
关闭(上下文,空);
},
);
}
@凌驾
小部件构建结果(构建上下文){
//显示结果
}
@凌驾
小部件构建建议(构建上下文){
//当用户搜索某物时
列表buildSearchList(){
List searchList=List();
if(query.isEmpty){
返回成员列表;
}
否则{
membersList.forEach((组成员){
if(groupmember.name.contains(query.toUpperCase())){
searchList.add(groupmember);
}
});
返回searchList.toSet().toList();
}
}
返回列表视图(
填充:边缘设置。对称(垂直:8.0),
子项:buildSearchList()
);
}
}
在第一次构建时,它在listview上完美地显示数据,但在搜索时它会复制数据,每次我开始在搜索栏上搜索数据时,都会在正在显示的listview上复制数据,非常感谢您的帮助 您从未重置
列表
我没有得到您的答案,请您详细说明。如果您也能提供详细的答案,我将非常感谢。提前感谢您总是将新数据添加到列表
-我的意思是列表。add()
这就是为什么您的列表总是增长,显示可能相同的数据列表。clear();forEach((groupUser){list.add(GroupMembers(groupUser.username,groupName));});