简体   繁体   中英

How can I search in CheckboxListTile in Flutter?

I am using a CheckboxListTile structure. But since I will have more than 100 Checkboxes in the future, I want to search them, but I could not find any source.

It is easy to search on normal lists on the Internet, but I have never searched an array of type Map<String, bool> List before.

What I want to do is to sort the key elements of the list when I type their names into a small textbox.

What path should I follow. Thanks.

在此处输入图像描述

Map<String, bool> List = {
"Kullanıcı 01": false,
"Kullanıcı 02": false,
"Kullanıcı 03": false,
"Kullanıcı 04": false,
"Kullanıcı 05": false,
"Kullanıcı 06": false,
"Kullanıcı 07": false,};

 child: StatefulBuilder(
                                  builder: (context, _setState) => Column(
                                    children: [
                                   
                                      Align(
                                        alignment: Alignment.topLeft,
                                        child: CheckboxListTile(
                                          onChanged: (bool? value2) {
                                            _setState(() {
                                              tumunusecCheckbox = value2!;
                                              if (tumunusecCheckbox == true) {
                                                List.forEach((key, value) {
                                                  _setState(() {
                                                    List.update(
                                                        key, (value) => true);
                                                  });
                                                });
                                              } else {
                                                List.forEach((key, value) {
                                                  _setState(() {
                                                    List.update(key,
                                                        (value) => false);
                                                  });
                                                });
                                              }
                                            });
                                          },
                                          title: Text(
                                            "Tümünü seç",
                                            style: TextStyle(
                                                color: Colors.black87,
                                                fontWeight: FontWeight.bold),
                                          ),
  
                                          value:
                                              tumunusecCheckbox, // foreground
                                        ),
                                      ),
                                      Expanded(
                                        child: ListView(
                                          children: List.keys.map<Widget>((
                                            String key,
                                          ) {
                                            return CheckboxListTile(
                                                value: List[key],
                                                title: Text(
                                                  key,
                                                  style: TextStyle(
                                                      color:
                                                          it_tool_main_blue,
                                                      fontSize: 17.0,
                                                      fontFamily:
                                                          'sans-bold.ttf',
                                                      fontWeight:
                                                          FontWeight.bold),
                                                ),
                                                activeColor:
                                                    it_tool_main_blue,
                                                checkColor: Colors.white,
                                                onChanged: (bool? value) {
                                                  _setState(() {
                                                    List[key] = value!;
                                                    if (value == false) {
                                                   
                                                    } else {
                                                     
                                                    }
                                                  });
                                                });
                                          }).toList(),
                                        ),
                                      ),
                                    ],
                                  ),
                                ),

Even though you said "What I want to do is to sort the key elements of the list when I type their names into a small textbox.", the rest of your question suggests that you want to select matching items from a list.

Presuming this is what you want, pseudo code for a method that returns a map of items that match the key might look like this.

You call this method with the original Map and a string that you want to match to, and the method returns a list of matching items.

Match is whatever you define as a match: partial string match, first letters, soundex, regex. That part is up to you.

Map<String, String> findMatches(Map<String, String> myMap, String matchToThis) {
  Map<String, String> foundItems = {};
  myMap.forEach((key, value) {
     if (KeyMatches) {
       foundItems[key] = value;
     }
  }
  return foundItems
}

PS:

You've created a variable named 'List' that is a map. You might want to pick a better name for this variable. That threw me off for a second.

Map<String, bool> List = {

Thanks for help but, i dont know how can i use this function. This is my try.

 TextFormField(
                          controller: _controller,
                          onChanged: findMatches(myMap, _controller.text),
                        ),




Map<String, String> findMatches(Map<String, bool> myMap, String matchToThis) {
Map<String, bool> foundItems = {};
myMap.forEach(
  (key, value) {
    if (KeyMatches) {
      print("lel");
      foundItems[key] = value;
    }
  },
);
 return foundItems;}}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM