按退格键时,Flutter“.Where”过滤器不会更新

Flutter ".Where" Filter Doesn't Update When Pressing Backspace

我目前正在尝试构建一个搜索 window 以过滤国家/地区。

TextFormField(
                      onChanged: (value) {
                        setState(() {
                          _countrySearchQuery = value;
                          _countryCodes = _countryCodes.where((element) =>
                              element.name.toLowerCase().contains(_countrySearchQuery.toLowerCase())
                          ).toList();
                        });
                        print(_countrySearchQuery);
                        print(_countryCodes);
                        });
                      },
                    ),

它似乎工作正常,直到我按下退格键(随着搜索变得更广泛,它应该显示更多列表值)但它似乎继续添加到现有查询(进一步缩小搜索范围)而不重置它。

如果我输入英国的“kingdo” 然后按退格键到“king”它不会根据“king”更新它似乎仍然停留在“kingdo”上并继续附加到它直到列表returns什么都没有。

打印语句显示搜索查询返回的正是输入的内容,所以我不确定为什么会这样。

我更喜欢为结果创建不同的列表。


class TestCenter extends StatefulWidget {
  const TestCenter({Key? key}) : super(key: key);

  @override
  _TestCenterState createState() => _TestCenterState();
}

class _TestCenterState extends State<TestCenter> {
  String _countrySearchQuery = "";

  List<String> _countryCodes =
      List.generate(10, (index) => "$index${index * 2}");

  List<String> matches = [];

  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      child: Column(
        children: [
          Text("data: ${_countryCodes.toString()}"),
          TextFormField(
            onChanged: (value) {
              setState(
                () {
                  _countrySearchQuery = value;
                  matches = _countryCodes
                      .where((element) => element
                          .toLowerCase()
                          .contains(_countrySearchQuery.toLowerCase()))
                      .toList();
                },
              );

              print("countryCode:  $_countryCodes");
              print("match: $matches");
            },
          ),
          Text(_countrySearchQuery.length > 0
              ? matches.length > 0
                  ? matches.toString()
                  : "could not found"
              : "start typing")
        ],
      ),
    );
  }
}