pubspec.yaml — wat is het, structuur en configuratie van afhankelijkheden in Flutter

Auteur: IT Sectr Gepubliceerd: 2026-05-31 Leestijd: 8 min

pubspec.yaml — het belangrijkste configuratiebestand van een Flutter-project dat metadata, afhankelijkheden en bronnen van de applicatie definieert. Het is geschreven in YAML-formaat en wordt verwerkt door de Dart-pakketbeheerder. Volgens Dart documentation, 2025 beïnvloedt elke regel van dit bestand de build, publicatie en versiebeheer. pubspec.yaml vervangt Podfile, build.gradle en Info.plist in het Flutter-ecosysteem en combineert hun functies in één manifest.

Belangrijkste punten

  • pubspec.yaml beschrijft de naam, versie, afhankelijkheden en bronnen van een Flutter-project in YAML-formaat
  • Sectie dependencies bevat de belangrijkste bibliotheken, dev_dependencies — alleen voor ontwikkeling en tests
  • Assets worden gekoppeld door paden naar mappen met afbeeldingen, lettertypen en JSON-bestanden op te geven
  • SDK constraints stellen de minimale versie van Dart en Flutter in voor projectcompatibiliteit
  • YAML-formaat vereist strikte naleving van inspringing met twee spaties, tabbladen zijn verboden

Wat is pubspec.yaml

pubspec.yaml — is een manifestbestand in YAML-formaat dat de pakketbeheerder pub gebruikt voor het beheren van Dart- en Flutter-projecten. Het bevindt zich in de hoofdmap van het project en wordt verwerkt bij elke flutter pub get-opdracht. In tegenstelling tot andere platforms waar configuratie over meerdere bestanden is verspreid, gebruikt Flutter één gecentraliseerd manifest voor alle behoeften.

Het bestand bevat metadata: projectnaam, beschrijving, versie, auteur. Deze gegevens worden gebruikt bij het publiceren van het pakket op pub.dev en bij het bouwen van de app voor App Store en Google Play. Het veld description wordt weergegeven in zoekresultaten van pakketten, dus het moet informatief zijn en zoekwoorden bevatten waarmee andere ontwikkelaars de bibliotheek kunnen vinden.

Zonder een correct pubspec.yaml kan een Flutter-project niet worden gebouwd. Syntaxisfouten of onjuiste inspringing leiden tot onmiddellijke compilatiefout met de melding Error on line X. YAML is gevoelig voor spaties: één extra spatie verandert de datastructuur en een tabblad veroorzaakt een syntaxisfout. Daarom is het bij handmatig bewerken van pubspec.yaml belangrijk een editor te gebruiken met YAML-syntaxishighlighting, zoals VS Code met de officiële extensie voor Flutter.

Belangrijkste secties van pubspec.yaml

pubspec.yaml bestaat uit verplichte en optionele secties. Elke sectie is verantwoordelijk voor een specifiek aspect van de configuratie van het project. De volgorde van secties is niet belangrijk, maar volgens de community-conventie wordt een hiërarchie aangehouden: metadata, omgeving, afhankelijkheden, bronnen, platforms.

name en description

Het veld name stelt de unieke identificatie van het pakket in snake_case-formaat in, bestaande uit alleen kleine Latijnse letters, cijfers en underscores. Het veld description — een korte beschrijving van het project tot 180 tekens, verplicht voor publicatie op pub.dev. De beschrijving moet het doel van het pakket uitleggen, zonder de naam te herhalen, en zoekwoorden bevatten voor zoekoptimalisatie van de repository.

yaml
name: my_flutter_app
description: Takenbeheer-app met Flutter
publish_to: 'none'

version en environment

Het veld version gebruikt semantische versiebeheer major.minor.patch met een optioneel buildnummer na het plusteken (1.0.0+1). De sectie environment stelt de minimale en maximale versies van Dart en Flutter SDK in voor compatibiliteitsgarantie. Als een nieuwe versie van de SDK kritieke wijzigingen bevat die incompatibel zijn met de projectcode, wordt de compilatie onderbroken met een duidelijke foutmelding.

yaml
version: 1.0.0+1
environment:
  sdk: '>=3.2.0 <4.0.0'
  flutter: '>=3.16.0'

dependencies en dev_dependencies

De sectie dependencies somt de pakketten op die nodig zijn voor de werking van de app in runtime. De sectie dev_dependencies bevat pakketten voor testen, codegeneratie en ontwikkeling — ze komen niet in de release-build. Het scheiden van afhankelijkheden is essentieel voor prestaties: elk pakket in dependencies vergroot de grootte van de uiteindelijke APK of IPA en verhoogt de opstarttijd van de app door initialisatie van extra bibliotheken.

yaml
dependencies:
  flutter:
    sdk: flutter
  http: ^1.2.0
  provider: ^6.1.0
  shared_preferences: ^2.2.0
  cached_network_image: ^3.3.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  mockito: ^5.4.0
  build_runner: ^2.4.0

Configuratie van assets en lettertypen

De sectie flutter bevat subsecties voor het configureren van bronnen, lettertypen en platformparameters. Bronnen worden gekoppeld via een array paths met specificatie van specifieke bestanden of hele mappen. Alle paden worden relatief ten opzichte van de projecthoofdmap opgegeven, niet ten opzichte van pubspec.yaml. Dit is een belangrijk detail dat vaak verwarring veroorzaakt bij beginnende Flutter-ontwikkelaars.

yaml
flutter:
  uses-material-design: true
  assets:
    - assets/images/
    - assets/icons/
    - assets/config.json
    - assets/data/translations/
  fonts:
    - family: RobotoMono
      fonts:
        - asset: fonts/RobotoMono-Regular.ttf
        - asset: fonts/RobotoMono-Bold.ttf
          weight: 700
        - asset: fonts/RobotoMono-Italic.ttf
          style: italic

Het koppelen van assets via pubspec.yaml maakt bestanden toegankelijk via AssetBundle in runtime. Dit werkt voor afbeeldingen, JSON, tekstbestanden en alle andere bronnen. Flutter ondersteunt automatisch verschillende schermresoluties: als u images/2x/ en images/3x/ plaatst, selecteert Flutter de juiste versie van de afbeelding op basis van de device pixel ratio van het apparaat. Hiervoor volstaat het om in assets alleen de hoofdmap images/ op te geven.

Aangepaste lettertypen worden toegevoegd via de sectie fonts met opgave van family en een lijst van lettertypen. Na het wijzigen van pubspec.yaml moet flutter pub get worden uitgevoerd om de instellingen toe te passen. Lettertypen kunnen zowel globaal in het MaterialApp-thema als lokaal in specifieke widgets worden gebruikt. Voor elk lettertype kan weight (100-900) en style (normal, italic) worden opgegeven, waardoor Flutter het juiste lettertypebestand kan selecteren bij gebruik van FontWeight en FontStyle in de code.

Beheer van afhankelijkheden en versies

pub ondersteunt verschillende manieren om bronnen van afhankelijkheden op te geven: pub.dev, Git-repository's, lokale paden en privé-repository's. De keuze van de bron hangt af van de ontwikkelingsfase: voor stabiele versies wordt pub.dev gebruikt, voor forks en aangepaste wijzigingen — Git, voor parallel ontwikkelde bibliotheken — een lokaal pad.

BronSyntaxVoorbeeld
Pub.dev^1.0.0http: ^1.2.0
Gitgit: urlgit: https://github.com/user/pkg.git
Lokaal padpath: ./libpath: ../my_package
Hostedhosted: namehosted: my_private_repo

De operator ^version betekent een compatibele versie: ^1.2.0 staat versies >=1.2.0 en <2.0.0 toe. Dit is analoog aan de operator ~> in CocoaPods en de Caret-operator in npm. pub lost automatisch Dependency Hell op via een SAT-solver-algoritme dat een combinatie van versies vindt die aan alle beperkingen voldoet. Als een dergelijke combinatie niet bestaat, geeft pub een gedetailleerde melding met de conflicterende pakketten.

Het bestand pubspec.lock legt de exacte versies van afhankelijkheden vast. Het moet in het versiebeheersysteem worden bewaard voor apps om reproduceerbare builds op alle machines van het team te garanderen. Voor bibliotheken wordt pubspec.lock niet in de repository opgenomen, zodat bibliotheekgebruikers deze met verschillende versies van afhankelijkheden kunnen gebruiken. De opdracht flutter pub upgrade werkt alle afhankelijkheden bij volgens de beperkingen van pubspec.yaml, en flutter pub outdated laat zien welke pakketten kunnen worden bijgewerkt.

Configuratie van build en publicatie

Voor publicatie van de app op pub.dev worden instellingen opgegeven in de sectie publish_to. De waarde 'none' voorkomt onbedoelde publicatie van het pakket, wat belangrijk is voor interne of niet-openbare projecten. Als publish_to ontbreekt, probeert pub het pakket op de standaard pub.dev te publiceren, wat kan leiden tot ongewenste codelekkage.

De sectie flutter bevat platformparameters: generate voor automatische generatie van platformbestanden en deferred-components voor modulair laden van functionaliteit. De parameter generate: true zorgt ervoor dat Flutter automatisch platformprojecten (iOS, Android, Web) aanmaakt en bijwerkt bij het toevoegen van nieuwe platforms via flutter create --platforms. Zonder deze parameter kan de structuur van platformmappen desynchroniseren met pubspec.yaml.

yaml
flutter:
  generate: true
  deferred-components:
    - name: photoEditor
      libraries:
        - package:photo_editor/library.dart

De sectie platforms stelt de doelplatforms voor het pakket in. Voor apps wordt deze automatisch bepaald bij het toevoegen van ondersteuning voor een specifiek platform via flutter create. Platforms kunnen handmatig worden toegevoegd en verwijderd via bewerking van pubspec.yaml. Deferred Components maken het mogelijk delen van de app op aanvraag te laden, waardoor de installatiegrootte afneemt — dit is vooral relevant voor games en apps met veel zelden gebruikte inhoud.

Bij publicatie van een pakket controleert pub alle velden van pubspec.yaml op conformiteit met de vereisten van de repository. Het ontbreken van verplichte velden name, version en description leidt tot afwijzing van publicatie. Daarnaast wordt de geldigheid van de licentie, de aanwezigheid van README.md en CHANGELOG.md gecontroleerd. Pakketten met fouten van de codeanalysator (dart analyze) doorstaan de validatie ook niet. Na succesvolle publicatie wordt het pakket binnen enkele minuten beschikbaar op pub.dev.

De sectie dependency_overrides maakt het mogelijk de versie van een pakket te forceren, waarbij beperkingen uit transitieve afhankelijkheden worden genegeerd. Dit is een krachtig maar gevaarlijk mechanisme: bij verkeerd gebruik kan het leiden tot incompatibiliteit van bibliotheken. Gebruik dependency_overrides alleen tijdelijk voor het oplossen van conflicten of testen van nieuwe versies. Nadat de belangrijkste afhankelijkheden zijn hersteld, moet de override worden verwijderd om de afhankelijkheidsgraaf van het project op lange termijn niet te verstoren.

De sectie executables in pubspec.yaml maakt het mogelijk uitvoerbare scripts op te geven die pub installeert in PATH bij activatie van het pakket. Dit is handig voor CLI-tools geschreven in Dart, zoals build_runner of dart_code_metrics. De opdracht dart pub global activeert het pakket globaal, waardoor de in executables opgegeven scripts beschikbaar worden vanuit de terminal. Voor apps worden executables meestal niet gebruikt, omdat het toegangspunt wordt bepaald via main in lib/main.dart.

Veelgestelde vragen

Waarom accepteert pubspec.yaml geen tabbladen?

Het YAML-formaat verbiedt het gebruik van tabbladen voor inspringing. Gebruik precies twee spaties voor elk niveau van nesting. Een inspringingsfout leidt tot een syntaxisfout bij het uitvoeren van flutter pub get met een melding over een onverwacht teken. VS Code met de Flutter-plugin past automatisch de juiste inspringing toe.

Wat is het verschil tussen dependencies en dev_dependencies?

dependencies worden opgenomen in de uiteindelijke build van de app en zijn beschikbaar in runtime op de apparaten van gebruikers. dev_dependencies worden alleen gebruikt in de ontwikkelings- en testfase — ze komen niet in de release APK of IPA. Voorbeeld: flutter_test moet alleen in dev_dependencies staan om de grootte van de productie-build niet te vergroten.

Hoe werk ik alle afhankelijkheden in pubspec.yaml bij?

De opdracht flutter pub upgrade werkt alle afhankelijkheden bij naar de nieuwste versies die compatibel zijn met de beperkingen in pubspec.yaml. Voor het bijwerken van één pakket gebruikt u flutter pub upgrade . De opdracht flutter pub outdated toont een lijst van pakketten met verouderde versies en beschikbare updates.

Wat betekent het symbool ^ voor de pakketversie?

Het symbool ^ geeft compatibele versiebeheer (caret) aan. ^1.2.0 betekent elke versie van 1.2.0 tot 2.0.0 (exclusief 2.0.0). Dit is de standaardoperator voor het opgeven van afhankelijkheden in pubspec.yaml, die garandeert dat u correcties en kleine updates ontvangt zonder risico op grote API-wijzigingen.

Moet ik pubspec.lock toevoegen aan git?

Ja, voor apps is pubspec.lock verplicht in de repository om identieke builds te garanderen. Voor bibliotheken wordt aanbevolen het niet op te nemen, zodat bibliotheekgebruikers de nieuwste compatibele versies van afhankelijkheden ontvangen. Dit is een conventie vergelijkbaar met de regels voor Gemfile.lock in Ruby en package-lock.json in Node.js.

Samenvatting

  • pubspec.yaml — het manifest van een Flutter-project in YAML-formaat dat afhankelijkheden, bronnen en metadata beheert
  • Secties name, version, environment stellen verplichte metadata en SDK-beperkingen in voor compatibiliteit
  • dependencies bevatten de belangrijkste pakketten voor runtime, dev_dependencies — alleen voor ontwikkeling en tests
  • Assets en lettertypen worden gekoppeld via de flutter-sectie met automatische selectie van schermresolutie
  • Bronnen van afhankelijkheden: pub.dev, Git, lokale paden en privé-repository's voor verschillende scenario's
  • pubspec.lock legt versies vast voor reproduceerbare builds op alle machines van het team
  • YAML-formaat vereist inspringing met twee spaties zonder tabbladen met structuurvalidatie bij de build

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