如何使用Dart ChangeNotifier类?

时间:2013-12-25 15:20:03

标签: dart

我正在探索Dart的观察库中的ChangeNotifier类,以便在命令行应用程序中使用。但是,我有两个问题。

  1. 在每次更新记录时,会逐渐重复List<ChangeRecord>个对象中报告的更改次数。见图:

    enter image description here

  2. ChangeRecord不允许仅检索新值。因此,我正在尝试使用MapChangeRecord。但是,我不知道如何使用它。

  3. 这是我的示例代码供参考:

    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 个答案:

答案 0 :(得分:3)

每次执行此代码

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

它应该按预期工作