CodeBlanks Logo Icon CodeBlanks

Provider and StateProvider

Learn the difference between Provider and StateProvider.

Provider and StateProvider

Provider produces a read-only value; it is immutable. StateProvider holds a readable and writable state; it is updated via the state property.

final nameP = Provider((ref) => 'Ayşe');
final counterP = StateProvider((ref) => 0);
ref.read(counterP).state++;

StateProvider is ideal for simple state.

Using StateProvider

With StateProvider you declare a simple state and update it via ref.read(stateP).state. When you assign a new value to state, listening widgets rebuild automatically.

final selectedP = StateProvider<bool>((ref) => false);

ref.read(selectedP).state = true;

The change immediately reflects to all listening widgets.

Practice Declare Provider and StateProvider

Declare a Provider<String> named isimP returning 'Ayşe'. Declare a StateProvider<int> named sayacP with initial value 0. In main, create a ProviderContainer, read both and print with print('isim: ${...} sayaç: ${...}').

Starter code

main.dart
import 'package:flutter_riverpod/flutter_riverpod.dart';

// isimP: Provider<String> 'Ayşe'
// sayacP: StateProvider<int> 0

void main() {
  final container = ProviderContainer();
  // isimP ve sayacP'yi oku ve yazdır
}

Sample solution

main.dart
import 'package:flutter_riverpod/flutter_riverpod.dart';

final isimP = Provider<String>((ref) => 'Ayşe');
final sayacP = StateProvider<int>((ref) => 0);

void main() {
  final container = ProviderContainer();
  final isim = container.read(isimP);
  final sayac = container.read(sayacP);
  print('isim: $isim sayaç: $sayac');
}

Expected output

isim: Ayşe sayaç: 0

Questions and answers

Review the lesson questions together with their answers. To test yourself, solve the lesson interactively.

1 Which provider holds state that is both readable and writable?

  • StreamProvider
  • Provider
  • FutureProvider
  • StateProvider Correct answer

Explanation: StateProvider holds writable state; it is updated via the state property. Provider only produces a read-only value.

2 Update the StateProvider

Question
final sayacP = StateProvider<int>((ref) => 0);

void artir(WidgetRef ref) {
  ref.read(sayacP).____++;
}
Answer
final sayacP = StateProvider<int>((ref) => 0);

void artir(WidgetRef ref) {
  ref.read(sayacP).state++;
}

Explanation: To update a StateProvider, ref.read(sayacP).state is assigned a new value; this rebuilds listening widgets.

3 Provider and StateProvider parts

Term Meaning
Provider Produces a read-only value
StateProvider Holds writable state
state StateProvider's update property
ref.read Method to access a provider

All lessons in Intermediate