You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
samples/provider_shopper
Brett Morgan aec67811aa
Drop broken link (#1925)
2 years ago
..
android Update samples for Dart 3.0.0 (#1803) 2 years ago
fonts/Corben Add provider_shopper (#87) 6 years ago
ios Update samples for Dart 3.0.0 (#1803) 2 years ago
lib Explicit import for Platform and kIsWeb (#1898) 2 years ago
linux Update `sdk` constraint range and update runners (#1706) 2 years ago
macos Update samples for Dart 3.0.0 (#1803) 2 years ago
test migrate provider_shopper to go_router (#1540) 2 years ago
web Flutter 3.7.0 (#1556) 2 years ago
windows Update `sdk` constraint range and update runners (#1706) 2 years ago
.gitignore Update `provider_shopper` (#1445) 2 years ago
.metadata Update samples for Dart 3.0.0 (#1803) 2 years ago
README.md Drop broken link (#1925) 2 years ago
analysis_options.yaml Create `analysis_defaults` package (#1654) 2 years ago
codelab_rebuild.yaml Flutter 3.7.0 (#1556) 2 years ago
pubspec.yaml Bump go_router from 8.2.0 to 9.0.0 in /provider_shopper (#1914) 2 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:

  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:

If you run into an issue with the sample itself, please file an issue in the main Flutter repo.