agentleFS
ariaraminariaramin/flutter-skills/skills/flutter-native-splash-engineering/SKILL.md

flutter-native-splash-engineering

Skill8 starsChanged 48 days agoMITView on GitHub

Design, implement, review, debug, migrate, visually verify, and optimize production Android, iOS, and Web launch screens generated with flutter_native_splash. Use when a task involves flutter_native_splash YAML, splash colors/images/branding, Android 12+ SplashScreen icons or masking, iOS launch storyboards, Web pre-engine splash HTML/CSS, light/dark resources, image sizing, preserve/remove lifecycle, stuck or long splash screens, white/black startup flashes, first-frame matching, flavors or white-label splash generation, stale generated resources, CI regeneration, release-only differences, or startup-performance diagnosis tied to the native splash. Do not use for general in-app loading screens, desktop splash support, runtime dynamic splash content, or startup optimization with no flutter_native_splash/native launch-screen concern.

The file

Show its rules and text

We split this skill into the rules it gives an agent

25 rules. About 0 are common, 20 are distinctive, and 5 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈20

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  • could be automatic: a setting could enforce it
  1. Very specific:

    Treat flutter_native_splash as a native/Web resource generator, not an application loading-screen framework.

    line 8
  2. Distinctive:

    Before changing code or generated resources:

    line 14
  3. Distinctive:

    Treat Android 12+ as a separate system splash with icon masking and restricted layout.

    line 39
  4. Distinctive:

    Keep native splash content static and compile-time generated.

    line 41
  5. Distinctive:

    Do not use app-internal theme preferences to choose native dark mode.

    line 42
  6. Distinctive:

    Do not use GIF, Lottie, or unsupported native animation hacks.

    line 44
  7. Very specific:

    Never add Future.delayed merely to keep branding visible.

    line 47
  8. Very specific:

    Use preserve() only for a small, essential prerequisite and assign exactly one owner to remove().

    line 48
  9. Very specific:

    Do not run flutter clean after every edit.

    line 56
  10. Distinctive:

    Treat generated native/Web files as generated state unless the repository has an explicit manual-merge ownership strategy.

    line 58
  11. Distinctive:

    Keep one CI strategy: either commit deterministic generated files or generate them deterministically in CI.

    line 60
  12. Distinctive:

    Use flavor/brand-specific compile-time resources.

    line 62
  13. Distinctive:

    Prefer flat colors and lightweight correctly sized raster assets over huge full-screen images where the design permits.

    line 64
  14. Distinctive:

    Actual startup optimization: remove blocking awaits, reduce synchronous CPU/disk work, defer optional SDKs/network calls, and render a …

    line 73
  15. Distinctive:

    Perceived-performance optimization: remove flashes, align colors and system bars, and match the first frame.

    line 76
  16. Distinctive:

    Visual/branding change: update colors, logos, branding, or positioning.

    line 78
  17. Distinctive:

    Do not claim categories 2 or 3 make startup faster.

    line 80
  18. Very specific:

    Read only the relevant sections of references/production-guide.md.

    line 84
  19. Distinctive:

    Use these search headings:

    line 91
  20. Distinctive:

    Keep the smallest correct configuration and reuse the repository's existing asset/flavor naming conventions.

    line 117
  21. Distinctive:

    Run the generator once per relevant configuration, then review the generated native/Web diff before accepting it.

    line 119
  22. Distinctive:

    Do not hand-edit generated output unless the repository deliberately owns and documents that merge strategy.

    line 121
  23. Distinctive:

    Run configuration/generator checks and relevant Flutter analysis, then perform a full rebuild and test release-like cold launches.

    line 126
  24. Distinctive:

    every affected flavor/brand and generated-resource strategy.

    line 134
  25. Distinctive:

    Never claim startup became faster from visual timing alone.

    line 140

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Flutter Native Splash Engineering

Treat flutter_native_splash as a native/Web resource generator, not an application loading-screen framework. Optimize the startup path separately from the appearance of the OS-to-Flutter transition.

Start with evidence

Before changing code or generated resources:

  1. Inspect pubspec.yaml, pubspec.lock, Flutter/Dart constraints, target platforms, flavors, and build pipelines.
  2. Identify the locked flutter_native_splash version and whether runtime preserve()/remove() APIs are imported.
  3. Find every splash configuration file, generation command, generated-resource ownership rule, preserve/remove call, and startup owner.
  4. Inspect source asset formats, pixel dimensions, transparency, file sizes, dark variants, branding, and platform overrides.
  5. Audit all synchronous work and awaited initialization before runApp and the first stable Flutter frame.
  6. Inspect the first Flutter frame, theme/system bars, and layout for visual continuity with each native/Web splash.
  7. Separate Android pre-12, Android 12+, iOS/iPad, and Web behavior.

The bundled guide was validated against flutter_native_splash 2.4.8 on 2026-08-11. Use the installed package README, API, and changelog as the source of truth when versions differ, especially for configuration keys, Android 12+ behavior, preserve/remove, flavors, Web output, and toolchain requirements.

Preserve these invariants

  • Support only the package's declared Android, iOS, and Web targets; do not fabricate macOS, Windows, or Linux support.
  • Treat Android 12+ as a separate system splash with icon masking and restricted layout; do not reuse a pre-12 full-screen design blindly.
  • Keep native splash content static and compile-time generated.
  • Do not use app-internal theme preferences to choose native dark mode; native appearance follows platform/system resources available before Flutter runs.
  • Do not use GIF, Lottie, or unsupported native animation hacks. Continue rich animation in Flutter after the first frame.
  • Minimize work before runApp and the first frame.
  • Never add Future.delayed merely to keep branding visible.
  • Use preserve() only for a small, essential prerequisite and assign exactly one owner to remove().
  • Move long, dynamic, network-dependent, retryable, progressive, or interactive startup work into a Flutter startup/loading screen.
  • Match the first Flutter frame's background, logo placement, system bars, and theme closely enough to avoid flashes and jumps where practical.
  • Regenerate resources after configuration or source-asset changes; hot reload and hot restart do not regenerate launch resources.
  • Do not run flutter clean after every edit. Use it only when targeted regeneration and full rebuild still leave stale artifacts.
  • Treat generated native/Web files as generated state unless the repository has an explicit manual-merge ownership strategy.
  • Keep one CI strategy: either commit deterministic generated files or generate them deterministically in CI; do not mix uncontrolled approaches.
  • Use flavor/brand-specific compile-time resources; do not runtime-switch native splash branding.
  • Prefer flat colors and lightweight correctly sized raster assets over huge full-screen images where the design permits.
  • Measure actual startup in profile/release-like cold and warm launches; splash duration in debug is not a performance metric.

Classify the requested change

Identify which outcome is actually requested:

  1. Actual startup optimization: remove blocking awaits, reduce synchronous CPU/disk work, defer optional SDKs/network calls, and render a lightweight first frame sooner.
  2. Perceived-performance optimization: remove flashes, align colors and system bars, and match the first frame.
  3. Visual/branding change: update colors, logos, branding, or positioning.

Do not claim categories 2 or 3 make startup faster.

Route to the production guide

Read only the relevant sections of references/production-guide.md. Locate sections before reading them with:

rg -n '^#{1,3} (SECTION|RELATED SECTION)$' references/production-guide.md

Use these search headings:

TaskSearch headings
Understand architecture, dependency placement, generated files, or configuration`Startup ModelActual vs Perceived PerformancePackage ArchitectureRuntime Dependency DecisionFiles Modified / GeneratedCurrent ConfigurationCurrent Top-Level Configuration SurfaceRequired Background ConfigurationPlatform Overrides`
Configure colors, dark mode, backgrounds, sizing, branding, or assets`Dark ModeDark Mode SourceBackground ImagesImage Position / ScalingBrandingBranding GuidanceInput Asset FormatsAsset ResolutionAsset File SizeFlat Color vs Full Background ImageOrientation / Tablets / FoldablesAccessibility`
Implement or debug Android pre-12 and Android 12+`Android 12+Android 12 Splash ModelAndroid 12 Asset SizesAndroid 12 MaskingAndroid 12 BackgroundAndroid 12 Icon BackgroundAndroid 12 BrandingAndroid 12 AnimationAndroid 12 Testing CaveatsAndroid Pre-12android_min_sdkAndroid OrientationFullscreen and Android Edge-to-Edge`
Implement or debug iOS/iPad`iOSiOS Asset ScalingiPhone / iPadiOS Dark ModeiOS Status Bar / FullscreeniOS Launch Screen Restrictions`
Implement or debug Web splash behavior`WebWeb Generated AssetsWeb Dark ModeWeb PerformanceWeb GIF`
Generate, regenerate, restore, or troubleshoot stale resources`Generation WorkflowDefault configurationCustom Configuration PathRestore Default SplashWhen to RegenerateHot Reload / Hot RestartDo Not Ritualistically flutter clean`
Use preserve/remove or fix startup ownership and failures`Preserve and RemovepreserveremoveDeprecated Runtime APIWhen to PreserveWhen NOT to PreserveStuck Splash PreventionStartup OwnershipStartup Failure ArchitectureStartup I/O Timeouts`
Choose native splash versus Flutter loading UI`Native Splash vs Flutter Loading ScreenAuthentication StartupRemote ConfigThird-Party SDK InitializationExample Startup Anti-PatternDynamic Splash ContentAnimation DecisionSplash Duration`
Remove flashes or logo jumps and match the first frame`Smooth Native-to-Flutter TransitionFirst-Frame MatchingLogo JumpSystem Bars`
Configure flavors, white-label brands, CI, upgrades, or removal`Flavor SupportFlavor SafetyAndroid Flavor SetupiOS Flavor SetupWhite-Label ApplicationsCI/CDCI Strategy ACI Strategy BDo Not Mix Uncontrolled StrategiesUpgradesRemove Command Semantics`
Diagnose or optimize startup`Startup PerformanceStartup Work ClassificationParallel InitializationStartup CPUStartup NetworkStartup Disk I/OMeasuring StartupProfile ModeCold vs Warm StartPerformance Budget ReviewAsset Performance RulesBuild Size`
Debug, review, or prepare production`Reliability RulesDebugging GuideAnti-PatternsImplementation ChecklistStartup Audit ChecklistCode Review ChecklistProduction Readiness ChecklistVersion-Sensitive AreasDecision Framework`

For a full startup or production-readiness audit, read the entire guide after completing the repository inventory.

Implement at the real ownership boundary

  • Fix slow startup in the startup dependency graph, not by extending splash preservation.
  • Fix visual discontinuity by aligning generated resources and the first Flutter frame, not by adding delay.
  • Keep the smallest correct configuration and reuse the repository's existing asset/flavor naming conventions.
  • Run the generator once per relevant configuration, then review the generated native/Web diff before accepting it.
  • Do not hand-edit generated output unless the repository deliberately owns and documents that merge strategy.

Validate the result

Run configuration/generator checks and relevant Flutter analysis, then perform a full rebuild and test release-like cold launches. Cover changed paths from this matrix:

  • Android pre-12 and Android 12+ across representative versions;
  • Android light/dark mode, orientation, edge-to-edge, tablets, and foldables;
  • iPhone and iPad light/dark launches with correct scaling and system bars;
  • Web hard refresh before Flutter initializes, including dark mode;
  • every affected flavor/brand and generated-resource strategy;
  • preserve/remove success, timeout/failure, and exactly-one-removal ownership;
  • first-frame background/logo/system-bar continuity;
  • source and generated asset size/build-size impact;
  • profile/release cold and warm startup measurements when performance changed.

Never claim startup became faster from visual timing alone. Report any platform, OS-version, device-shape, flavor, or release-build path that was not executed.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.