mirror of
https://github.com/flutter/samples.git
synced 2026-03-22 04:17:50 +00:00
Add provider_shopper (#87)
This is the code for the sample at https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple.
This commit is contained in:
54
provider_shopper/README.md
Normal file
54
provider_shopper/README.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# 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][simple] section of
|
||||
[flutter.dev][].
|
||||
|
||||

|
||||
|
||||
[Provider]: https://pub.dev/packages/provider
|
||||
[simple]: https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple
|
||||
[flutter.dev]: https://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:
|
||||
|
||||
1. It will automatically subscribe to changes in `CartModel` (if you only want this functionality
|
||||
simply use `ChangeNotifierProvider`).
|
||||
2. It takes the value of a previously provided object (in this case, `CatalogModel`, provided
|
||||
just above), and uses it to build the value of `CartModel` (if you only want
|
||||
_this_ functionality, simply use `ProxyProvider`).
|
||||
|
||||
### `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:
|
||||
|
||||
* [Provider documentation](https://pub.dev/documentation/provider/latest/)
|
||||
* [StackOverflow](https://stackoverflow.com/questions/tagged/flutter)
|
||||
|
||||
If you run into an issue with the sample itself, please file an issue
|
||||
in the [main Flutter repo](https://github.com/flutter/flutter/issues).
|
||||
Reference in New Issue
Block a user