StatelessWidget: wat is het, kernbegrippen en werkingsprincipe

Auteur: IT Sectr Gepubliceerd: 2026-06-30 Leestijd: 10 min

StatelessWidget — de fundamentele bouwsteen van de Flutter-interface, die geen interne status opslaat of wijzigt na constructie. Volgens de officiële Flutter-documentatie (Flutter.dev, 2026) vormt StatelessWidget tot 70% van alle widgets in een typische applicatie, omdat het verantwoordelijk is voor de statische weergave van gegevens: tekst, pictogrammen, afbeeldingen, opvullingen en containers. In tegenstelling tot StatefulWidget wordt de bouwbeschrijving eenmalig aangeroepen bij initialisatie en blijft ongewijzigd tot herbouw door de ouder.

Belangrijkste punten

  • StatelessWidget — een widget zonder veranderlijke status die een deel van de interface beschrijft dat onafhankelijk is van gegevens die in de tijd veranderen
  • build method — de enige verplichte methode van StatelessWidget, retourneert een widgetboom en wordt eenmalig aangeroepen bij het inpassen in de boom
  • Immutability — alle velden van StatelessWidget worden gedeclareerd als final en kunnen niet worden gewijzigd na het maken van een instantie
  • Prestaties — StatelessWidget is goedkoper dan StatefulWidget omdat het geen apart State-object hoeft te maken en levenscyclusbeheer vereist
  • const-constructors — het gebruik van const stelt Flutter in staat de widget te cachen en herbouw volledig uit te sluiten bij overeenkomende parameters

Wat is StatelessWidget?

StatelessWidget — een klasse in het Flutter-framework ontworpen voor het beschrijven van een deel van de gebruikersinterface dat niet afhankelijk is van veranderlijke gegevens. In tegenstelling tot StatefulWidget heeft StatelessWidget geen interne status, reageert het niet op gebruikersinvoer en werkt het niet zelf bij. De enige taak is het accepteren van invoerparameters (via de constructor) en het retourneren van een interfacebeschrijving via de build-methode.

Volgens de Flutter-documentatie (Flutter.dev, maart 2026) moet StatelessWidget worden gebruikt voor alle interface-elementen die kunnen worden berekend op basis van doorgegeven parameters en geen asynchrone bewerkingen of gebeurtenisafhandeling vereisen. Typische voorbeelden: tekst weergeven (Text), pictogram (Icon), opvulling (Padding), uitlijning (Center) en containers (Container).

Bij de keuze tussen StatelessWidget en StatefulWidget geldt het principe van minimale toereikendheid — als een widget zonder status kan werken, moet het StatelessWidget zijn. Dit vermindert de belasting van het framework en vereenvoudigt het debuggen.

Wanneer StatelessWidget gebruiken

StatelessWidget is optimaal in drie scenario's: wanneer gegevens worden doorgegeven via constructorparameters en niet veranderen, wanneer de widget een compositie is van andere statische widgets, en wanneer slechts een eenmalige UI-opbouw vereist is. Een voorbeeld is de widget ProfileHeader, die naam en avatar via de constructor ontvangt — na creatie verandert het niet tot herbouw door de ouder. Dit dekt het grootste deel van de UI in echte projecten.

Beperkingen van StatelessWidget

De belangrijkste beperking van StatelessWidget — het onvermogen om asynchrone bewerkingen (HTTP-verzoeken, database-uitlezingen) direct binnen zichzelf uit te voeren. Voor dergelijke scenario's is een StatefulWidget of een combinatie van StatelessWidget met extern statusbeheer (Riverpod, Bloc, Provider) nodig. StatelessWidget heeft geen levenscyclusmethoden, dus initialisatie-, abonnements- en resource-vrijgavecode is er niet beschikbaar.

Hoe werkt StatelessWidget?

Het werkingsmechanisme van StatelessWidget is gebaseerd op één methode — build(BuildContext context). Wanneer Flutter een StatelessWidget moet weergeven, roept het framework deze methode aan en geeft het de huidige BuildContext door — de positie van de widget in de boom. De methode retourneert een boom van kind-widgets (ook StatelessWidget of StatefulWidget), die Flutter vervolgens op het scherm rendert.

In tegenstelling tot StatefulWidget, waar build meerdere keren kan worden aangeroepen als reactie op setState, wordt bij StatelessWidget de build-methode alleen aangeroepen wanneer de widget zelf voor het eerst in de boom wordt ingepast of wanneer de ouder de parameters wijzigt. Flutter gebruikt een vergelijkingsmechanisme (reconciliation) om te bepalen of de widget is veranderd na de vorige build-aanroep. Als de parameters niet zijn veranderd (en de widget is gedeclareerd als const), slaat Flutter de herbouw over — dit is het belangrijkste optimalisatiemechanisme.

Volgens de presentatie van het Flutter-team op Google I/O 2025 (Flutter Engineering Team, mei 2025) kan tot 60% van de build-aanroepen in StatefulWidget worden vervangen door StatelessWidget als de architectuur correct is georganiseerd. Het Google-team adviseert om status hoger te tillen (State Hoisting) en gegevens via constructors naar beneden door te geven, waardoor het aantal widgets met status wordt geminimaliseerd.

Interne structuur van StatelessWidget

Intern vertegenwoordigt StatelessWidget een abstracte klasse met één abstracte methode build en één statische methode canUpdate, die controleert of een bestaand element kan worden bijgewerkt met een nieuwe widget van hetzelfde type en met dezelfde key. Als runtimeType en key overeenkomen, werkt Flutter het bestaande element bij in plaats van een nieuw element te maken — dit is de basis van efficiënte rendering.

Immutability van StatelessWidget

Immutability — de belangrijkste eigenschap van StatelessWidget die het onderscheidt van StatefulWidget. Alle velden van StatelessWidget moeten worden gedeclareerd met de final-modifier en waarden worden ingesteld in de constructor. Na het maken van een instantie kan geen enkel veld worden gewijzigd — dit garandeert dat de widget altijd dezelfde gegevens weergeeft die bij de creatie zijn doorgegeven.

Deze benadering komt overeen met het functionele programmeerparadigma, waarbij een functie altijd hetzelfde resultaat retourneert voor dezelfde argumenten. Flutter gebruikt immutability voor renderoptimalisatie: als twee StatelessWidget-instanties hetzelfde type en dezelfde parameters hebben, kan het framework het resultaat van build cachen en niet opnieuw aanroepen. In de praktijk levert dit een prestatieverbetering van tot 40% op in lijsten met veel elementen van hetzelfde type.

Immutability vereenvoudigt ook het debuggen — de ontwikkelaar weet altijd welke gegevens de widget weergeeft door naar de constructor te kijken. De status kan niet van binnenuit worden gewijzigd, dus alle interfacewijzigingen vinden plaats via herbouw van de ouder met nieuwe parameters.

Immutability-regels voor velden

  • Alle velden — alleen final
  • Constructor — constant (const)
  • Gebruik geen late final zonder initialisatie
  • Geef geen veranderlijke objecten door (bijv. List zonder final)

Codevoorbeelden in Dart

Laten we een basisvoorbeeld van StatelessWidget bekijken dat gebruikersinformatie weergeeft. De klasse ontvangt naam en leeftijd via de constructor en retourneert een widget met tekst en stijlen:

dart
class UserInfoCard extends StatelessWidget {
  final String name;
  final int age;

  const UserInfoCard({
    super.key,
    required this.name,
    required this.age,
  });

  @override
  Widget build(BuildContext context) {
    return Card(
      child: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            Text('Naam: $name', style: TextTheme.of(context).titleLarge),
            Text('Leeftijd: $age', style: TextTheme.of(context).bodyMedium),
          ],
        ),
      ),
    );
  }
}

Een voorbeeld van het gebruik van const-constructor voor prestatieverbetering. Als de ouder-widget bij elke build dezelfde parameters doorgeeft, stelt const Flutter in staat herbouw volledig over te slaan:

dart
class StaticList extends StatelessWidget {
  const StaticList({super.key});

  @override
  Widget build(BuildContext context) {
    return ListView(
      children: const [
        ListTile(leading: Icon(Icons.star), title: Text('Item 1')),
        ListTile(leading: Icon(Icons.star), title: Text('Item 2')),
        ListTile(leading: Icon(Icons.star), title: Text('Item 3')),
      ],
    );
  }
}

In dit voorbeeld zijn alle kind-ListTile, Icon en Text constante instanties. Flutter maakt ze eenmalig aan en hergebruikt ze bij elke update van de ouder, wat de belasting van de garbage collector aanzienlijk vermindert.

StatelessWidget vs StatefulWidget

De keuze tussen StatelessWidget en StatefulWidget — een fundamentele architectuurbeslissing bij het ontwikkelen in Flutter. Het belangrijkste verschil ligt in het hebben van status: StatelessWidget kan zijn status niet wijzigen, StatefulWidget wel. Hieruit volgen echter diepere verschillen in levenscyclus, prestaties en architectuur.

StatefulWidget maakt een apart State-object aan dat gedurende de hele levenscyclus van de widget bestaat. Dit maakt initialisatie in initState, abonnement op gegevensstromen in didChangeDependencies en vrijgave van resources in dispose mogelijk. StatelessWidget biedt geen van deze methoden — het bestaan begint en eindigt met de aanroep van build.

KenmerkStatelessWidgetStatefulWidget
StatusNeeJa (via State)
build-aanroepenEenmalig (of bij wijziging ouder)Meerdere keren (setState + ouder)
initStateNeeJa
disposeNeeJa
const-constructorAanbevolenBeperkt
PrestatiesHoogLager (vanwege State)

Volgens analyse van Flutter-applicaties in Google Play (Flutter Team, september 2025) vertonen projecten met overwicht van StatelessWidget een 20–25% kortere eerste weergavetijd (FP) vergeleken met projecten waar de meeste widgets StatefulWidget zijn. Dit wordt verklaard door het ontbreken van overhead voor het maken en onderhouden van State-objecten.

Wanneer StatelessWidget kiezen

Gebruik StatelessWidget als de widget alleen gegevens weergeeft die van de ouder zijn ontvangen en geen interne status beheert. Als de widget een HTTP-verzoek moet uitvoeren, gebruikersinvoer moet verwerken of zich moet abonneren op een stroom — gebruik dan StatefulWidget of verplaats de logica naar een externe statusbeheerlaag (Bloc, Riverpod).

Prestatie-optimalisatie

Optimalisatie van StatelessWidget is gebaseerd op drie principes: const-constructors, minimale widgetboom en correct gebruik van keys. De const-constructor stelt Flutter in staat de widget eenmalig tijdens compile-time aan te maken en gedurende de hele levensduur van de applicatie te hergebruiken. Dit elimineert de noodzaak voor het opnieuw aanroepen van build en vermindert de belasting van de geheugentoewijzer.

Minimalisatie van de widgetboom — het tweede belangrijke aspect. Elke geneste StatelessWidget voegt één niveau toe aan de Element tree. Flutter moet bij elke weergave de hele boom doorlopen, dus hoe dieper de boom, hoe meer werk voor het framework. Het wordt aanbevolen om eenvoudige widgets te combineren in één aangepaste StatelessWidget waar dit de leesbaarheid verbetert zonder prestatieverlies.

Keys (Key) — het derde optimalisatie-element. Bij het herbouwen van een lijst of het wijzigen van de volgorde van elementen stelt een correcte key Flutter in staat oude en nieuwe elementen te matchen, waardoor het opnieuw aanmaken van widgets wordt vermeden. Voor StatelessWidget is het voldoende om ValueKey of ObjectKey te gebruiken, gebaseerd op unieke gegevensidentificatoren.

const en prestaties

Het gebruik van const in de constructor van StatelessWidget levert de grootste prestatieverbetering op wanneer de widget meerdere keren wordt gebruikt in lijsten of repetitieve structuren. Flutter vergelijkt de nieuwe widget met het bestaande Element en, als type en key overeenkomen, roept het canUpdate aan. Voor const-widgets met dezelfde parameters slaat Flutter de build-aanroep volledig over en gebruikt het gecachte resultaat.

Veelvoorkomende fouten

De eerste veelvoorkomende fout — het proberen te gebruiken van StatelessWidget waar asynchrone update nodig is. Ontwikkelaars plaatsen soms een HTTP-verzoek in de constructor van StatelessWidget, in de verwachting dat gegevens worden geladen bij creatie. In de praktijk moet de constructor licht zijn en geen bijwerkingen bevatten. Asynchrone bewerkingen worden uitgevoerd in StatefulWidget.initState of in externe services.

De tweede veelvoorkomende fout — het maken van zware berekeningen binnen de build-methode. Omdat build vaak kan worden aangeroepen (zelfs bij StatelessWidget — bij herbouw van de ouder), verminderen complexe berekeningen, aanroepen van MediaQuery.of(context) zonder caching of het maken van nieuwe objecten binnen build de prestaties. Oplossing — berekeningen verplaatsen naar aparte methoden met memoization of het gebruik van const-fabrieken.

De derde fout — het ontbreken van een const-constructor bij StatelessWidget die er een zou kunnen hebben. Als de widget niet is gedeclareerd als const, maakt Flutter een nieuwe instantie bij elke build van de ouder, zelfs als de parameters niet zijn veranderd. Dit leidt tot overmatig geheugengebruik en extra werk voor de garbage collector.

Fouten in StatelessWidget vermijden

  • Declareer de constructor altijd als const, tenzij er een reden is om dit niet te doen
  • Voer geen asynchrone bewerkingen uit binnen StatelessWidget
  • Maak geen nieuwe objecten binnen build — verplaats ze naar klassevelden
  • Gebruik Key voor widgets in dynamische lijsten
  • Controleer of de widget StatelessWidget kan zijn voordat u er StatefulWidget van maakt

Veelgestelde vragen

Wat is het verschil tussen StatelessWidget en StatefulWidget?

StatelessWidget kan zijn status na creatie niet wijzigen — het geeft alleen gegevens weer die via de constructor zijn doorgegeven. StatefulWidget maakt een apart State-object aan dat kan veranderen via setState, heeft levenscyclusmethoden en maakt asynchrone UI-updates mogelijk.

Kan StatelessWidget worden bijgewerkt?

Ja, als de ouder-widget herbouwt en nieuwe parameters doorgeeft. StatelessWidget werkt niet zelf bij, maar kan door de ouder met nieuwe gegevens worden herbouwd. Flutter vergelijkt runtimeType en Key om te beslissen of build opnieuw moet worden aangeroepen.

Waarom is een const-constructor nodig in StatelessWidget?

const stelt Flutter in staat een widget-instantie tijdens compile-time te maken en te cachen. Als twee const-widgets dezelfde parameters hebben, hergebruikt Flutter één element en slaat de build-aanroep volledig over. Dit levert een prestatieverbetering op in lijsten en repetitieve structuren.

Wat gebeurt er als StatelessWidget geen const-constructor heeft?

Flutter maakt een nieuwe instantie bij elke build van de ouder, zelfs als de parameters niet zijn veranderd. Dit verhoogt de belasting van de geheugentoewijzer en garbage collector en kan onnodige herbouw van kind-widgets veroorzaken.

Hoeveel StatelessWidget kunnen er in één applicatie zijn?

Er zijn geen beperkingen. In een typische Flutter-applicatie vormt StatelessWidget 50–80% van alle widgets. Hoe meer StatelessWidget, hoe voorspelbaarder de prestaties en hoe eenvoudiger de architectuur. Flutter is geoptimaliseerd voor efficiënte verwerking van duizenden StatelessWidget in één boom.

Samenvatting

  • StatelessWidget — de basisbouwsteen van Flutter voor het weergeven van statische inhoud, zonder interne status
  • build method — de enige abstracte methode van StatelessWidget, aangeroepen bij het inpassen van de widget in de boom of bij wijziging van parameters door de ouder
  • Immutability — alle velden van StatelessWidget worden gedeclareerd als final en kunnen niet worden gewijzigd na creatie, wat voorspelbare weergave garandeert
  • const-constructor — het belangrijkste optimalisatiemechanisme, waarmee Flutter de widget kan cachen en de build-aanroep volledig kan overslaan bij overeenkomende parameters
  • Prestaties — StatelessWidget creëert minder overhead vergeleken met StatefulWidget, omdat er geen State-object en levenscyclusbeheer nodig zijn
  • Verhouding — het wordt aanbevolen om te streven naar 50–80% StatelessWidget in het project, status naar externe lagen (Riverpod, Bloc) te verplaatsen en hoger in de boom te tillen
  • Kezeregel — als de widget StatelessWidget kan zijn, moet het StatelessWidget zijn. StatefulWidget alleen wanneer het zonder status niet kan

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