Skip to content

feature: Unified and fully customizable startup sequence (splash → boot → startup) with support for a custom Flutter widget/animation #5523

Closed

Description

@Maxcosanostra

Duplicate Check

Describe the requested feature

At the moment you can only replace a static image (splash.png) and background colors via CLI flags or pyproject.toml. Dynamic animations, SVG/Lottie clips, or arbitrary widgets are not supported.

Boot-screen and startup-screen are not covered by the splash.
After the splash, Flet shows two text-based screens—“Preparing the app…” and “Starting up the app…”—with a progress ring. They cannot be replaced by the same custom artwork, so users see three visually different screens in a row.

Community requests are still open:

  1. Issue Replace Appstartup screen with a Custom Flutter Widget #5328 – “Replace Appstartup screen with a Custom Flutter Widget” (status : Open).
  2. Discussion customizing the flet splash/loading screen #1027 – “customizing the flet splash/loading screen” (closed with “image-only” answer).
  3. Issue examples RFP: Async support in Flet Python client #128 – “How to create splash screen when Windows desktop software starts” (left unresolved).

Because of these gaps, even the most customized splash is followed by the default boot/startup screens, preventing a seamless branded launch experience.

Proposed solution:

  1. Allow developers to specify one custom Flutter widget (or route) that fully replaces the entire splash → boot → startup chain on every platform.
    Alternatively, extend the current options so that:

    a) boot_screen and startup_screen can be replaced with custom imagery/animation;

    b) splash can accept Lottie/SVG/GIF/Motion files or any Widget, similar to what flutter_native_splash offers in Flutter.

  2. Provide parameters for light/dark theme variants, text localization, and a minimum display time (to prevent blinking on fast devices).

Work-arounds (not ideal):

  1. Forking flet-build-template and editing the startup screen manually—hard to maintain after updates.
  2. Showing a “pseudo-splash” after Flet UI starts—causes noticeable delay/double flash and does not replace boot/startup.

Please add the ability to fully customize the entire startup sequence (splash + boot + startup) and/or let us specify a custom Flutter widget to replace the default screens—just like in native Flutter. This would remove the triple-screen flicker and deliver a single, cohesive branded launch experience for our users

Suggest a solution

No response

Screenshots

No response

Additional details

No response

Activity

  1. FeodorFitsner commented on Aug 9, 2025

    @FeodorFitsner
    Contributor

    Good request, thank you! That will be implemented as part of extensions.

  2. self-assigned this
    on Aug 9, 2025
  3. HappyCoder256 commented on Dec 16, 2025

    @HappyCoder256

    Is this feature ready for use?

  4. Muddassir-Farooq-official commented on Jan 4, 2026

    @Muddassir-Farooq-official

    Is this feature ready for use?

    class BootScreen extends StatelessWidget {
    const BootScreen({
    super.key,
    });

    @OverRide
    Widget build(BuildContext context) {
    return Scaffold(
    body: Center(
    child: Column(
    mainAxisAlignment: MainAxisAlignment.center,
    children: [
    const SizedBox(
    width: 30,
    height: 30,
    child: CircularProgressIndicator(strokeWidth: 3),
    ),
    const SizedBox(
    height: 10,
    ),
    Text(appBootScreenMessage, style: Theme.of(context).textTheme.bodySmall,)
    ],
    ),
    ),
    );
    }
    }

    @FeodorFitsner I found this in build template

  5. Muddassir-Farooq-official commented on Jan 14, 2026

    @Muddassir-Farooq-official

    @FeodorFitsner any update?

  6. Muddassir-Farooq-official commented on Jan 28, 2026

    @Muddassir-Farooq-official

    Good request, thank you! That will be implemented as part of extensions

    Any update.

  7. HappyCoder256 commented on Feb 3, 2026

    @HappyCoder256
  8. added a commit that references this issue on Mar 8, 2026
    83743f2
  9. ndonkoHenri commented on Oct 6, 2026

    @ndonkoHenri
    Contributor

    Thanks for the detailed request! This shipped in Flet 0.86.0 through #6616 (same answer as #5328).

    The separate "Preparing…" and "Starting up…" screens are now one persistent boot screen covering both stages, so there's no more triple-screen flicker. You can:

    • configure the built-in one (light/dark colours, theme_mode, your own prepare_message/startup_message, fade_out_duration, plus per-platform overrides via [tool.flet.<platform>.boot_screen]), or
    • replace it with your own Flutter widget (Lottie, Rive, any animation) from a Flet extension by overriding FletExtension.createBootScreen():
    [tool.flet.boot_screen]
    name = "my_screen"
    
    [tool.flet.boot_screen.my_screen]
    # any options, passed to your widget

    Your widget receives a ValueListenable<BootStatus> (stage + startup error), and Flet removes it when the first page is ready. Because it's a regular Flutter widget, it can also localize its text from the device locale. Docs: Boot screen and the extension guide. For a working example, see the spinkit boot screen in flet-spinkit.

    One part can't change: the native splash is drawn by the OS before the Flutter engine starts, so it can only be a static image and colour, never a Flutter widget. That's true in plain Flutter too, and flutter_native_splash is image-only as well. For a seamless launch, make [tool.flet.splash] match the first frame of your boot screen (same background, same logo) and start the animation in the boot screen.

    There's no built-in minimum display time yet (the boot screen is removed as soon as the app is ready). If you need one, please open a focused issue for it. Built-in Lottie/Rive boot screens are tracked in #5944. Closing this one as implemented.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

feature requestSuggestion/Request for additional feature

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions