Provider: wat is het, toestandsmanager van Flutter-applicaties

Auteur: IT Sectr Gepubliceerd: 2026-02-19 Leestijd: 7 min

Provider — een pakket voor toestandsbeheer voor Flutter, gemaakt door Rémi Rousselet in 2019 als een wrapper over InheritedWidget. Provider lost het probleem van het doorgeven van gegevens in de widgetboom zonder props drilling op: elke widget krijgt toegang tot de toestand via context.read<T>() of context.watch<T>(). Volgens pub.dev is Provider de populairste toestandsmanager van Flutter met meer dan 25 duizend vind-ik-leuks.

Belangrijkste

  • ChangeNotifier — klasse met notifyListeners om abonnees op de hoogte te stellen van wijzigingen
  • Consumer — widget die herbouwt bij wijziging van ChangeNotifier
  • MultiProvider — compositie van meerdere Providers zonder nesting
  • ProxyProvider — Provider die afhankelijk is van een andere Provider
  • context.read / context.watch — methoden om toestand te lezen zonder en met abonnement

Wat is Provider?

Provider — een pakket voor toestandsbeheer en afhankelijkheidsinjectie in Flutter, gebouwd bovenop InheritedWidget. Provider biedt een object (toestand, service, repository) in de widgetboom en herbouwt automatisch de UI bij gegevenswijziging. In tegenstelling tot direct gebruik van InheritedWidget verwijdert Provider alle boilerplate.

Provider is officieel aanbevolen door Google voor toestandsbeheer in Flutter (Flutter Team, 2019-2023). Volgens Flutter Community Survey 2025 wordt Provider gebruikt in 72% van de Flutter-applicaties.

ChangeNotifier en notifyListeners

ChangeNotifier — ingebouwde Flutter-klasse die het Listener-patroon implementeert. ChangeNotifier stelt abonnees op de hoogte van wijzigingen via de aanroep notifyListeners().

Dart
class CounterProvider extends ChangeNotifier {
  int _count = 0;
  int get count => _count;

  void increment() {
    _count++;
    notifyListeners();
  }

  void reset() {
    _count = 0;
    notifyListeners();
  }
}

Regels voor notifyListeners: aanroepen na volledige gegevenswijziging — niet in het midden van de methode, maar aan het einde. Bij meerdere wijzigingen roept u notifyListeners() eenmaal aan na alle wijzigingen.

Consumer en context.watch

Consumer — widget die zich abonneert op ChangeNotifier en herbouwt bij elke aanroep van notifyListeners(). Consumer accepteert een builder-functie met drie parameters: context, model, child.

Dart
Consumer<CounterProvider>(
  builder: (context, provider, child) => Column(
    children: [
      child!, // wordt niet herbouwd
      Text('${provider.count}'),
      ElevatedButton(
        onPressed: () => provider.increment(),
        child: Icon(Icons.add),
      ),
    ],
  ),
  child: Text('Teller:'),
)

context.watch — BuildContext-extensiemethode om te abonneren op Provider. context.read — toegang zonder abonnement. context.select — abonnement op een specifiek veld van het model.

MultiProvider en ProxyProvider

MultiProvider — widget voor het registreren van meerdere Providers zonder nesting. MultiProvider accepteert een lijst van providers.

Dart
MultiProvider(
  providers: [
    ChangeNotifierProvider(create: (_) => CartProvider()),
    ChangeNotifierProvider(create: (_) => AuthProvider()),
    ProxyProvider<AuthProvider, OrderProvider>(
      update: (_, auth, __) => OrderProvider(auth.userId),
    ),
  ],
  child: MaterialApp(home: HomePage()),
)

ProxyProvider — Provider die afhankelijk is van een andere Provider. StreamProvider en FutureProvider — voor reactieve en asynchrone gegevens.

Provider testen

Provider wordt getest door de widget in te pakken in MultiProvider met testwaarden. Voor de test is geen echte API of database nodig.

Dart
import 'package:flutter_test/flutter_test.dart';

void main() {
  testWidgets('Counter increments on button tap',
    (tester) async {
      await tester.pumpWidget(
        ChangeNotifierProvider(
          create: (_) => CounterProvider(),
          child: CounterScreen(),
        ),
      );
      await tester.tap(find.byKey(Key('increment')));
      await tester.pump();
      expect(find.text('1'), findsOneWidget);
    },
  );
}

Provider: prestaties en beperkingen

Prestaties van Provider zijn gebaseerd op InheritedWidget: bij wijziging van Provider worden alle widgets die via context.watch of Consumer zijn geabonneerd, herbouwd. Gebruik context.select, Consumer met child-parameter en const voor statische widgets.

MethodeAbonnementHerbouwGebruik
context.watchVolledig modelElke wijzigingEenvoudige widgets
ConsumerVolledig modelElke wijzigingMet child-optimalisatie
context.selectSpecifiek veldAlleen bij veldwijzigingComplexe modellen
context.readGeenNooitEvent-handlers

Veelgestelde vragen

Wat is het verschil tussen Provider en BLoC?

Provider — een wrapper over InheritedWidget voor afhankelijkheidsinjectie met ChangeNotifier. BLoC — een architectuurpatroon met Event + Stream voor logica-isolatie.

Wat is ChangeNotifierProvider?

ChangeNotifierProvider — een type Provider voor ChangeNotifier-instanties. Maakt een object via create, stelt het beschikbaar aan descendants en herbouwt Consumer bij aanroep van notifyListeners.

Hoe voorkom ik onnodig herbouwen met Provider?

Gebruik context.select in plaats van context.watch. Verdeel grote ChangeNotifiers in meerdere kleine. Gebruik Consumer child voor statische delen.

Kan ik Provider zonder ChangeNotifier gebruiken?

Ja. Provider voor onveranderlijke objecten. StreamProvider voor streams. FutureProvider voor Future. ProxyProvider voor Providers die afhankelijk zijn van andere.

Wat is ProviderNotFoundException?

ProviderNotFoundException — een runtime-uitzondering die optreedt bij het proberen te verkrijgen van een Provider die niet hoger in de widgetboom is gedeclareerd.

Samenvatting

  • Provider — wrapper over InheritedWidget voor toestandsbeheer en DI in Flutter
  • ChangeNotifier — klasse met notifyListeners voor reactieve UI-updates
  • Consumer en context.watch — abonneren op wijzigingen met automatische herbouw
  • MultiProvider — compositie van providers zonder boomnesting
  • ProxyProvider — afhankelijkheidsketen tussen Providers
  • context.select — puntabonnement op een specifiek modelveld
  • StreamProvider en FutureProvider — ingebouwde ondersteuning voor reactieve en asynchrone gegevens

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook