In many examples (including the TODO architecture sample), ViewModels are created like so:
class ViewModel {
final void Function() myFunction;
final String myProperty;
ViewModel({
required this.myFunction,
required this.myProperty,
});
factory ViewModel.fromStore(Store<AppState> store) {
return ViewModel(
myFunction: () => store.dispatch(const MyFunctionAction()),
myProperty: store.state.myProperty,
);
}
}
This (IMO) has the following problems
myFunction may be accidentally used in a == or hashCode implementation, which would be incorrect as the closure would be non-identical with every new ViewModel
- More RAM usage (maybe?)
Why is that the recommended approach, compared to something like this?
class ViewModel {
final Store<AppState> _store;
ViewModel(this._store) : myProperty = _store.state.myProperty;
final String myProperty;
void myFunction() => _store.dispatch(const MyFunctionAction());
}
In many examples (including the TODO architecture sample), ViewModels are created like so:
This (IMO) has the following problems
myFunctionmay be accidentally used in a==orhashCodeimplementation, which would be incorrect as the closure would be non-identical with every newViewModelWhy is that the recommended approach, compared to something like this?