Craig Labenz
e8b2bec22a
|
3 years ago | |
---|---|---|
.. | ||
android | 3 years ago | |
fonts/Corben | 5 years ago | |
ios | 3 years ago | |
lib | 3 years ago | |
linux | 3 years ago | |
macos | 3 years ago | |
test | 3 years ago | |
web | 3 years ago | |
windows | 3 years ago | |
.gitignore | 5 years ago | |
.metadata | 4 years ago | |
README.md | 5 years ago | |
analysis_options.yaml | 3 years ago | |
pubspec.lock | 3 years ago | |
pubspec.yaml | 3 years ago |
README.md
provider_shopper
A Flutter sample app that shows a state management approach using the Provider package. This is the app discussed in the Simple app state management section of flutter.dev.
Goals for this sample
- Show simple use of
Provider
for providing an immutable value to a subtree - Illustrate a simple state management approach using the ChangeNotifier class
- Show use of
ProxyProvider
for provided objects that depend on other provided objects
The important bits
lib/main.dart
Here the app sets up objects it needs to track state: a catalog and a shopping cart. It builds
a MultiProvider
to provide both objects at once to widgets further down the tree.
The CartModel
instance is provided using a ChangeNotifierProxyProvider
, which combines
two types of functionality:
- It will automatically subscribe to changes in
CartModel
(if you only want this functionality simply useChangeNotifierProvider
). - It takes the value of a previously provided object (in this case,
CatalogModel
, provided just above), and uses it to build the value ofCartModel
(if you only want this functionality, simply useProxyProvider
).
lib/models/*
This directory contains the model classes that are provided in main.dart
. These classes
represent the app state.
lib/screens/*
This directory contains widgets used to construct the two screens of the app: the catalog and
the cart. These widgets have access to the current state of both the catalog and the cart
via Provider.of
.
Questions/issues
If you have a general question about Provider, the best places to go are:
If you run into an issue with the sample itself, please file an issue in the main Flutter repo.