首页 > 解决方案 > 在搜索栏上键入时 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()

     );
  }
}

在第一次构建时,它在列表视图上完美地显示数据,但在搜索时它会重复数据,每次我开始在搜索栏上搜索时,数据都会在显示的列表视图上重复,任何帮助将不胜感激。

标签: listviewfluttersearch

解决方案


推荐阅读