Как использовать класс Dart ChangeNotifier?
Я изучаю класс ChangeNotifier в библиотеке наблюдения Dart для использования в приложении командной строки. Но у меня есть две проблемы.
Количество зарегистрированных изменений в
List<ChangeRecord>
Объект постепенно увеличивается при каждом обновлении записи. Смотрите изображение: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));
}
должно работать как положено