Giter VIP home page Giter VIP logo

mobx.dart's Introduction

Language: English | PortuguΓͺs | Chinese

mobx.dart



pub package pub package pub package

Build Status Publish Coverage Status Netlify Status

Join the chat at https://discord.gg/dNHY52k

MobX for the Dart language.

Supercharge the state-management in your Dart apps with Transparent Functional Reactive Programming (TFRP)

We are looking for maintainers. Reach out on Discord or GitHub Issues!

Introduction

MobX is a state-management library that makes it simple to connect the reactive data of your application with the UI. This wiring is completely automatic and feels very natural. As the application-developer, you focus purely on what reactive-data needs to be consumed in the UI (and elsewhere) without worrying about keeping the two in sync.

It's not really magic but it does have some smarts around what is being consumed (observables) and where (reactions), and automatically tracks it for you. When the observables change, all reactions are re-run. What's interesting is that these reactions can be anything from a simple console log, a network call to re-rendering the UI.

MobX has been a very effective library for the JavaScript apps and this port to the Dart language aims to bring the same levels of productivity.

Sponsors

We are very thankful to our sponsors to make us part of their Open Source Software (OSS) program. [Become a sponsor]

Past Sponsors

Get Started

Follow along with the Getting Started guide on the MobX.dart Website.

Go deep

For a deeper coverage of MobX, do check out MobX Quick Start Guide. Although the book uses the JavaScript version of MobX, the concepts are 100% applicable to Dart and Flutter.

Core Concepts

MobX Triad

At the heart of MobX are three important concepts: Observables, Actions and Reactions.

Observables

Observables represent the reactive-state of your application. They can be simple scalars to complex object trees. By defining the state of the application as a tree of observables, you can expose a reactive-state-tree that the UI (or other observers in the app) consume.

A simple reactive-counter is represented by the following observable:

import 'package:mobx/mobx.dart';

final counter = Observable(0);

More complex observables, such as classes, can be created as well.

class Counter {
  Counter() {
    increment = Action(_increment);
  }

  final _value = Observable(0);
  int get value => _value.value;

  set value(int newValue) => _value.value = newValue;
  Action increment;

  void _increment() {
    _value.value++;
  }
}

On first sight, this does look like some boilerplate code which can quickly go out of hand! This is why we added mobx_codegen to the mix that allows you to replace the above code with the following:

import 'package:mobx/mobx.dart';

part 'counter.g.dart';

class Counter = CounterBase with _$Counter;

abstract class CounterBase with Store {
  @observable
  int value = 0;

  @action
  void increment() {
    value++;
  }
}

Note the use of annotations to mark the observable properties of the class. Yes, there is some header boilerplate here but its fixed for any class. As you build more complex classes this boilerplate will fade away and you will mostly focus on the code within the braces.

Note: Annotations are available via the mobx_codegen package.

Readonly

If you want to reduce your code you may want to swap @observable for @readonly. For every private variable it generates a public getter such that the client of your store can't change its value. Read more about it here

Computed Observables

What can be derived, should be derived. Automatically.

The state of your application consists of core-state and derived-state. The core-state is state inherent to the domain you are dealing with. For example, if you have a Contact entity, the firstName and lastName form the core-state of Contact. However, fullName is derived-state, obtained by combining firstName and lastName.

Such derived state, that depends on core-state or other derived-state is called a Computed Observable. It is automatically kept in sync when its underlying observables change.

State in MobX = Core-State + Derived-State

import 'package:mobx/mobx.dart';

part 'contact.g.dart';

class Contact = ContactBase with _$Contact;

abstract class ContactBase with Store {
  @observable
  String firstName;

  @observable
  String lastName;

  @computed
  String get fullName => '$firstName, $lastName';

}

In the example above fullName is automatically kept in sync if either firstName and/or lastName changes.

Actions

Actions are how you mutate the observables. Rather than mutating them directly, actions add a semantic meaning to the mutations. For example, instead of just doing value++, firing an increment() action carries more meaning. Besides, actions also batch up all the notifications and ensure the changes are notified only after they complete. Thus the observers are notified only upon the atomic completion of the action.

Note that actions can also be nested, in which case the notifications go out when the top-most action has completed.

final counter = Observable(0);

final increment = Action((){
  counter.value++;
});

When creating actions inside a class, you can take advantage of annotations!

import 'package:mobx/mobx.dart';

part 'counter.g.dart';

class Counter = CounterBase with _$Counter;

abstract class CounterBase with Store {
  @observable
  int value = 0;

  @action
  void increment() {
    value++;
  }
}

Asynchronous Actions

MobX.dart handles asynchronous actions automatically and does not require wrapping the code with runInAction.

@observable
String stuff = '';

@observable
loading = false;

@action
Future<void> loadStuff() async {
  loading = true; //This notifies observers
  stuff = await fetchStuff();
  loading = false; //This also notifies observers
}

Reactions

Reactions complete the MobX triad of observables, actions and reactions. They are the observers of the reactive-system and get notified whenever an observable they track is changed. Reactions come in few flavors as listed below. All of them return a ReactionDisposer, a function that can be called to dispose the reaction.

One striking feature of reactions is that they automatically track all the observables without any explicit wiring. The act of reading an observable within a reaction is enough to track it!

The code you write with MobX appears to be literally ceremony-free!

ReactionDisposer autorun(Function(Reaction) fn)

Runs the reaction immediately and also on any change in the observables used inside fn.

import 'package:mobx/mobx.dart';

final greeting = Observable('Hello World');

final dispose = autorun((_){
  print(greeting.value);
});

greeting.value = 'Hello MobX';

// Done with the autorun()
dispose();


// Prints:
// Hello World
// Hello MobX

ReactionDisposer reaction<T>(T Function(Reaction) predicate, void Function(T) effect)

Monitors the observables used inside the predicate() function and runs the effect() when the predicate returns a different value. Only the observables inside predicate() are tracked.

import 'package:mobx/mobx.dart';

final greeting = Observable('Hello World');

final dispose = reaction((_) => greeting.value, (msg) => print(msg));

greeting.value = 'Hello MobX'; // Cause a change

// Done with the reaction()
dispose();


// Prints:
// Hello MobX

ReactionDisposer when(bool Function(Reaction) predicate, void Function() effect)

Monitors the observables used inside predicate() and runs the effect() when it returns true. After the effect() is run, when automatically disposes itself. So you can think of when as a one-time reaction. You can also dispose when() pre-maturely.

import 'package:mobx/mobx.dart';

final greeting = Observable('Hello World');

final dispose = when((_) => greeting.value == 'Hello MobX', () => print('Someone greeted MobX'));

greeting.value = 'Hello MobX'; // Causes a change, runs effect and disposes


// Prints:
// Someone greeted MobX

Future<void> asyncWhen(bool Function(Reaction) predicate)

Similar to when but returns a Future, which is fulfilled when the predicate() returns true. This is a convenient way of waiting for the predicate() to turn true.

final completed = Observable(false);

void waitForCompletion() async {
  await asyncWhen(() => _completed.value == true);

  print('Completed');
}

Observer

One of the most visual reactions in the app is the UI. The Observer widget (which is part of the flutter_mobx package), provides a granular observer of the observables used in its builder function. Whenever these observables change, Observer rebuilds and renders.

Below is the Counter example in its entirety.

import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:mobx/mobx.dart';

part 'counter.g.dart';

class Counter = CounterBase with _$Counter;

abstract class CounterBase with Store {
  @observable
  int value = 0;

  @action
  void increment() {
    value++;
  }
}

class CounterExample extends StatefulWidget {
  const CounterExample({Key key}) : super(key: key);

  @override
  _CounterExampleState createState() => _CounterExampleState();
}

class _CounterExampleState extends State<CounterExample> {
  final _counter = Counter();

  @override
  Widget build(BuildContext context) => Scaffold(
        appBar: AppBar(
          title: const Text('Counter'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              const Text(
                'You have pushed the button this many times:',
              ),
              Observer(
                  builder: (_) => Text(
                        '${_counter.value}',
                        style: const TextStyle(fontSize: 20),
                      )),
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: _counter.increment,
          tooltip: 'Increment',
          child: const Icon(Icons.add),
        ),
      );
}

Contributing

If you have read up till here, then πŸŽ‰πŸŽ‰πŸŽ‰. There are couple of ways in which you can contribute to the growing community of MobX.dart.

  • Pick up any issue marked with "good first issue"
  • Propose any feature, enhancement
  • Report a bug
  • Fix a bug
  • Participate in a discussion and help in decision making
  • Write and improve some documentation. Documentation is super critical and its importance cannot be overstated!
  • Send in a Pull Request :-)
  • Chime in and Join the chat at https://discord.gg/dNHY52k

Contributors ✨

All Contributors

Thanks goes to these wonderful people (emoji key):

Pavan Podila
Pavan Podila

πŸ’» πŸ“– πŸ‘€
katis
katis

πŸ’» πŸ€” πŸ‘€ ⚠️
Scott Hyndman
Scott Hyndman

πŸ’» πŸ€” πŸ‘€ ⚠️
Michael Bui
Michael Bui

πŸ’» πŸ“– πŸ‘€ πŸ’‘
Remi Rousselet
Remi Rousselet

πŸ’» πŸ“– πŸ‘€
adiaKhaitan
adiaKhaitan

πŸ“–
Jacob Moura
Jacob Moura

πŸ’» πŸ“– 🌍
Daniel Albuquerque
Daniel Albuquerque

🌍
Marco Scannadinari
Marco Scannadinari

πŸ“–
lsaudon
lsaudon

πŸ’» πŸ“–
Efthymis Sarmpanis
Efthymis Sarmpanis

πŸ’»
Giri Jeedigunta
Giri Jeedigunta

πŸ“– πŸ’‘
Hebri Ramnath Nayak
Hebri Ramnath Nayak

πŸ“–
Robert Brunhage
Robert Brunhage

πŸ“–
Brady Trainor
Brady Trainor

πŸ“–
Kushagra Saxena
Kushagra Saxena

πŸ“– πŸ’‘
Pedro Massango
Pedro Massango

🌍
Peter Czibik
Peter Czibik

πŸ’»
Luan Nico
Luan Nico

πŸ“–
Kobi
Kobi

πŸ’»
Ryan
Ryan

πŸ“–
Ivan Terekhin
Ivan Terekhin

πŸ’»
Yoav RofΓ©
Yoav RofΓ©

πŸ“–
Mateusz Wojtczak
Mateusz Wojtczak

πŸ“–
Timur Artikov
Timur Artikov

πŸ’»
Saurabh Sohoni
Saurabh Sohoni

πŸ“–
renanzdm
renanzdm

πŸ“–
Rachman Chavik
Rachman Chavik

πŸ’»
Nathan Cabasso
Nathan Cabasso

πŸ› πŸ’»
geisterfurz007
geisterfurz007

πŸ“– πŸ–‹
Romuald Barbe
Romuald Barbe

πŸ’»
Alexander Mazuruk
Alexander Mazuruk

πŸ’‘
Alberto Bonacina
Alberto Bonacina

πŸ“–
Roland Ibragimov
Roland Ibragimov

πŸ“–
zyzhao
zyzhao

πŸ“–
Xinhai Wang
Xinhai Wang

πŸ“–
Henry Mayer
Henry Mayer

πŸ’» ⚠️
Sergey
Sergey

πŸ’» ⚠️
Jason Rai
Jason Rai

πŸ“–
Joshua de Guzman
Joshua de Guzman

πŸ’‘
Jan Hertlein
Jan Hertlein

πŸ“–
Evo Stamatov
Evo Stamatov

πŸ’»
Davi Eduardo
Davi Eduardo

πŸ“–
Leonardo Custodio
Leonardo Custodio

πŸ’» πŸ“–
Prince Srivastava
Prince Srivastava

πŸ’‘ πŸ’»
Muhammad Muhajir
Muhammad Muhajir

πŸ“–
D
D

πŸ“–
David Martos
David Martos

πŸ’»
Issa Nimaga
Issa Nimaga

πŸ“–
AscΓͺnio
AscΓͺnio

πŸ’» πŸ“–
Alex Isaienko
Alex Isaienko

πŸ’»
Moritz Weber
Moritz Weber

πŸ’»
Carter Snook
Carter Snook

πŸ“–
Brian Robles
Brian Robles

πŸ’» ⚠️
harrypunk
harrypunk

πŸ“–
Ikko Ashimine
Ikko Ashimine

πŸ“–
amond
amond

πŸ’» ⚠️ πŸ‘€ πŸ“–
fzyzcjy
fzyzcjy

πŸ’» πŸ“– πŸ‘€
Vandad Nahavandipoor
Vandad Nahavandipoor

πŸ“–
Sergey Molchanovsky
Sergey Molchanovsky

πŸ’»
ko16a46
ko16a46

πŸ’»
Yatharth Chauhan
Yatharth Chauhan

πŸ“–
Parth Baraiya
Parth Baraiya

πŸ’» πŸ›
Altynbek Aidarbekov
Altynbek Aidarbekov

πŸ’»
CpedniyNikon
CpedniyNikon

πŸ“–

This project follows the all-contributors specification. Contributions of any kind welcome!

mobx.dart's People

Contributors

adiakhaitan avatar allcontributors[bot] avatar altynbek132 avatar amondnet avatar ascenio avatar brianrobles204 avatar chimon2000 avatar davidmartos96 avatar dependabot[bot] avatar dmalbuquerque avatar eltociear avatar fzyzcjy avatar geisterfurz007 avatar hawkbee1 avatar hmayer00 avatar jacobaraujo7 avatar jeuler avatar joshuadeguzman avatar k-paxian avatar katis avatar leonardocustodio avatar lsaudon avatar maikub avatar marcoms avatar pavanpodila avatar pedromassango avatar pr-1 avatar rrousselgit avatar shyndman avatar subzero911 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mobx.dart's Issues

How to properly share state between widgets without using props?

There are use-cases where we need to connect two different components that are not accessible directly. I looked into the examples but it only shows sharing MobX state via props.

As I have seen, we can use a global variable to share state between widgets but it is weird sharing state like that. Is there an ergonomic way and if there is, an example would be awesome. πŸ‘

Usage example with Firebase FireStore

The most common usecase for most of the developers will be using state management with a cloud database source.. like Firebase FireStore.

Any example of implementing such CRUD actions will be great. I am willing to use MobX for the same usecase.

[TodoExample] Tapping Todo list items causes MobXException

Hi,

tapping Todo list items in TodoExample currently causes MobXException "Side effects like changing state are not allowed at this point."
I rebuilt generated file todos.g.dart with flutter packages pub run build_runner build but the problem remains.

I/flutter (10412): ══║ EXCEPTION CAUGHT BY GESTURE β•žβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
I/flutter (10412): The following MobXException was thrown while handling a gesture:
I/flutter (10412): Instance of 'MobXException'
I/flutter (10412):
I/flutter (10412): When the exception was thrown, this was the stack:
I/flutter (10412): #0      ReactiveContext.checkIfStateModificationsAreAllowed (file:///C:/project/flutter/mobx.dart/mobx/lib/src/core/context.dart:145:11)
I/flutter (10412): #1      Todo.done= (file:///c:/project/flutter/mobx.dart/flutter_mobx/example/lib/todos/todos.g.dart:35:17)
I/flutter (10412): #2      TodoListView.build.<anonymous closure>.<anonymous closure>.<anonymous closure>.<anonymous closure> (file:///c:/project/flutter/mobx.dart/flutter_mobx/example/lib/todos/todo_widgets.dart:57:56)
I/flutter (10412): #3      CheckboxListTile.build.<anonymous closure> (package:flutter/src/material/checkbox_list_tile.dart:206:43)
I/flutter (10412): #4      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:513:14)
I/flutter (10412): #5      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:568:30)
I/flutter (10412): #6      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:120:24)
I/flutter (10412): #7      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
I/flutter (10412): #8      TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:204:7)
I/flutter (10412): #9      GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
I/flutter (10412): #10     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:184:20)
I/flutter (10412): #11     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)
I/flutter (10412): #12     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)
I/flutter (10412): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)
I/flutter (10412): #14     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)
I/flutter (10412): #18     _invoke1 (dart:ui/hooks.dart:203:10)
I/flutter (10412): #19     _dispatchPointerDataPacket (dart:ui/hooks.dart:138:5)
I/flutter (10412): (elided 3 frames from package dart:async)
I/flutter (10412):
I/flutter (10412): Handler: onTap
I/flutter (10412): Recognizer:
I/flutter (10412):   TapGestureRecognizer#43687(debugOwner: GestureDetector, state: ready, won arena, finalPosition:
I/flutter (10412):   Offset(129.1, 411.0), sent tap down)
I/flutter (10412): ════════════════════════════════════════════════════════════════════════════════════════════════════

What's remaining for a 0.1 release?

I think feature wise, it's looking solid. Curious if there is anything sorely pending for a 0.1 release. At this point I see only the following:

  • Finalize features for 0.1 and harden them with more tests
  • Update Readme
  • Update the website with API docs and guidance for building larger apps
  • Add few more examples
  • Anything else...

What say @katis, @rrousselGit ?

Move to monorepo

This will house various packages and make it easy to maintain:

Core

  • mobx.dart (primary project)
  • flutter_mobx (flutter bindings)
  • mobx_generator (will contain code generator. Name is not final)
  • flutter_mobx_hooks (hooks driven state management)
  • website (public facing website, possibly hosted on github.io.)

Experimental

  • mobx_observatory (experimental tool for visualizing the internals of MobX as it runs an app. This will be possible if we run a tiny web-server with web-socket that posts messages when various events occur inside MobX. It will also expose a localhost url that can be opened in Chrome to see the visualization. The visualization itself can be built with React πŸ€“. Think of this as the Observatory for MobX )

Reduce the use of global state [Suggestion]

Currently the ctx global variable is used all around the codebase, which follows the design of the JS version.

To make testing easier and to make the code more "Darty", maybe the ReactiveContext should be passed as a parameter to the classes that use it. Only builder functions/factories would access the global context.

Could also look into using Zone specific data for the context. Zone is kinda like ThreadLocal in Java. Might also help in making testing tools etc. in the future.

Push for 100% Code coverage

Few areas are a little tricky to test:

  • Reaction with delays
  • Can the suspend() method be removed from Reaction or done differently
  • Check for cycles in computed

@katis, curious if you have ideas to tackle this

Package organization

Currently the repository deviates somewhat from the Pub package layout conventions (https://www.dartlang.org/tools/pub/package-layout#implementation-files).

The lib/src/api files should be in lib/, as those seem to be public files, lib/src/core should maybe be in lib/src/ because they seem to be mostly private details.

Also, Dart's visibility rules are a bit different from other languages I've used before, since "private" means "private to the module". This means that a lot of code has to be in the same file if the classes need to use private methods from other classes. As an example, Flutters base widgets are in a single file.

Flutter API

Last night I thought I'd try to use Mobx with Flutter and created a simple widget based on the design of mobx-react and Flutter's ValueListenableBuilder:

import 'package:flutter/widgets.dart';
import 'package:mobx/mobx.dart';

void noOp() {}

class Observer extends StatefulWidget {
  const Observer({Key key, @required this.builder}) : super(key: key);

  final Widget Function(BuildContext) builder;

  @override
  State<StatefulWidget> createState() => _ObserverState();
}

class _ObserverState extends State<Observer> {
  bool _isBuildPending = false;

  Reaction _buildReaction;

  @override
  void initState() {
    super.initState();

    _buildReaction = Reaction(mobxContext, () {
      if (_isBuildPending) {
        return;
      }

      _isBuildPending = true;
      if (!mounted) {
        return;
      }

      setState(noOp);
    });
  }

  @override
  Widget build(BuildContext context) {
    _isBuildPending = false;
    Widget result;
    _buildReaction.track(() {
      result = widget.builder(context);
    });
    return result;
  }
}

usage:

class Greeter extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _GreeterState();
}

class _GreeterState extends State<Greeter> {
  final name = observable('Jane');

  @override
  Widget build(BuildContext context) => Observer(builder: (context) {
    return Text('Hello, ${name.value}');
  });
}

It does seem to work and could be a starting point for the flutter_mobx API. Probably the life cycle of widgets will bring all kinds of problems like in mobx-react.

Multiple store files causes codegen to fail

I've got a new app that is essentially almost identical to the Todos app, but instead (with Activity instead of Todo, and ActivityList instead of TodoList). The key difference is that I've split out Activity into it's own activity.dart, so I have two store .dart files (and should get corresponding .g.dart files). And in fact, @pavanpodila tried this and experienced the same issues. His split of it for the Todo app is here: https://github.com/mobxjs/mobx.dart/tree/master/flutter_mobx/example.

The problem is, when I run the code gen (i.e. flutter packages pub run build_runner build), it fails. If I combine the two files (putting the activity.dart code back into activity_list.dart), codegen runs with no errors. Also, it just fails on the activity_list.dart, it successfully runs for activity.dart (producing activity.g.dart).

I'm on MacBook Pro, macOS 10.14.2, with latest Flutter (1.0.0) and latest mobx (0.0.36) and flutter_mobx (0.0.10), and build_runner 1.1.3 (mobx wont' let me use a newer one, and this might be something of interest as I saw another thread showing this same "Cannot compute LIBRARY_ELEMENT" error, saying the analyzer was having trouble with some newer syntax? My repo isn't public, but let me know if I can provide any other info.

Here's the output with errors (sorry it's so long, but I didn't want to remove anything in case that helps shed light on it):

➜ flutter packages pub run build_runner build

[INFO] Generating build script...
[INFO] Generating build script completed, took 263ms

[INFO] Initializing inputs
[INFO] Reading cached asset graph...
[INFO] Reading cached asset graph completed, took 116ms

[INFO] Checking for updates since last build...
[INFO] Checking for updates since last build completed, took 671ms

[INFO] Running build...
[SEVERE] mobx_codegen|mobx_generator on lib/stores/activity_list.dart:

AnalysisException: Cannot compute LIBRARY_ELEMENT for Instance of 'AssetBasedSource'
Caused by Unexpected exception while performing ResolveUnitTypeNamesTask for source myapp|lib/stores/activity_list.dart
#0      AnalysisTask._safelyPerform (package:analyzer/src/task/api/model.dart:353:7)
#1      AnalysisTask.perform (package:analyzer/src/task/api/model.dart:240:7)
#2      AnalysisDriver.performWorkItem (package:analyzer/src/task/driver.dart:285:10)
#3      AnalysisDriver.computeResult (package:analyzer/src/task/driver.dart:110:22)
#4      AnalysisContextImpl.computeResult (package:analyzer/src/context/context.dart:654:14)
#5      AnalysisContextImpl.computeLibraryElement (package:analyzer/src/context/context.dart:622:12)
#6      AnalyzerResolver.libraryFor (package:build_resolvers/src/resolver.dart:114:21)
<asynchronous suspension>
#7      PerActionResolver.libraryFor (package:build_resolvers/src/resolver.dart:65:17)
#8      _DelayedResolver.libraryFor (package:build/src/builder/build_step_impl.dart:192:25)
<asynchronous suspension>
#9      BuildStepImpl.inputLibrary (package:build/src/builder/build_step_impl.dart:37:21)
<asynchronous suspension>
#10     _Builder.build (package:source_gen/src/builder.dart:65:31)
<asynchronous suspension>
#11     runBuilder.buildForInput (package:build/src/generate/run_builder.dart:45:21)
<asynchronous suspension>
#12     MappedListIterable.elementAt (dart:_internal/iterable.dart:414:29)
#13     ListIterator.moveNext (dart:_internal/iterable.dart:343:26)
#14     Future.wait (dart:async/future.dart:392:26)
#15     runBuilder.<anonymous closure> (package:build/src/generate/run_builder.dart:51:36)
#16     _rootRun (dart:async/zone.dart:1124:13)
#17     _CustomZone.run (dart:async/zone.dart:1021:19)
#18     _runZoned (dart:async/zone.dart:1516:10)
#19     runZoned (dart:async/zone.dart:1500:12)
#20     scopeLogAsync (package:build/src/builder/logging.dart:22:3)
#21     runBuilder (package:build/src/generate/run_builder.dart:51:9)
<asynchronous suspension>
#22     _SingleBuild._runForInput.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:455:19)
#23     _NoOpBuilderActionTracker.trackStage (package:build_runner_core/src/generate/performance_tracker.dart:303:15)
#24     _SingleBuild._runForInput.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:453:23)
<asynchronous suspension>
#25     NoOpTimeTracker.track (package:timing/src/timing.dart:222:44)
#26     _SingleBuild._runForInput.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:412:22)
#27     Pool.withResource (package:pool/pool.dart:127:28)
<asynchronous suspension>
#28     _SingleBuild._runForInput (package:build_runner_core/src/generate/build_impl.dart:408:17)
#29     _SingleBuild._runBuilder.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:358:38)
#30     MappedIterator.moveNext (dart:_internal/iterable.dart:392:18)
#31     Future.wait (dart:async/future.dart:392:26)
#32     _SingleBuild._runBuilder (package:build_runner_core/src/generate/build_impl.dart:357:36)
#33     _AsyncAwaitCompleter.start (dart:async/runtime/libasync_patch.dart:49:6)
#34     _SingleBuild._runBuilder (package:build_runner_core/src/generate/build_impl.dart:355:40)
#35     _SingleBuild._runPhases.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:304:20)
#36     _asyncThenWrapperHelper.<anonymous closure> (dart:async/runtime/libasync_patch.dart:77:64)
#37     _rootRunUnary (dart:async/zone.dart:1132:38)
#38     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#39     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#40     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#41     Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#42     Future._complete (dart:async/future_impl.dart:476:7)
#43     _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
#44     _AsyncAwaitCompleter.complete (dart:async/runtime/libasync_patch.dart:28:18)
#45     _completeOnAsyncReturn (dart:async/runtime/libasync_patch.dart:295:13)
#46     _SingleBuild._matchingPrimaryInputs (package:build_runner_core/src/generate/build_impl.dart)
#47     _asyncThenWrapperHelper.<anonymous closure> (dart:async/runtime/libasync_patch.dart:77:64)
#48     _rootRunUnary (dart:async/zone.dart:1132:38)
#49     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#50     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#51     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#52     Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#53     Future._completeWithValue (dart:async/future_impl.dart:486:5)
#54     Future.wait.<anonymous closure> (dart:async/future.dart:399:22)
#55     _rootRunUnary (dart:async/zone.dart:1132:38)
#56     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#57     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#58     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#59     Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#60     Future._complete (dart:async/future_impl.dart:476:7)
#61     _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
#62     _AsyncAwaitCompleter.complete.<anonymous closure> (dart:async/runtime/libasync_patch.dart:33:20)
#63     _rootRun (dart:async/zone.dart:1120:38)
#64     _CustomZone.run (dart:async/zone.dart:1021:19)
#65     _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#66     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
#67     _rootRun (dart:async/zone.dart:1124:13)
#68     _CustomZone.run (dart:async/zone.dart:1021:19)
#69     _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#70     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
#71     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#72     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#73     _runPendingImmediateCallback (dart:isolate/runtime/libisolate_patch.dart:115:13)
#74     _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:172:5)

Caused by NoSuchMethodError: The getter 'typeParameters' was called on null.
Receiver: null
Tried calling: typeParameters
#0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
#1      ClassElementImpl._computeMixinAppConstructors (package:analyzer/src/dart/element/element.dart:1100:50)
#2      ClassElementImpl.constructors (package:analyzer/src/dart/element/element.dart:518:30)
#3      ClassElementImpl.unnamedConstructor (package:analyzer/src/dart/element/element.dart:949:40)
#4      InterfaceTypeImpl.lookUpConstructor (package:analyzer/src/dart/element/type.dart:1881:36)
#5      AstRewriteVisitor.visitMethodInvocation (package:analyzer/src/generated/resolver.dart:92:18)
#6      MethodInvocationImpl.accept (package:analyzer/src/dart/ast/ast.dart:8679:49)
#7      VariableDeclarationImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:12442:19)
#8      UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#9      UnifyingAstVisitor.visitVariableDeclaration (package:analyzer/dart/ast/visitor.dart:3555:59)
#10     ScopedVisitor.visitVariableDeclaration (package:analyzer/src/generated/resolver.dart:6704:11)
#11     VariableDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:12436:49)
#12     NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:9174:20)
#13     VariableDeclarationListImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:12538:16)
#14     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#15     UnifyingAstVisitor.visitVariableDeclarationList (package:analyzer/dart/ast/visitor.dart:3559:7)
#16     VariableDeclarationListImpl.accept (package:analyzer/src/dart/ast/ast.dart:12532:15)
#17     VariableDeclarationStatementImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:12593:20)
#18     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#19     UnifyingAstVisitor.visitVariableDeclarationStatement (package:analyzer/dart/ast/visitor.dart:3563:7)
#20     VariableDeclarationStatementImpl.accept (package:analyzer/src/dart/ast/ast.dart:12589:15)
#21     NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:9174:20)
#22     BlockImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:1254:17)
#23     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#24     UnifyingAstVisitor.visitBlock (package:analyzer/dart/ast/visitor.dart:3199:31)
#25     ScopedVisitor.visitBlock (package:analyzer/src/generated/resolver.dart:6141:13)
#26     BlockImpl.accept (package:analyzer/src/dart/ast/ast.dart:1250:49)
#27     BlockFunctionBodyImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:1199:13)
#28     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#29     UnifyingAstVisitor.visitBlockFunctionBody (package:analyzer/dart/ast/visitor.dart:3202:55)
#30     ScopedVisitor.visitBlockFunctionBody (package:analyzer/src/generated/resolver.dart:6152:13)
#31     BlockFunctionBodyImpl.accept (package:analyzer/src/dart/ast/ast.dart:1195:49)
#32     MethodDeclarationImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:8541:12)
#33     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#34     UnifyingAstVisitor.visitMethodDeclaration (package:analyzer/dart/ast/visitor.dart:3422:55)
#35     ScopedVisitor.visitMethodDeclarationInScope (package:analyzer/src/generated/resolver.dart:6597:11)
#36     ScopedVisitor.visitMethodDeclaration (package:analyzer/src/generated/resolver.dart:6590:7)
#37     MethodDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:8532:49)
#38     NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:9174:20)
#39     ScopedVisitor.visitClassMembersInScope (package:analyzer/src/generated/resolver.dart:6218:18)
#40     ScopedVisitor.visitClassDeclaration (package:analyzer/src/generated/resolver.dart:6196:11)
#41     ClassDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:1765:49)
#42     NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:9174:20)
#43     CompilationUnitImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:2567:21)
#44     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#45     UnifyingAstVisitor.visitCompilationUnit (package:analyzer/dart/ast/visitor.dart:3235:51)
#46     CompilationUnitImpl.accept (package:analyzer/src/dart/ast/ast.dart:2560:49)
#47     ResolveUnitTypeNamesTask.internalPerform (package:analyzer/src/task/dart.dart:5133:10)
#48     AnalysisTask._safelyPerform (package:analyzer/src/task/api/model.dart:341:9)
#49     AnalysisTask.perform (package:analyzer/src/task/api/model.dart:240:7)
#50     AnalysisDriver.performWorkItem (package:analyzer/src/task/driver.dart:285:10)
#51     AnalysisDriver.computeResult (package:analyzer/src/task/driver.dart:110:22)
#52     AnalysisContextImpl.computeResult (package:analyzer/src/context/context.dart:654:14)
#53     AnalysisContextImpl.computeLibraryElement (package:analyzer/src/context/context.dart:622:12)
#54     AnalyzerResolver.libraryFor (package:build_resolvers/src/resolver.dart:114:21)
<asynchronous suspension>
#55     PerActionResolver.libraryFor (package:build_resolvers/src/resolver.dart:65:17)
#56     _DelayedResolver.libraryFor (package:build/src/builder/build_step_impl.dart:192:25)
<asynchronous suspension>
#57     BuildStepImpl.inputLibrary (package:build/src/builder/build_step_impl.dart:37:21)
<asynchronous suspension>
#58     _Builder.build (package:source_gen/src/builder.dart:65:31)
<asynchronous suspension>
#59     runBuilder.buildForInput (package:build/src/generate/run_builder.dart:45:21)
<asynchronous suspension>
#60     MappedListIterable.elementAt (dart:_internal/iterable.dart:414:29)
#61     ListIterator.moveNext (dart:_internal/iterable.dart:343:26)
#62     Future.wait (dart:async/future.dart:392:26)
#63     runBuilder.<anonymous closure> (package:build/src/generate/run_builder.dart:51:36)
#64     _rootRun (dart:async/zone.dart:1124:13)
#65     _CustomZone.run (dart:async/zone.dart:1021:19)
#66     _runZoned (dart:async/zone.dart:1516:10)
#67     runZoned (dart:async/zone.dart:1500:12)
#68     scopeLogAsync (package:build/src/builder/logging.dart:22:3)
#69     runBuilder (package:build/src/generate/run_builder.dart:51:9)
<asynchronous suspension>
#70     _SingleBuild._runForInput.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:455:19)
#71     _NoOpBuilderActionTracker.trackStage (package:build_runner_core/src/generate/performance_tracker.dart:303:15)
#72     _SingleBuild._runForInput.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:453:23)
<asynchronous suspension>
#73     NoOpTimeTracker.track (package:timing/src/timing.dart:222:44)
#74     _SingleBuild._runForInput.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:412:22)
#75     Pool.withResource (package:pool/pool.dart:127:28)
<asynchronous suspension>
#76     _SingleBuild._runForInput (package:build_runner_core/src/generate/build_impl.dart:408:17)
#77     _SingleBuild._runBuilder.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:358:38)
#78     MappedIterator.moveNext (dart:_internal/iterable.dart:392:18)
#79     Future.wait (dart:async/future.dart:392:26)
#80     _SingleBuild._runBuilder (package:build_runner_core/src/generate/build_impl.dart:357:36)
#81     _AsyncAwaitCompleter.start (dart:async/runtime/libasync_patch.dart:49:6)
#82     _SingleBuild._runBuilder (package:build_runner_core/src/generate/build_impl.dart:355:40)
#83     _SingleBuild._runPhases.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:304:20)
#84     _asyncThenWrapperHelper.<anonymous closure> (dart:async/runtime/libasync_patch.dart:77:64)
#85     _rootRunUnary (dart:async/zone.dart:1132:38)
#86     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#87     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#88     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#89     Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#90     Future._complete (dart:async/future_impl.dart:476:7)
#91     _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
#92     _AsyncAwaitCompleter.complete (dart:async/runtime/libasync_patch.dart:28:18)
#93     _completeOnAsyncReturn (dart:async/runtime/libasync_patch.dart:295:13)
#94     _SingleBuild._matchingPrimaryInputs (package:build_runner_core/src/generate/build_impl.dart)
#95     _asyncThenWrapperHelper.<anonymous closure> (dart:async/runtime/libasync_patch.dart:77:64)
#96     _rootRunUnary (dart:async/zone.dart:1132:38)
#97     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#98     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#99     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#100    Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#101    Future._completeWithValue (dart:async/future_impl.dart:486:5)
#102    Future.wait.<anonymous closure> (dart:async/future.dart:399:22)
#103    _rootRunUnary (dart:async/zone.dart:1132:38)
#104    _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#105    _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#106    Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#107    Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#108    Future._complete (dart:async/future_impl.dart:476:7)
#109    _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
#110    _AsyncAwaitCompleter.complete.<anonymous closure> (dart:async/runtime/libasync_patch.dart:33:20)
#111    _rootRun (dart:async/zone.dart:1120:38)
#112    _CustomZone.run (dart:async/zone.dart:1021:19)
#113    _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#114    _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
#115    _rootRun (dart:async/zone.dart:1124:13)
#116    _CustomZone.run (dart:async/zone.dart:1021:19)
#117    _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#118    _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
#119    _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#120    _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#121    _runPendingImmediateCallback (dart:isolate/runtime/libisolate_patch.dart:115:13)
#122    _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:172:5)


[SEVERE] mobx_codegen|mobx_generator on lib/main.dart:

AnalysisException: Cannot compute LIBRARY_ELEMENT for Instance of 'AssetBasedSource'
Caused by Unexpected exception while performing ResolveUnitTypeNamesTask for source myapp|lib/stores/activity_list.dart
#0      AnalysisTask._safelyPerform (package:analyzer/src/task/api/model.dart:353:7)
#1      AnalysisTask.perform (package:analyzer/src/task/api/model.dart:240:7)
#2      AnalysisDriver.performWorkItem (package:analyzer/src/task/driver.dart:285:10)
#3      AnalysisDriver.computeResult (package:analyzer/src/task/driver.dart:110:22)
#4      AnalysisContextImpl.computeResult (package:analyzer/src/context/context.dart:654:14)
#5      AnalysisContextImpl.computeLibraryElement (package:analyzer/src/context/context.dart:622:12)
#6      AnalyzerResolver.libraryFor (package:build_resolvers/src/resolver.dart:114:21)
<asynchronous suspension>
#7      PerActionResolver.libraryFor (package:build_resolvers/src/resolver.dart:65:17)
#8      _DelayedResolver.libraryFor (package:build/src/builder/build_step_impl.dart:192:25)
<asynchronous suspension>
#9      BuildStepImpl.inputLibrary (package:build/src/builder/build_step_impl.dart:37:21)
<asynchronous suspension>
#10     _Builder.build (package:source_gen/src/builder.dart:65:31)
<asynchronous suspension>
#11     runBuilder.buildForInput (package:build/src/generate/run_builder.dart:45:21)
<asynchronous suspension>
#12     MappedListIterable.elementAt (dart:_internal/iterable.dart:414:29)
#13     ListIterator.moveNext (dart:_internal/iterable.dart:343:26)
#14     Future.wait (dart:async/future.dart:392:26)
#15     runBuilder.<anonymous closure> (package:build/src/generate/run_builder.dart:51:36)
#16     _rootRun (dart:async/zone.dart:1124:13)
#17     _CustomZone.run (dart:async/zone.dart:1021:19)
#18     _runZoned (dart:async/zone.dart:1516:10)
#19     runZoned (dart:async/zone.dart:1500:12)
#20     scopeLogAsync (package:build/src/builder/logging.dart:22:3)
#21     runBuilder (package:build/src/generate/run_builder.dart:51:9)
<asynchronous suspension>
#22     _SingleBuild._runForInput.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:455:19)
#23     _NoOpBuilderActionTracker.trackStage (package:build_runner_core/src/generate/performance_tracker.dart:303:15)
#24     _SingleBuild._runForInput.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:453:23)
<asynchronous suspension>
#25     NoOpTimeTracker.track (package:timing/src/timing.dart:222:44)
#26     _SingleBuild._runForInput.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:412:22)
#27     Pool.withResource (package:pool/pool.dart:127:28)
<asynchronous suspension>
#28     _SingleBuild._runForInput (package:build_runner_core/src/generate/build_impl.dart:408:17)
#29     _SingleBuild._runBuilder.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:358:38)
#30     MappedIterator.moveNext (dart:_internal/iterable.dart:392:18)
#31     Future.wait (dart:async/future.dart:392:26)
#32     _SingleBuild._runBuilder (package:build_runner_core/src/generate/build_impl.dart:357:36)
#33     _AsyncAwaitCompleter.start (dart:async/runtime/libasync_patch.dart:49:6)
#34     _SingleBuild._runBuilder (package:build_runner_core/src/generate/build_impl.dart:355:40)
#35     _SingleBuild._runPhases.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:304:20)
#36     _asyncThenWrapperHelper.<anonymous closure> (dart:async/runtime/libasync_patch.dart:77:64)
#37     _rootRunUnary (dart:async/zone.dart:1132:38)
#38     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#39     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#40     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#41     Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#42     Future._complete (dart:async/future_impl.dart:476:7)
#43     _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
#44     _AsyncAwaitCompleter.complete (dart:async/runtime/libasync_patch.dart:28:18)
#45     _completeOnAsyncReturn (dart:async/runtime/libasync_patch.dart:295:13)
#46     _SingleBuild._matchingPrimaryInputs (package:build_runner_core/src/generate/build_impl.dart)
#47     _asyncThenWrapperHelper.<anonymous closure> (dart:async/runtime/libasync_patch.dart:77:64)
#48     _rootRunUnary (dart:async/zone.dart:1132:38)
#49     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#50     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#51     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#52     Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#53     Future._completeWithValue (dart:async/future_impl.dart:486:5)
#54     Future.wait.<anonymous closure> (dart:async/future.dart:399:22)
#55     _rootRunUnary (dart:async/zone.dart:1132:38)
#56     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#57     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#58     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#59     Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#60     Future._complete (dart:async/future_impl.dart:476:7)
#61     _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
#62     _AsyncAwaitCompleter.complete.<anonymous closure> (dart:async/runtime/libasync_patch.dart:33:20)
#63     _rootRun (dart:async/zone.dart:1120:38)
#64     _CustomZone.run (dart:async/zone.dart:1021:19)
#65     _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#66     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
#67     _rootRun (dart:async/zone.dart:1124:13)
#68     _CustomZone.run (dart:async/zone.dart:1021:19)
#69     _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#70     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
#71     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#72     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#73     _runPendingImmediateCallback (dart:isolate/runtime/libisolate_patch.dart:115:13)
#74     _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:172:5)

Caused by NoSuchMethodError: The getter 'typeParameters' was called on null.
Receiver: null
Tried calling: typeParameters
#0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
#1      ClassElementImpl._computeMixinAppConstructors (package:analyzer/src/dart/element/element.dart:1100:50)
#2      ClassElementImpl.constructors (package:analyzer/src/dart/element/element.dart:518:30)
#3      ClassElementImpl.unnamedConstructor (package:analyzer/src/dart/element/element.dart:949:40)
#4      InterfaceTypeImpl.lookUpConstructor (package:analyzer/src/dart/element/type.dart:1881:36)
#5      AstRewriteVisitor.visitMethodInvocation (package:analyzer/src/generated/resolver.dart:92:18)
#6      MethodInvocationImpl.accept (package:analyzer/src/dart/ast/ast.dart:8679:49)
#7      VariableDeclarationImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:12442:19)
#8      UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#9      UnifyingAstVisitor.visitVariableDeclaration (package:analyzer/dart/ast/visitor.dart:3555:59)
#10     ScopedVisitor.visitVariableDeclaration (package:analyzer/src/generated/resolver.dart:6704:11)
#11     VariableDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:12436:49)
#12     NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:9174:20)
#13     VariableDeclarationListImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:12538:16)
#14     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#15     UnifyingAstVisitor.visitVariableDeclarationList (package:analyzer/dart/ast/visitor.dart:3559:7)
#16     VariableDeclarationListImpl.accept (package:analyzer/src/dart/ast/ast.dart:12532:15)
#17     VariableDeclarationStatementImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:12593:20)
#18     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#19     UnifyingAstVisitor.visitVariableDeclarationStatement (package:analyzer/dart/ast/visitor.dart:3563:7)
#20     VariableDeclarationStatementImpl.accept (package:analyzer/src/dart/ast/ast.dart:12589:15)
#21     NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:9174:20)
#22     BlockImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:1254:17)
#23     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#24     UnifyingAstVisitor.visitBlock (package:analyzer/dart/ast/visitor.dart:3199:31)
#25     ScopedVisitor.visitBlock (package:analyzer/src/generated/resolver.dart:6141:13)
#26     BlockImpl.accept (package:analyzer/src/dart/ast/ast.dart:1250:49)
#27     BlockFunctionBodyImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:1199:13)
#28     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#29     UnifyingAstVisitor.visitBlockFunctionBody (package:analyzer/dart/ast/visitor.dart:3202:55)
#30     ScopedVisitor.visitBlockFunctionBody (package:analyzer/src/generated/resolver.dart:6152:13)
#31     BlockFunctionBodyImpl.accept (package:analyzer/src/dart/ast/ast.dart:1195:49)
#32     MethodDeclarationImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:8541:12)
#33     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#34     UnifyingAstVisitor.visitMethodDeclaration (package:analyzer/dart/ast/visitor.dart:3422:55)
#35     ScopedVisitor.visitMethodDeclarationInScope (package:analyzer/src/generated/resolver.dart:6597:11)
#36     ScopedVisitor.visitMethodDeclaration (package:analyzer/src/generated/resolver.dart:6590:7)
#37     MethodDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:8532:49)
#38     NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:9174:20)
#39     ScopedVisitor.visitClassMembersInScope (package:analyzer/src/generated/resolver.dart:6218:18)
#40     ScopedVisitor.visitClassDeclaration (package:analyzer/src/generated/resolver.dart:6196:11)
#41     ClassDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:1765:49)
#42     NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:9174:20)
#43     CompilationUnitImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:2567:21)
#44     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#45     UnifyingAstVisitor.visitCompilationUnit (package:analyzer/dart/ast/visitor.dart:3235:51)
#46     CompilationUnitImpl.accept (package:analyzer/src/dart/ast/ast.dart:2560:49)
#47     ResolveUnitTypeNamesTask.internalPerform (package:analyzer/src/task/dart.dart:5133:10)
#48     AnalysisTask._safelyPerform (package:analyzer/src/task/api/model.dart:341:9)
#49     AnalysisTask.perform (package:analyzer/src/task/api/model.dart:240:7)
#50     AnalysisDriver.performWorkItem (package:analyzer/src/task/driver.dart:285:10)
#51     AnalysisDriver.computeResult (package:analyzer/src/task/driver.dart:110:22)
#52     AnalysisContextImpl.computeResult (package:analyzer/src/context/context.dart:654:14)
#53     AnalysisContextImpl.computeLibraryElement (package:analyzer/src/context/context.dart:622:12)
#54     AnalyzerResolver.libraryFor (package:build_resolvers/src/resolver.dart:114:21)
<asynchronous suspension>
#55     PerActionResolver.libraryFor (package:build_resolvers/src/resolver.dart:65:17)
#56     _DelayedResolver.libraryFor (package:build/src/builder/build_step_impl.dart:192:25)
<asynchronous suspension>
#57     BuildStepImpl.inputLibrary (package:build/src/builder/build_step_impl.dart:37:21)
<asynchronous suspension>
#58     _Builder.build (package:source_gen/src/builder.dart:65:31)
<asynchronous suspension>
#59     runBuilder.buildForInput (package:build/src/generate/run_builder.dart:45:21)
<asynchronous suspension>
#60     MappedListIterable.elementAt (dart:_internal/iterable.dart:414:29)
#61     ListIterator.moveNext (dart:_internal/iterable.dart:343:26)
#62     Future.wait (dart:async/future.dart:392:26)
#63     runBuilder.<anonymous closure> (package:build/src/generate/run_builder.dart:51:36)
#64     _rootRun (dart:async/zone.dart:1124:13)
#65     _CustomZone.run (dart:async/zone.dart:1021:19)
#66     _runZoned (dart:async/zone.dart:1516:10)
#67     runZoned (dart:async/zone.dart:1500:12)
#68     scopeLogAsync (package:build/src/builder/logging.dart:22:3)
#69     runBuilder (package:build/src/generate/run_builder.dart:51:9)
<asynchronous suspension>
#70     _SingleBuild._runForInput.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:455:19)
#71     _NoOpBuilderActionTracker.trackStage (package:build_runner_core/src/generate/performance_tracker.dart:303:15)
#72     _SingleBuild._runForInput.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:453:23)
<asynchronous suspension>
#73     NoOpTimeTracker.track (package:timing/src/timing.dart:222:44)
#74     _SingleBuild._runForInput.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:412:22)
#75     Pool.withResource (package:pool/pool.dart:127:28)
<asynchronous suspension>
#76     _SingleBuild._runForInput (package:build_runner_core/src/generate/build_impl.dart:408:17)
#77     _SingleBuild._runBuilder.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:358:38)
#78     MappedIterator.moveNext (dart:_internal/iterable.dart:392:18)
#79     Future.wait (dart:async/future.dart:392:26)
#80     _SingleBuild._runBuilder (package:build_runner_core/src/generate/build_impl.dart:357:36)
#81     _AsyncAwaitCompleter.start (dart:async/runtime/libasync_patch.dart:49:6)
#82     _SingleBuild._runBuilder (package:build_runner_core/src/generate/build_impl.dart:355:40)
#83     _SingleBuild._runPhases.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:304:20)
#84     _asyncThenWrapperHelper.<anonymous closure> (dart:async/runtime/libasync_patch.dart:77:64)
#85     _rootRunUnary (dart:async/zone.dart:1132:38)
#86     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#87     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#88     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#89     Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#90     Future._complete (dart:async/future_impl.dart:476:7)
#91     _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
#92     _AsyncAwaitCompleter.complete (dart:async/runtime/libasync_patch.dart:28:18)
#93     _completeOnAsyncReturn (dart:async/runtime/libasync_patch.dart:295:13)
#94     _SingleBuild._matchingPrimaryInputs (package:build_runner_core/src/generate/build_impl.dart)
#95     _asyncThenWrapperHelper.<anonymous closure> (dart:async/runtime/libasync_patch.dart:77:64)
#96     _rootRunUnary (dart:async/zone.dart:1132:38)
#97     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#98     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#99     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#100    Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#101    Future._completeWithValue (dart:async/future_impl.dart:486:5)
#102    Future.wait.<anonymous closure> (dart:async/future.dart:399:22)
#103    _rootRunUnary (dart:async/zone.dart:1132:38)
#104    _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#105    _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#106    Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#107    Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#108    Future._complete (dart:async/future_impl.dart:476:7)
#109    _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
#110    _AsyncAwaitCompleter.complete.<anonymous closure> (dart:async/runtime/libasync_patch.dart:33:20)
#111    _rootRun (dart:async/zone.dart:1120:38)
#112    _CustomZone.run (dart:async/zone.dart:1021:19)
#113    _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#114    _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
#115    _rootRun (dart:async/zone.dart:1124:13)
#116    _CustomZone.run (dart:async/zone.dart:1021:19)
#117    _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#118    _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
#119    _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#120    _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#121    _runPendingImmediateCallback (dart:isolate/runtime/libisolate_patch.dart:115:13)
#122    _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:172:5)


[SEVERE] mobx_codegen|mobx_generator on lib/ui/manage_activities.dart:

AnalysisException: Cannot compute LIBRARY_ELEMENT for Instance of 'AssetBasedSource'
Caused by Unexpected exception while performing ResolveUnitTypeNamesTask for source myapp|lib/stores/activity_list.dart
#0      AnalysisTask._safelyPerform (package:analyzer/src/task/api/model.dart:353:7)
#1      AnalysisTask.perform (package:analyzer/src/task/api/model.dart:240:7)
#2      AnalysisDriver.performWorkItem (package:analyzer/src/task/driver.dart:285:10)
#3      AnalysisDriver.computeResult (package:analyzer/src/task/driver.dart:110:22)
#4      AnalysisContextImpl.computeResult (package:analyzer/src/context/context.dart:654:14)
#5      AnalysisContextImpl.computeLibraryElement (package:analyzer/src/context/context.dart:622:12)
#6      AnalyzerResolver.libraryFor (package:build_resolvers/src/resolver.dart:114:21)
<asynchronous suspension>
#7      PerActionResolver.libraryFor (package:build_resolvers/src/resolver.dart:65:17)
#8      _DelayedResolver.libraryFor (package:build/src/builder/build_step_impl.dart:192:25)
<asynchronous suspension>
#9      BuildStepImpl.inputLibrary (package:build/src/builder/build_step_impl.dart:37:21)
<asynchronous suspension>
#10     _Builder.build (package:source_gen/src/builder.dart:65:31)
<asynchronous suspension>
#11     runBuilder.buildForInput (package:build/src/generate/run_builder.dart:45:21)
<asynchronous suspension>
#12     MappedListIterable.elementAt (dart:_internal/iterable.dart:414:29)
#13     ListIterator.moveNext (dart:_internal/iterable.dart:343:26)
#14     Future.wait (dart:async/future.dart:392:26)
#15     runBuilder.<anonymous closure> (package:build/src/generate/run_builder.dart:51:36)
#16     _rootRun (dart:async/zone.dart:1124:13)
#17     _CustomZone.run (dart:async/zone.dart:1021:19)
#18     _runZoned (dart:async/zone.dart:1516:10)
#19     runZoned (dart:async/zone.dart:1500:12)
#20     scopeLogAsync (package:build/src/builder/logging.dart:22:3)
#21     runBuilder (package:build/src/generate/run_builder.dart:51:9)
<asynchronous suspension>
#22     _SingleBuild._runForInput.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:455:19)
#23     _NoOpBuilderActionTracker.trackStage (package:build_runner_core/src/generate/performance_tracker.dart:303:15)
#24     _SingleBuild._runForInput.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:453:23)
<asynchronous suspension>
#25     NoOpTimeTracker.track (package:timing/src/timing.dart:222:44)
#26     _SingleBuild._runForInput.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:412:22)
#27     Pool.withResource (package:pool/pool.dart:127:28)
<asynchronous suspension>
#28     _SingleBuild._runForInput (package:build_runner_core/src/generate/build_impl.dart:408:17)
#29     _SingleBuild._runBuilder.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:358:38)
#30     MappedIterator.moveNext (dart:_internal/iterable.dart:392:18)
#31     Future.wait (dart:async/future.dart:392:26)
#32     _SingleBuild._runBuilder (package:build_runner_core/src/generate/build_impl.dart:357:36)
#33     _AsyncAwaitCompleter.start (dart:async/runtime/libasync_patch.dart:49:6)
#34     _SingleBuild._runBuilder (package:build_runner_core/src/generate/build_impl.dart:355:40)
#35     _SingleBuild._runPhases.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:304:20)
#36     _asyncThenWrapperHelper.<anonymous closure> (dart:async/runtime/libasync_patch.dart:77:64)
#37     _rootRunUnary (dart:async/zone.dart:1132:38)
#38     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#39     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#40     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#41     Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#42     Future._complete (dart:async/future_impl.dart:476:7)
#43     _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
#44     _AsyncAwaitCompleter.complete (dart:async/runtime/libasync_patch.dart:28:18)
#45     _completeOnAsyncReturn (dart:async/runtime/libasync_patch.dart:295:13)
#46     _SingleBuild._matchingPrimaryInputs (package:build_runner_core/src/generate/build_impl.dart)
#47     _asyncThenWrapperHelper.<anonymous closure> (dart:async/runtime/libasync_patch.dart:77:64)
#48     _rootRunUnary (dart:async/zone.dart:1132:38)
#49     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#50     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#51     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#52     Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#53     Future._completeWithValue (dart:async/future_impl.dart:486:5)
#54     Future.wait.<anonymous closure> (dart:async/future.dart:399:22)
#55     _rootRunUnary (dart:async/zone.dart:1132:38)
#56     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#57     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#58     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#59     Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#60     Future._complete (dart:async/future_impl.dart:476:7)
#61     _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
#62     _AsyncAwaitCompleter.complete.<anonymous closure> (dart:async/runtime/libasync_patch.dart:33:20)
#63     _rootRun (dart:async/zone.dart:1120:38)
#64     _CustomZone.run (dart:async/zone.dart:1021:19)
#65     _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#66     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
#67     _rootRun (dart:async/zone.dart:1124:13)
#68     _CustomZone.run (dart:async/zone.dart:1021:19)
#69     _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#70     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
#71     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#72     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#73     _runPendingImmediateCallback (dart:isolate/runtime/libisolate_patch.dart:115:13)
#74     _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:172:5)

Caused by NoSuchMethodError: The getter 'typeParameters' was called on null.
Receiver: null
Tried calling: typeParameters
#0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
#1      ClassElementImpl._computeMixinAppConstructors (package:analyzer/src/dart/element/element.dart:1100:50)
#2      ClassElementImpl.constructors (package:analyzer/src/dart/element/element.dart:518:30)
#3      ClassElementImpl.unnamedConstructor (package:analyzer/src/dart/element/element.dart:949:40)
#4      InterfaceTypeImpl.lookUpConstructor (package:analyzer/src/dart/element/type.dart:1881:36)
#5      AstRewriteVisitor.visitMethodInvocation (package:analyzer/src/generated/resolver.dart:92:18)
#6      MethodInvocationImpl.accept (package:analyzer/src/dart/ast/ast.dart:8679:49)
#7      VariableDeclarationImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:12442:19)
#8      UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#9      UnifyingAstVisitor.visitVariableDeclaration (package:analyzer/dart/ast/visitor.dart:3555:59)
#10     ScopedVisitor.visitVariableDeclaration (package:analyzer/src/generated/resolver.dart:6704:11)
#11     VariableDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:12436:49)
#12     NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:9174:20)
#13     VariableDeclarationListImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:12538:16)
#14     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#15     UnifyingAstVisitor.visitVariableDeclarationList (package:analyzer/dart/ast/visitor.dart:3559:7)
#16     VariableDeclarationListImpl.accept (package:analyzer/src/dart/ast/ast.dart:12532:15)
#17     VariableDeclarationStatementImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:12593:20)
#18     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#19     UnifyingAstVisitor.visitVariableDeclarationStatement (package:analyzer/dart/ast/visitor.dart:3563:7)
#20     VariableDeclarationStatementImpl.accept (package:analyzer/src/dart/ast/ast.dart:12589:15)
#21     NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:9174:20)
#22     BlockImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:1254:17)
#23     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#24     UnifyingAstVisitor.visitBlock (package:analyzer/dart/ast/visitor.dart:3199:31)
#25     ScopedVisitor.visitBlock (package:analyzer/src/generated/resolver.dart:6141:13)
#26     BlockImpl.accept (package:analyzer/src/dart/ast/ast.dart:1250:49)
#27     BlockFunctionBodyImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:1199:13)
#28     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#29     UnifyingAstVisitor.visitBlockFunctionBody (package:analyzer/dart/ast/visitor.dart:3202:55)
#30     ScopedVisitor.visitBlockFunctionBody (package:analyzer/src/generated/resolver.dart:6152:13)
#31     BlockFunctionBodyImpl.accept (package:analyzer/src/dart/ast/ast.dart:1195:49)
#32     MethodDeclarationImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:8541:12)
#33     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#34     UnifyingAstVisitor.visitMethodDeclaration (package:analyzer/dart/ast/visitor.dart:3422:55)
#35     ScopedVisitor.visitMethodDeclarationInScope (package:analyzer/src/generated/resolver.dart:6597:11)
#36     ScopedVisitor.visitMethodDeclaration (package:analyzer/src/generated/resolver.dart:6590:7)
#37     MethodDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:8532:49)
#38     NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:9174:20)
#39     ScopedVisitor.visitClassMembersInScope (package:analyzer/src/generated/resolver.dart:6218:18)
#40     ScopedVisitor.visitClassDeclaration (package:analyzer/src/generated/resolver.dart:6196:11)
#41     ClassDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:1765:49)
#42     NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:9174:20)
#43     CompilationUnitImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:2567:21)
#44     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3440:10)
#45     UnifyingAstVisitor.visitCompilationUnit (package:analyzer/dart/ast/visitor.dart:3235:51)
#46     CompilationUnitImpl.accept (package:analyzer/src/dart/ast/ast.dart:2560:49)
#47     ResolveUnitTypeNamesTask.internalPerform (package:analyzer/src/task/dart.dart:5133:10)
#48     AnalysisTask._safelyPerform (package:analyzer/src/task/api/model.dart:341:9)
#49     AnalysisTask.perform (package:analyzer/src/task/api/model.dart:240:7)
#50     AnalysisDriver.performWorkItem (package:analyzer/src/task/driver.dart:285:10)
#51     AnalysisDriver.computeResult (package:analyzer/src/task/driver.dart:110:22)
#52     AnalysisContextImpl.computeResult (package:analyzer/src/context/context.dart:654:14)
#53     AnalysisContextImpl.computeLibraryElement (package:analyzer/src/context/context.dart:622:12)
#54     AnalyzerResolver.libraryFor (package:build_resolvers/src/resolver.dart:114:21)
<asynchronous suspension>
#55     PerActionResolver.libraryFor (package:build_resolvers/src/resolver.dart:65:17)
#56     _DelayedResolver.libraryFor (package:build/src/builder/build_step_impl.dart:192:25)
<asynchronous suspension>
#57     BuildStepImpl.inputLibrary (package:build/src/builder/build_step_impl.dart:37:21)
<asynchronous suspension>
#58     _Builder.build (package:source_gen/src/builder.dart:65:31)
<asynchronous suspension>
#59     runBuilder.buildForInput (package:build/src/generate/run_builder.dart:45:21)
<asynchronous suspension>
#60     MappedListIterable.elementAt (dart:_internal/iterable.dart:414:29)
#61     ListIterator.moveNext (dart:_internal/iterable.dart:343:26)
#62     Future.wait (dart:async/future.dart:392:26)
#63     runBuilder.<anonymous closure> (package:build/src/generate/run_builder.dart:51:36)
#64     _rootRun (dart:async/zone.dart:1124:13)
#65     _CustomZone.run (dart:async/zone.dart:1021:19)
#66     _runZoned (dart:async/zone.dart:1516:10)
#67     runZoned (dart:async/zone.dart:1500:12)
#68     scopeLogAsync (package:build/src/builder/logging.dart:22:3)
#69     runBuilder (package:build/src/generate/run_builder.dart:51:9)
<asynchronous suspension>
#70     _SingleBuild._runForInput.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:455:19)
#71     _NoOpBuilderActionTracker.trackStage (package:build_runner_core/src/generate/performance_tracker.dart:303:15)
#72     _SingleBuild._runForInput.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:453:23)
<asynchronous suspension>
#73     NoOpTimeTracker.track (package:timing/src/timing.dart:222:44)
#74     _SingleBuild._runForInput.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:412:22)
#75     Pool.withResource (package:pool/pool.dart:127:28)
<asynchronous suspension>
#76     _SingleBuild._runForInput (package:build_runner_core/src/generate/build_impl.dart:408:17)
#77     _SingleBuild._runBuilder.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:358:38)
#78     MappedIterator.moveNext (dart:_internal/iterable.dart:392:18)
#79     Future.wait (dart:async/future.dart:392:26)
#80     _SingleBuild._runBuilder (package:build_runner_core/src/generate/build_impl.dart:357:36)
#81     _AsyncAwaitCompleter.start (dart:async/runtime/libasync_patch.dart:49:6)
#82     _SingleBuild._runBuilder (package:build_runner_core/src/generate/build_impl.dart:355:40)
#83     _SingleBuild._runPhases.<anonymous closure>.<anonymous closure> (package:build_runner_core/src/generate/build_impl.dart:304:20)
#84     _asyncThenWrapperHelper.<anonymous closure> (dart:async/runtime/libasync_patch.dart:77:64)
#85     _rootRunUnary (dart:async/zone.dart:1132:38)
#86     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#87     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#88     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#89     Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#90     Future._complete (dart:async/future_impl.dart:476:7)
#91     _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
#92     _AsyncAwaitCompleter.complete (dart:async/runtime/libasync_patch.dart:28:18)
#93     _completeOnAsyncReturn (dart:async/runtime/libasync_patch.dart:295:13)
#94     _SingleBuild._matchingPrimaryInputs (package:build_runner_core/src/generate/build_impl.dart)
#95     _asyncThenWrapperHelper.<anonymous closure> (dart:async/runtime/libasync_patch.dart:77:64)
#96     _rootRunUnary (dart:async/zone.dart:1132:38)
#97     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#98     _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#99     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#100    Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#101    Future._completeWithValue (dart:async/future_impl.dart:486:5)
#102    Future.wait.<anonymous closure> (dart:async/future.dart:399:22)
#103    _rootRunUnary (dart:async/zone.dart:1132:38)
#104    _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#105    _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#106    Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
#107    Future._propagateToListeners (dart:async/future_impl.dart:671:32)
#108    Future._complete (dart:async/future_impl.dart:476:7)
#109    _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
#110    _AsyncAwaitCompleter.complete.<anonymous closure> (dart:async/runtime/libasync_patch.dart:33:20)
#111    _rootRun (dart:async/zone.dart:1120:38)
#112    _CustomZone.run (dart:async/zone.dart:1021:19)
#113    _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#114    _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
#115    _rootRun (dart:async/zone.dart:1124:13)
#116    _CustomZone.run (dart:async/zone.dart:1021:19)
#117    _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#118    _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
#119    _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#120    _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#121    _runPendingImmediateCallback (dart:isolate/runtime/libisolate_patch.dart:115:13)
#122    _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:172:5)


[INFO] Running build completed, took 4.0s

[INFO] Caching finalized dependency graph...
[INFO] Caching finalized dependency graph completed, took 35ms

[SEVERE] Failed after 4.1s
pub finished with exit code 1

Observer throw exception using Computed value

I initialize a Computed value right before initialize my widget, Computed.value will throw an exception in Observer.
however Observable that just created would NOT.
If I initialize the Computed value long time before I initialize my widget, Computed.value will NOT throw an exception.

btw, I am using master branch, and I am using it in a real project.

here is the stacktrace:

flutter: # 0      Computed.value (file:///Users/shallow/Codes/dfe/db-app-flutter/packages/mobx/lib/src/core/computed.dart:81:7)
flutter: # 1      _ProfileCenterState._buildTop.<anonymous closure> (package:doubi/foundation/view/profile_center/profile_center.dart:149:66)
flutter: # 2      ObserverState.build (package:flutter_mobx/flutter_mobx.dart:46:21)
flutter: # 3      StatefulElement.build (package:flutter/src/widgets/framework.dart:3809:27)
flutter: # 4      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3721:15)
flutter: # 5      Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: # 6      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
flutter: # 7      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3848:11)
flutter: # 8      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
flutter: # 9      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
flutter: # 10     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4965:32)
flutter: # 11     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
flutter: # 12     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4965:32)
flutter: # 13     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
flutter: # 14     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4965:32)
flutter: # 15     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
flutter: # 16     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
flutter: # 17     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
flutter: # 18     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: # 19     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
flutter: # 20     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
flutter: # 21     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
flutter: # 22     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
flutter: # 23     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
flutter: # 24     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: # 25     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
flutter: # 26     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
flutter: # 27     ParentDataElement.mount (package:flutter/src/widgets/framework.dart:4047:11)
flutter: # 28     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
flutter: # 29     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4965:32)
flutter: # 30     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
flutter: # 31     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
flutter: # 32     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
flutter: # 33     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
flutter: # 34     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
flutter: # 35     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
flutter: # 36     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: # 37     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
flutter: # 38     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
flutter: # 39     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
flutter: # 40     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
flutter: # 41     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
flutter: # 42     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
flutter: # 43     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
flutter: # 44     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
flutter: # 45     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
flutter: # 46     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
flutter: # 47     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
flutter: # 48     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: # 49     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
flutter: # 50     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
flutter: # 51     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
flutter: # 52     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
flutter: # 53     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
flutter: # 54     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: # 55     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
flutter: # 56     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
flutter: # 57     ParentDataElement.mount (package:flutter/src/widgets/framework.dart:4047:11)
flutter: # 58     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
flutter: # 59     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
flutter: # 60     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
flutter: # 61     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
flutter: # 62     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
flutter: # 63     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3848:11)
flutter: # 64     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
flutter: # 65     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
flutter: # 66     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
flutter: # 67     SliverMultiBoxAdaptorElement.updateChild (package:flutter/src/widgets/sliver.dart:1028:36)
flutter: # 68     SliverMultiBoxAdaptorElement.createChild.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1013:20)
flutter: # 69     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2266:19)
flutter: # 70     SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:1006:11)
flutter: # 71     RenderSliverMultiBoxAdaptor._createOrObtainChild.<anonymous closure> (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:274:23)
flutter: # 72     RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1730:58)
flutter: # 73     PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:799:15)
flutter: # 74     RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1730:13)
flutter: # 75     RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:263:5)
flutter: # 76     RenderSliverMultiBoxAdaptor.addInitialChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:341:5)
flutter: # 77     RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:78:12)
flutter: # 78     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 79     RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:182:11)
flutter: # 80     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 81     RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:405:13)
flutter: # 82     RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1316:12)
flutter: # 83     RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1234:20)
flutter: # 84     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 85     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 86     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 87     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 88     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 89     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 90     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 91     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 92     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 93     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 94     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 95     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:142:11)
flutter: # 96     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:339:7)
flutter: # 97     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:212:7)
flutter: # 98     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:356:14)
flutter: # 99     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 100    _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 101    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 102    _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 103    _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1188:11)
flutter: # 104    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 105    _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 106    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 107    _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 108    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 109    _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 110    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 111    RenderStack.performLayout (package:flutter/src/rendering/stack.dart:510:15)
flutter: # 112    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 113    _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 114    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 115    _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 116    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 117    _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 118    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 119    _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 120    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 121    _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 122    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 123    RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:2879:14)
flutter: # 124    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 125    RenderStack.performLayout (package:flutter/src/rendering/stack.dart:510:15)
flutter: # 126    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 127    __RenderTheatre&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: post http://api.idoubi.top:18010/api-business/user/profile {code: 0, message: success, data: {id: 4, nickname: 哦~, avatarUrl: /images/usericon/4.png, wechatNumber: yay, credit: 100, signature: θΏ™δΈͺδΊΊεΎˆζ‡’οΌŒδ»€δΉˆιƒ½ζ²‘ε†™γ€‚, country: **, province: δΈŠζ΅·εΈ‚, city: δΈŠζ΅·εΈ‚, gender: 2, remainder: 74013265, prize: 100, fanNumber: 1, friendNumber: 7, followNumber: 1, jgname: ocZI-2yXKmj3mPq2FC5FyNpMOL51}, time: 2019-01-17 12:14:59}
flutter: # 128    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 129    _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 130    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 131    _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 132    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 133    _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 134    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 135    _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 136    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 137    _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
flutter: # 138    RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
flutter: # 139    RenderStack.performLayout (package:flutter/src/rendering/stack.dart:510:15)
flutter: # 140    RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1509:7)
flutter: # 141    PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:768:18)
flutter: # 142    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:281:19)
flutter: # 143    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:677:13)
flutter: # 144    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:219:5)
flutter: # 145    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
flutter: # 146    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
flutter: # 147    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842:5)
flutter: # 148    _invoke (dart:ui/hooks.dart:154:13)
flutter: # 149    _drawFrame (dart:ui/hooks.dart:143:3)

Edit by @katis : quoted the stacktrace as it was accidentally referencing every issue we have

Make example readme beginner friendly

I'm a beginner in flutter, coming from react-native mobx and need more instructions on how to get the examples and generators running. Now that the android and ios folders have been removed I'm not able to use flutter run any more and I would like it for other beginners not struggle as much as I'm currently doing...

First I got this error as soon as I added the current mobx to a new project from flutter create.

Because every version of flutter_test from sdk depends on meta 1.1.6 and mobx >=0.0.24 depends on meta ^1.1.7, flutter_test from sdk is incompatible with mobx >=0.0.24.

... so I had to figured out how to use dependency_overrides, which is hopefully the right way to resolve this.

dependency_overrides:
    meta: ^1.1.7`

Now I'm stuck with the generators. I've pasted the store from the example to my newly created project with build_runner and mobx_codegen as dev dependencies and according to the readme I should be able to call flutter packages pub run build_runner build but nothing is being generated. After some googling I figured out that I need a build.yaml and I found one in the mobx_codegen I'm trying to steal from it, but I can't figure out how to make it work 😒

All in all, it would be really helpful to have the readme in the example written in such a way, that a beginner like me can get started and dabble around a bit much faster πŸ‘Please add a requirement section to the example readme with links to the flutter install page and a getting started section with a list of all commands necessary to make a fresh clone from this repository run on a simulator including every command required to re-generate/rebuild stuff after code edits.

Thank you so much for your huge efforts. I've been having a blast following the progress of this repo and I'm very much excited to get my hands dirty with flutter+mobx.

Factories vs Builder functions

Should we use Dart factories instead of builder functions for the public API?

If we renamed ObservableValue to Observable and ComputedValue to Computed, made the constructor private and added a public factory like this:

class Observable<T> {
  Observable._(ReactiveContext context, String name, T initialValue) { ... }

  factory Observable(T initialValue, { String name, ReactiveContext context }) { .... }
}

Then the use would still be simple like with the builder function:

class MyStore {
  final value = Observable(10);
}

This is just a personal preference of mine though as I feel the factory would be more Darty.

Mobx codegen ignores stores with generic parametes

Example:

import 'package:mobx/mobx.dart';

part 'test_store.g.dart';

class TestStore<T> = TestStoreBase<T> with _$TestStore<T>;

abstract class TestStoreBase<T> implements Store {
  //
}

is skipped, nothing is generated, no error in generator output

Add spying and tracing capability

Possibly have some integration with Observatory. Not sure if we can build plugins for Observatory which are MobX specific but worth exploring.

meta version conflict with Flutter master and dev branch

Error:

Because every version of flutter_test from sdk depends on meta 1.1.6 and mobx >=0.0.24 depends on meta ^1.1.7, flutter_test from sdk is incompatible with mobx >=0.0.24.

@pavanpodila Should we downgrade meta dependency to version 1.1.6 in mobx or do we need to raise an issue in flutter repo for upgrading meta version.
Version:

mobx: 0.0.33
flutter_mobx: 0.0.8
mobx_codegen: 0.0.4

Tested it on flutter master and dev branch, same issue.

Code generator design

Since we've started working on the code generation, I thought I'd open a discussion thread about its design.

We need at least three working annotations, @observable, @computed and @action.

The generator will find all classes with a specific annotation (@observable, @store?) and creates a private subclass _$ParentClass that overrides the annotated fields, getters and methods with Mobx magic.

I'll use parts of this annotated class in the next sections:

@store // tbd
class User {
  @observable
  String firstName = 'Jane';

  @observable
  String lastName = 'Doe';

  @computed
  String get fullName => '$firstName $lastName';

  @action
  void updateNames({String firstName, String lastName }) {
    ...
  }
}

@observable

The first approach I tried was with a hidden Observable<T> field:

class _$User {
  final _$firstName = Observable<String>(null, name: 'User.firstName');

  @override
  String get firstName => _$firstName.value;

  @override
  set firstName(String value) => _$firstName.value = value;
}

This had some downsides. One was that the User creates storage for the original firstName field which then ends up unused. Second is that the initialization becomes slightly more complicated. The initial value must be copied from the superclasses field, and the field must be nulled so that it doesn't keep the initial value in memory. Code would look something like this:

class _$User {
 _$User() {
   _$firstName.value = super.firstName;
   super.firstName = null;
 }

 final _$firstName = Observable<String>(null, name: 'User.firstName');

  @override
  String get firstName => _$firstName.value;

  @override
  set firstName(String value) => _$firstName.value = value;
}

My second attempt was with an Atom which made the initialization a non-issue, since it just uses the original field:

class _$User {
 final _$firstNameAtom = Atom(name: 'User.firstName');

  @override
  String get firstName {
     _$firstNameAtom.reportObserved();
    return super.firstName;
  }

  @override
  set firstName(String value) {
    super.firstName = value;
    _$firstNameAtom.reportChanged();
  }
}

I think the Atom method is better, for the reasons above.

@computed

Computed should be simple, just override a getter and use the original one:

class _$User {
  _$User() {
    _$fullNameComputed = Computed(() => super.fullName);
  }

 Computed<String> _$fullNameComputed;

  @override
  String get fullName => _$fullNameComputed.value;
}

@action

The @action annotation has a name conflict with the current action() builder. We could remove action() and replace it with multiple action variants for different function arities: action0<R>(() => ...), action1<A, R>((a: A) => ...), action2<A, B, R>((a: A, b: B) => ...). The names are ugly, but they could be used by the codegen and I think that once the code generator is done, people won't use the raw versions much.

class _$User {
  _$User() {
    _$updateNames = action2((String a, String b) => super.updateNames(firstName: a, lastName: b));
  }

  Action2<String, String ,void> _$updateNames;

  @override
  void updateNames({String firstName, String lastName}) {
    _$updateNames(firstName, lastName);
  }
}

Named vs. positional arguments will add complexity in the generator.

Automatic conversions

Mobx JS makes objects and arrays automatically observable when you use the @observable decorator.
You can opt-out by using @observable.ref decorator instead.

Dart can't support the feature for classes, but it would be possible (sort of) for collections like Maps and Lists.

I'm not a fan of it as a default, and using an ObservableList is not much harder than using a List.

class ShoppingCart {
  @observable
  List<Item> items = [];
}

vs.

class ShoppingCart {
  @observable
  List<Item> items = ObservableList();
}

Since we can't modify the actual list assigned to the variable like in JS but only wrap it, it might be confusing that the non-observable List you passed to ShoppingCart.items is suddenly a reactive list when accessed from items.

final items = [];

final cart = ShoppingCart();
cart.items = items; // Supposedly items and cart.items are the same list

cart.items.add(Item()); // Mobx reacts to the change :)

items.add(Item()); // Mobx misses the change :(

Constructors

The generator should be able to create a constructor that matches the superclass factory that delegates to the subclass:

class User {
  // 
  User._(this.firstName, this.lastName);

  // Dart can delegate to the subclass constructor with this syntax
  factory User({String firstName, String lastName}) => _$User; // This could also determine the name of the subclass?
}

class _$User {
  _$User({String firstName, String lastName})
    : super._(firstName, lastName}) {
  }
}

observe() support in annotated classes

We would want the generated classes to be supported in devtools etc, but the problem is that the Atoms, Computeds etc are hidden in the subclass. It would be ugly to expose them as public, and you'd have to cast the User to _$User.

Another way would be to define an interface like:

abstract class Store {
  void observe(String field, listener);
}

make the annotated class abstract, and implement Store:

abstract class User implements Store {
}

Then the code generation could implement Store automatically:

class _$User extends User {
  void observe(String field, listener) {
    if (field == 'firstName') { ... }
    // etc.
  }
}

Store interface could also expose a Map of observable fields, so devtools could iterate and analyze them.

Generate all.dart for tests

From a discussion with @katis on a closed PR.

I removed all.dart files for flutter tests on #43 as it seemed unneeded while causing maintenance issues (easy to not update it).

But @katis said:

test_coverage generates it's own combined file. I've used the all.dart to run all unit tests with a single Dart VM launch which usually makes them run faster than every file opening their own separate VM.

In that case maybe we should ask test_coverage to extract the generator so that we can use it to generate all.dart.

If all.dart is generated, this would allow using buid_test, which makes a failing test if anything on the project haven't been generated.
This would prevent from adding tests without updating the all.dart

Flutter hooks integration

A discussion specific to flutter_hooks integration, as I think there's a lot to talk about.

The current candidates:

  • useObserver
  • useWhen
  • useReaction
  • useAction
  • useAutorun

useObserver

I see two potential usages:

useObserver();
someStore.field; // subscribed to field

And

final result = useObserver.scoped(() {
  someStore.field; // listen to field
  return 42;
});
someStore.otherField; // outside of the scope, not listened

useObserver is used when we want to rebuild a widget based on a mobx store.

The scoped version can be useful for custom hooks published to pub. We may not want to observe the entire build method in that case.


Specs of others coming soon~


I think what should really be discussed of is how do we want to handle rebuild and hot reload.

One thing that flutter_hooks allows is dynamically changing the callback passed to a useAction and similar.

Depending on how we implement it, the behavior may be unexpected.

Make EnforceActions.observed as the default

Currently EnforceActions.never is the default for mutating observables. It would be safer and better to have it set to observed. This will be stricter but will force everyone to arrive at the right code for mutating observables.

No stray mutations by default.

Libraries should be plain Dart/Flutter packages instead of a plugin

By looking at the folders inside mobx_codegen, flutter_mobx, and mobx, you can see android and ios folders there. As far as I can tell, none of these packages need to be plugins.

To me, it seems that the projects have been originally created using the Flutter plugin template project, but the pubspec files have been since cleaned out from Flutter plugin stuff. If this is the case, it should be fine to just remove the android and ios folders and call it a day. It shouldn't matter anyway, but it might be confusing to look at the source for some.

Extract a Listener mixin from Listenable and Interceptable

Currently the Listenable and Interceptable classes have almost the same implementation barring a few differences:

  • Notification type
  • notification logic function

I think these can be extracted out into a common Listener mixin that can be used by Listenable and Interceptable. Technically the behavior of add, remove, notify of a listener is exactly the same and there is no need to duplicate this logic between the two classes.

Error using async inside actions

I think is not possible to use async using @action.

When I use it Im getting the following error:
This works nice:

  @observable
  List<Location>locations = [];

  @action
  Future<List<Location>> fetchLocations(){
    _apiClient.getLocations().then((x){
      locations.addAll(x);
    });
  }

But this:

  @action
  Future<List<Location>> fetchLocations() async {
    locations = await _apiClient.getLocations();
  }

Generates an error:

[SEVERE] mobx_codegen|mobx_generator on lib/ui/location/state/locations.dart:
Could not make class "Locations" observable. Changes needed:
  1. Remove async modifier from the method "fetchLocations"


runInAction return type causes run-time error

Currently runInAction return type is Action, while Action.call return type is dynamic

Action runInAction(Function fn, {String name, ReactiveContext context}) =>
    Action(fn, name: name, context: context)();

The affect:
Dart analyzer pass, but this code fails in run-time:

runInAction(() => x.value = 100);

Possible fixes are:

  1. Make runInAction generic:
T runInAction<T>(T Function() fn, {String name, ReactiveContext context}) =>
    Action(fn, name: name, context: context)();
  1. Change return type to dynamic:
dynamic runInAction(Function fn, {String name, ReactiveContext context}) =>
    Action(fn, name: name, context: context)();

I can submit a PR, to the chosen solution:
Solution 1
Solution 2

Write an awesome README.md

Title says all πŸ˜€, yet a few things that should be included for sure:

  • Logo
  • Slogan, Gist of MobX
  • Short description and then a longer essay (perhaps)
  • Badges
  • TOC
  • Contributors list
  • Examples that are simple, medium and complex with clear descriptions
  • Links to website and sample projects
  • Community
  • Crisp language

Take inspiration from Awesome Readme

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.