如何在Dart 2中限制TextEditingController侦听器事件 - Flutter
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Dart 2中限制TextEditingController侦听器事件 - Flutter相关的知识,希望对你有一定的参考价值。
我想知道是否有一些我可能错过的内置功能。我试图找到类似的东西,但我发现的唯一包装(throttle)不再支持Dart 2
这是我想要限制的代码部分
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);
});
有什么想法吗?
答案
我会使用来自throttle
的debounce
或rxdart
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);
});
也可以看看
- https://pub.dartlang.org/packages/rxdart
- https://pub.dartlang.org/documentation/rxdart/latest/rx/Observable/throttle.html
- https://pub.dartlang.org/documentation/rxdart/latest/rx/Observable/debounce.html
以上是关于如何在Dart 2中限制TextEditingController侦听器事件 - Flutter的主要内容,如果未能解决你的问题,请参考以下文章