如何在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);
    });

有什么想法吗?

答案

我会使用来自throttledebouncerxdart

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);
});

也可以看看

以上是关于如何在Dart 2中限制TextEditingController侦听器事件 - Flutter的主要内容,如果未能解决你的问题,请参考以下文章

在 Dart / Flutter 的 Firestore 查询中添加限制时,不会调用 Stream Listen

如何在 Dart 2 中使用材质角镖组件的排版?

如何在Dart中将列表转换为地图

如何在 Dart 中合并两个列表?

如何让 Dart 程序“休眠”1.6 秒

dart 中的节流函数执行