Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ListView在搜索栏上键入时重复数据_Listview_Flutter_Search - Fatal编程技术网

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';

我的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()

     );
  }
}

导入“包装:颤振/材料.省道”;
导入“包: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));});