gpt4 book ai didi

flutter - 如何限制 Dart 2 中的 TextEditingController 监听器事件 - Flutter

转载 作者:IT王子 更新时间:2023-10-29 06:58:51 25 4
gpt4 key购买 nike

我想知道是否有一些我可能错过的内置功能。我试图找到类似的东西,但 Dart 2 不再支持我找到的唯一包 ( throttle)

这是我想限制的代码部分

final TextEditingController _filter = new TextEditingController();
String _searchText = "";

_filter.addListener(() {
if (_filter.text.isEmpty) {
setState(() {
_searchText = "";
});
} else {
setState(() {
_searchText = _filter.text;
});
}
//This action is being fired TOO many times :(
widget.onUpdateSearchTerm(_searchText);
});

有什么想法吗?

最佳答案

我会使用 rxdartthrottledebounce

在 rxdart 0.22.x 上使用 Observable

final TextEditingController _filter = new TextEditingController();
String _searchText = "";
final _textUpdates = StreamController<String>();

_filter.addListener(() => _textUpdates.add(_filter.text));

Observable(_textUpdates.stream)
.throttle(const Duration(milliseconds: 700))
.forEach((s) {
if (s.isEmpty) {
setState(() {
_searchText = "";
});
} else {
setState(() {
_searchText = s;
});
}
//This action is being fired TOO many times :(
widget.onUpdateSearchTerm(_searchText);
});

在 rxdart 0.23.x 及以后

final TextEditingController _filter = new TextEditingController();
String _searchText = "";
final _textUpdates = StreamController<String>();

_filter.addListener(() => _textUpdates.add(_filter.text));

_textUpdates.stream
.throttle(const Duration(milliseconds: 700))
.forEach((s) {
if (s.isEmpty) {
setState(() {
_searchText = "";
});
} else {
setState(() {
_searchText = s;
});
}
//This action is being fired TOO many times :(
widget.onUpdateSearchTerm(_searchText);
});

另见

关于flutter - 如何限制 Dart 2 中的 TextEditingController 监听器事件 - Flutter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54315882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com