Can't search contacts

后端 未结 1 867
予麋鹿
予麋鹿 2021-01-27 17:50

So I have made a list of static contacts, and I have tried to add a search bar, however I can\'t search the contacts using the search bar. When I click on search bar it will ope

相关标签:
1条回答
  • 2021-01-27 18:32

    I have updated the code with predictive search and removed the unused codes.

    import 'package:flutter/material.dart';
    
    class Contact {
      final String fullName;
    
      const Contact({this.fullName});
    }
    
    void main() => runApp(MaterialApp(
          debugShowCheckedModeBanner: false,
          home: ContactsPage(),
        ));
    
    class ContactsPage extends StatefulWidget {
      Widget appBarTitle = new Text("Contacts");
      Icon actionIcon = new Icon(Icons.search);
      final List<Contact> contacts = [
        Contact(
          fullName: 'Ganesh',
        ),
        Contact(
          fullName: 'Dinesh',
        ),
        Contact(
          fullName: 'Somesh',
        ),
        Contact(
          fullName: 'Ramesh',
        )
      ];
    
      @override
      State<StatefulWidget> createState() {
        return new _ContactPage(contacts);
      }
    }
    
    class _ContactPage extends State<ContactsPage> {
      List<Contact> filteredContacts;
    
      _ContactPage(this.filteredContacts);
    
      @override
      Widget build(BuildContext context) {
        return new MaterialApp(
          home: new Scaffold(
              appBar: new AppBar(
                title: widget.appBarTitle,
                actions: <Widget>[
                  new IconButton(
                    icon: widget.actionIcon,
                    onPressed: () {
                      setState(() {
                        if (widget.actionIcon.icon == Icons.search) {
                          widget.actionIcon = new Icon(Icons.close);
                          widget.appBarTitle = new TextField(
                            style: new TextStyle(
                              color: Colors.white,
                            ),
                            decoration: new InputDecoration(
                                prefixIcon:
                                    new Icon(Icons.search, color: Colors.white),
                                hintText: "Search...",
                                hintStyle: new TextStyle(color: Colors.white)),
                            onChanged: (value) {
                              filterContacts(value);
                            },
                          );
                        } else {
                          widget.actionIcon =
                              new Icon(Icons.search); //reset to initial state
                          widget.appBarTitle = new Text("Contacts");
                          filteredContacts = widget.contacts;
                        }
                      });
                    },
                  ),
                ],
              ),
              body: new ContactList(filteredContacts)),
          // replace the body with your contacts list view
        );
      }
    
      void filterContacts(String value) {
        var temp = widget.contacts.where((contact) {
          return contact.fullName.contains(value);
        }).toList();
        setState(() {
          filteredContacts = temp;
        });
      }
    }
    
    class ContactList extends StatelessWidget {
      final List<Contact> _contacts;
    
      ContactList(this._contacts);
    
      @override
      Widget build(BuildContext context) {
        return ListView.builder(
            itemBuilder: (context, index) {
              return new _ContactListItem(this._contacts[index]);
            },
            itemCount: this._contacts.length,
            padding: new EdgeInsets.symmetric(vertical: 8.0));
      }
    }
    
    class _ContactListItem extends ListTile {
      _ContactListItem(Contact contact)
          : super(
                title: new Text(contact.fullName),
                leading: new CircleAvatar(child: new Text(contact.fullName[0])));
    }
    

    Refer the screen shots:

    0 讨论(0)
提交回复
热议问题