Troubleshooting
Flutter Launchpad generates a scaffold — the last mile (SDKs, native config,
Firebase files, store keys) is yours. Most build failures trace back to a step in
the generated SETUP.md. Start there, then check the cases below.
The generated project won’t build
Section titled “The generated project won’t build”Run the bring-up steps first. A fresh scaffold isn’t buildable until you’ve fetched packages and generated code:
flutter pub get# Riverpod or generic mode with localization:flutter gen-l10n# freezed models (API models = freezed):dart run build_runner build --delete-conflicting-outputsflutter runAppLocalizations/app_localizations.dartnot found — you’re onstructured-riverpodorgenericwith localization on. Runflutter gen-l10n(orflutter pub get, sincegenerate: trueis set inpubspec.yaml).*.freezed.dart/*.g.dartnot found — you chose freezed API models. Runbuild_runneras above.Undefined name 'currentMode'or flavor errors — the compile-timeAppModelives inlib/constants/general_constants.dart; switch environments by editingcurrentModethere, not with a--dart-define.
A package is missing or won’t resolve
Section titled “A package is missing or won’t resolve”The package is in pubspec.yaml (tagged req / rec / opt) but not installed
until you run flutter pub get.
flutter pub getfails on a version solve — the catalog pins recent caret versions that assume a current Flutter/Dart. Upgrade Flutter (flutter upgrade) so your Dart SDK satisfies>=3.4.0 <4.0.0from the generatedpubspec.yaml.- You need a package that isn’t there — add it in
pubspec.yamlyourself, or regenerate with the matching toggle enabled. Flutter Launchpad only adds packages a selection pulls in. - A
reqdev package likebuild_runnerseems unused — it’s required by freezed/retrofit codegen; keep it if you use those.
Export / zip fails
Section titled “Export / zip fails”- The download is empty or
POST /exportreturns400— the config was rejected. Check the{ "error": ... }response body; fix the offending field and retry. Invalid input never partially exports. - The zip has odd compression or the system
zipis missing — Flutter Launchpad prefers the systemzipbinary and falls back to a dependency-free stored-mode writer. Both produce a valid archive; a stored zip is just larger. Installzipif you want real compression. - The root folder name looks mangled — the zip root is your
appNamewith non-alphanumeric characters replaced by_. Use alowercase_with_underscoresapp name.
Wrong Flutter / Dart SDK
Section titled “Wrong Flutter / Dart SDK”- The tool itself won’t start — Flutter Launchpad runs on Node.js ≥ 20.
Check
node -v. - The generated app needs a current SDK —
pubspec.yamlsetssdk: ">=3.4.0 <4.0.0"andflutter_lints: ^4.0.0. Older Flutter channels will fail the version solve or the analyzer. Runflutter --versionandflutter upgrade. flutter analyzereports lint errors on a clean scaffold — the project ships strict lints (analysis_options.yaml). That’s intended; the generated code is clean against them. Fix your own additions, don’t loosen the ruleset.
Firebase build errors
Section titled “Firebase build errors”Firebase toggles add the packages and a FirebaseService, but not your project’s
secrets:
- Missing
google-services.json/GoogleService-Info.plist— runflutterfire configure(or rename the generated*.examplefiles) to add the real platform config. SeeFIREBASE.md. firebase_options.dartnot found —flutterfire configuregenerates it.- Crashlytics build fails on Android — enable the Crashlytics Gradle plugin
(listed in
SETUP.md).
Runtime permission crashes
Section titled “Runtime permission crashes”Selecting permissions generates the request methods and the manifest/plist snippets, but doesn’t paste them into native files.
- App crashes when requesting a permission — copy the entries from
MANIFEST.mdintoandroid/app/src/main/AndroidManifest.xmlandios/Runner/Info.plist. Missing iOS usage strings cause an immediate crash.
The app is stuck on a maintenance / update screen
Section titled “The app is stuck on a maintenance / update screen”The maintenance gate blocks the UI based on the source you picked:
- Backend gate — the app calls
GET /settings. Returnoff_mode(withis_off: false) and aforce_updateblock whose min version is at or below the app version. Until the endpoint exists and responds correctly, the gate may block. - Firebase gate — set the Remote Config keys (
maintenance_mode,min_version,latest_version,force_update, store URLs, announcement) somaintenance_modeis off and the version thresholds pass.
Advisories in the preview
Section titled “Advisories in the preview”The notes under the preview are advisories, not errors — generation still
succeeds. They flag config mismatches (e.g. GetX + GoRouter, or Push without
Firebase messaging) and store-review nudges (contacts, background location).
Resolve them by adjusting the config, but you can export either way.