StateProvider<State> constructor
- Create<
State, StateProviderRef< create,State> > - {String? name,
- List<
ProviderOrFamily> ? dependencies, - Family<
dynamic, dynamic, ProviderBase> ? from, - Object? argument}
A provider that expose a value which 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(
Create<State, StateProviderRef<State>> create, {
String? name,
List<ProviderOrFamily>? dependencies,
Family? from,
Object? argument,
}) : notifier = _NotifierProvider(
create,
name: modifierName(name, 'notifier'),
dependencies: dependencies,
from: from,
argument: argument,
),
super(name: name, from: from, argument: argument);