In the following presentation I compare main Flutter architecture patterns - package:provider, BLoC and Redux.
Source: https://github.com/kosiara/bloc-vs-pprov-vs-redux
Different architecture have their advantages & disadvantages. Simplest application can take advantage of a stateful widget + inherited widget - which solves the problem of reference passing.
BLoC is more complicated but definitely pays off when you're dealing with a bigger application.
Finally we have redux. This is the most robust example with most boilerplate code. There are non-deniable example of such an architecture:
- single source of truth which can be serialized and later on saved/restored from disk
- ease of logging actions
- clear data-flow
- ability to undo actions