StateProvider<T> constructor
StateProvider<T> (
- T _createFn(
- StateProviderRef<
T> ref
- StateProviderRef<
- String? name,
- Iterable<
ProviderOrFamily> ? dependencies, - @Deprecated('Will be removed in 3.0.0') Family<
Object?> ? from, - @Deprecated('Will be removed in 3.0.0') Object? argument,
- @Deprecated('Will be removed in 3.0.0') DebugGetCreateSourceHash? debugGetCreateSourceHash,
A provider that exposes a value that can be modified from outside.
It can be useful for very simple states, like a filter or the currently selected item – which can then be combined with other providers or accessed in multiple screens.
The following code shows a list of products, and allows selecting a product by tapping on it.
final selectedProductIdProvider = StateProvider<String?>((ref) => null);
final productsProvider = StateNotifierProvider<ProductsNotifier, List<Product>>((ref) => ProductsNotifier());
Widget build(BuildContext context, WidgetRef ref) {
final List<Product> products = ref.watch(productsProvider);
final selectedProductId = ref.watch(selectedProductIdProvider);
return ListView(
children: [
for (final product in products)
GestureDetector(
onTap: () => ref.read(selectedProductIdProvider.notifier).state = product.id,
child: ProductItem(
product: product,
isSelected: selectedProductId.state == product.id,
),
),
],
);
}
Implementation
StateProvider(
this._createFn, {
super.name,
super.dependencies,
@Deprecated('Will be removed in 3.0.0') super.from,
@Deprecated('Will be removed in 3.0.0') super.argument,
@Deprecated('Will be removed in 3.0.0') super.debugGetCreateSourceHash,
}) : super(
allTransitiveDependencies:
computeAllTransitiveDependencies(dependencies),
);