Flutter 如何在Dart 2-颤振中限制TextEditingController侦听器事件

Flutter 如何在Dart 2-颤振中限制TextEditingController侦听器事件,flutter,dart-2,Flutter,Dart 2,我想知道是否有一些内置的功能,我可能会错过。我试图找到类似的东西,但我找到的唯一一个包()不再支持Dart 2 这是我想控制的部分代码 final TextEditingController _filter = new TextEditingController(); String _searchText = ""; _filter.addListener(() { if (_filter.text.isEmpty) { setState(() {

我想知道是否有一些内置的功能,我可能会错过。我试图找到类似的东西,但我找到的唯一一个包()不再支持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);
    });

有什么想法吗?

我会使用
rxdart

在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);
});
final TextEditingController_filter=new TextEditingController();
字符串_searchText=“”;
最终_textUpdates=StreamController();
_filter.addListener(()=>_textUpdates.add(_filter.text));
可观察(_textUpdates.stream)
.节气门(恒定持续时间(毫秒:700))
.forEach(s){
如果(s.isEmpty){
设置状态(){
_searchText=“”;
});
}否则{
设置状态(){
_searchText=s;
});
}
//此操作被激发的次数太多:(
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);
});
final TextEditingController_filter=new TextEditingController();
字符串_searchText=“”;
最终_textUpdates=StreamController();
_filter.addListener(()=>_textUpdates.add(_filter.text));
_textUpdates.stream
.节气门(恒定持续时间(毫秒:700))
.forEach(s){
如果(s.isEmpty){
设置状态(){
_searchText=“”;
});
}否则{
设置状态(){
_searchText=s;
});
}
//此操作被激发的次数太多:(
onUpdateSearchTerm(_searchText);
});
另见


工作起来很有魅力@@Günter Zöchbauer。非常感谢。但是,只有一个更正行_filter.addListener(()=>_textUpdates(_filter.text));抱怨它不是一个函数。然后我改为_filter.addListener(()=>_textUpdates.add(_filter.text));我建议您更新答案。除此之外,一切都很好!谢谢-修复了。在没有IDE的情况下编写代码总是有点困难:d