按退格键时,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")
],
),
);
}
}
我目前正在尝试构建一个搜索 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")
],
),
);
}
}