Соблюдайте упаковку из полимерного дротика

Я пытаюсь использовать пакет наблюдения без необходимости иметь аннотации в моей модели и только путем вызова notifyPropertyChange в установщиках, поэтому для проверки я сделал следующий тест

import 'package:observe/observe.dart';
import 'dart:async';
import 'dart:math';
void main() {

  var dummyWatchingModel = new DummyWatchingModel();
  new Timer.periodic(new Duration(milliseconds:1000), (_){
           //calls a function that set a random value to the property in the observable model
           dummyWatchingModel.setModelProps();
      });
}

class Model extends Observable{
  int _x;
  Model(this._x);

  int get x=> _x;
  void set x(int value){
    _x = notifyPropertyChange(#_x, _x, value);
  }
}

class DummyWatchingModel{
  Model model = new Model(1); 
  final rng = new Random(); 
  anotherModel(){

    //watch for changes in model instance properties
    this.model.changes.listen((List<ChangeRecord> records) {
      for(ChangeRecord change in records){
        print(change.toString());
      }
    });
  }

  //the callback for the timer to assign a random value model.x
  setModelProps(){
    model.x = rng.nextInt(100);
    print('called...');
  }
}

я изменяю значение свойства в экземпляре модели, используя установщик, который повышает notifyPropertyChange но он никогда не прислушивается к изменениям, есть идеи, почему?

1 ответ

Решение

Я думаю, что вы хотите использовать ChangeNotifier вместо Observable,

Я не уверен насчет notifyPropertyChange но с Observable вам обычно нужно позвонить dirtyCheck получать уведомления об изменениях.

Некоторое время назад я сделал небольшой пример, чтобы узнать, как эти два работают:

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 + " new");
  }

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

class MyObservable extends Observable {
  @observable
  String counter = '';

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

void main() {
  var x = new MyObservable();
  x.counter = "hallo";
  Observable.dirtyCheck();

  Notifiable notifiable = new Notifiable();
  notifiable.input = 'xxx';
  notifiable.input = 'yyy';
}
Другие вопросы по тегам