Как использовать класс Dart ChangeNotifier?

Я изучаю класс ChangeNotifier в библиотеке наблюдения Dart для использования в приложении командной строки. Но у меня есть две проблемы.

  1. Количество зарегистрированных изменений в List<ChangeRecord> Объект постепенно увеличивается при каждом обновлении записи. Смотрите изображение:

  2. ChangeRecord не позволяет получать только новые значения. Таким образом, я пытаюсь использовать MapChangeRecord вместо этого. Но я не знаю, как его использовать.

Это мой пример кода для справки:

import 'dart:io';
import 'dart:async';
import 'dart:convert';
import 'package:observe/observe.dart';

class Notifiable extends Object with ChangeNotifier {
  String _input = ''; 
  @reflectable get input => _input;
  @reflectable set input(val) {
    _input = notifyPropertyChange(#input, _input, val);
  }

  void change(String text) {
    input = text;
    this.changes.listen((List<ChangeRecord> record) => print(record.last));
  }
}

void main() {
  Notifiable notifiable = new Notifiable();
  Stream stdinStream = stdin;
  stdinStream
    .transform(new Utf8Decoder())
      .listen((e) => notifiable.change(e));
}

1 ответ

Решение

Каждый раз, когда этот код выполняется

stdinStream
    .transform(new Utf8Decoder())
      .listen((e) => notifiable.change(e));

Вы добавляете новую подписку в notifiable.change(e)

Если вы измените это как

import 'dart:io';
import 'dart:async';
import 'dart:convert';
import 'package:observe/observe.dart';

class Notifiable extends Object with ChangeNotifier {
  String _input = '';
  @reflectable get input => _input;
  @reflectable set input(val) {
    _input = notifyPropertyChange(#input, _input, val);
  }

  Notifiable() {
    this.changes.listen((List<ChangeRecord> record) => print(record.last));
  }

  void change(String text) {
    input = text;
  }
}

void main() {
  Notifiable notifiable = new Notifiable();
  Stream stdinStream = stdin;
  stdinStream
    .transform(new Utf8Decoder())
      .listen((e) => notifiable.change(e));
}

должно работать как положено

Другие вопросы по тегам