listview - 在搜索栏上键入时 ListView 重复数据
问题描述
我的 Listview 正在复制搜索栏上的搜索数据,我几天都找不到问题。这是我的完整代码。
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()
);
}
}
在第一次构建时,它在列表视图上完美地显示数据,但在搜索时它会重复数据,每次我开始在搜索栏上搜索时,数据都会在显示的列表视图上重复,任何帮助将不胜感激。
解决方案
推荐阅读
- selenium - Catchpoint pause 与 waitForNoRequest - 有什么区别?
- python - 仅当新值不为空时,如何从数据框中更改列值比较来自另一个数据框的值?
- excel - 用 Cribbage 手数 15
- c++ - 使用 Array 的结构在堆中创建动态数组
- elasticsearch - 是否可以只从 Elasticsearch 中检索 doc id 和 score 而无需执行搜索的 fetch 阶段?
- javascript - JS/TS Promises - 解析(对象)数组,但解析时为空
- python - VSCode:如何在每次使用 VS Code 任务运行之前自动清除 Python 终端输出窗口?
- reactjs - 在 componentDidMount for 循环中向数组中添加多行
- scala - 从标准 Akka Actor 迁移到具有背压和节流的 Akka Streams
- mongodb - Sitecore 8.1 MongoDB 集合未更新