How does flutter_mobx tracks dependencies in Observer widget?

14 Views Asked by At

I have created small reactive widgets using Stream and ValueListenableBuilder. As far as I know, those widgets receive a Listenable or ChangeNotifier as a parameter. Like:

StreamBuilder<int>(
  stream: _streamController.stream,
  builder: (context, snapshot) {
    if (snapshot.hasData) {
      return Center(
        child: Text('Stream Data: ${snapshot.data}'),
      );
    } else {
      return Center(
        child: Text('Waiting for data...'),
      );
    }
  },
);

ValueListenableBuilder<int>(
  valueListenable: _valueNotifier,
  builder: (context, value, child) {
    print('Value: $value');
    return Container();
  },
);

So it's understandable for me that they rebuild whenever they are notified by the Listenable.

But in flutter_mobx, Observer widget does not need any explicit assignment of Observable. It automatically tracks from its builder method. Like:

Observer(
  builder: (_) {
    return Text('Counter: ${counter.value}');
  },
);

I cannot figure out how is that even possible? since we know that reflections are disabled in Flutter. Can anyone please explain?

Also, small code example of how we can implement our own dependency tracking systems would be helpful.

0

There are 0 best solutions below