Как регулировать события слушателя TextEditingController в Dart 2 - Flutter - PullRequest
0 голосов
/ 22 января 2019

Мне интересно, есть ли какая-то встроенная функция, которую я мог бы пропустить. Я пытался найти что-то похожее, но единственный найденный пакет ( 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);
    });

Есть идеи на этот счет?

1 Ответ

0 голосов
/ 23 января 2019

Я бы использовал 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);
});

Смотри также

...