Flutter · flutter_native_splash 2.4.8
Flutter Splash Screen with flutter_native_splash
Short answer
Add flutter_native_splash, set color and image in pubspec.yaml, and run dart run flutter_native_splash:create. Android 12+ needs its own android_12 block: a 1152×1152 image with the logo inside a 768 px circle. Use preserve() and remove() to keep it up while the app loads.
Checked against flutter_native_splash and Flutter: iOS launch screen in October 2026.
Image sizes
| Image | Size | Rule |
|---|---|---|
image (iOS, web, Android < 12) | PNG at 4x density | Centered on color |
android_12.image, no icon background | 1152×1152 px | Logo inside a 768 px circle |
android_12.image, with icon background | 960×960 px | Logo inside a 640 px circle |
android_12.branding | 800×320 px | Optional, at the bottom |
1. Add and configure
dependencies:
flutter_native_splash: ^2.4.8
flutter_native_splash:
color: "#ffffff"
image: assets/splash/logo.png
color_dark: "#101010"
image_dark: assets/splash/logo-dark.png
android_12:
color: "#ffffff"
image: assets/splash/logo-android12.png
icon_background_color: "#ffffff"
color_dark: "#101010"
image_dark: assets/splash/logo-android12-dark.pngTop-level keys don't affect Android 12 and later; only the android_12 block does. If android_12.image is missing, Android uses your launcher icon.
2. Generate
dart run flutter_native_splash:createTo go back to Flutter's default: dart run flutter_native_splash:remove.
3. Keep it visible while loading
import 'package:flutter_native_splash/flutter_native_splash.dart';
void main() {
final binding = WidgetsFlutterBinding.ensureInitialized();
FlutterNativeSplash.preserve(widgetsBinding: binding);
runApp(const MyApp());
}
// When initialization is done:
FlutterNativeSplash.remove();Without preserve(), the splash closes when Flutter draws its first frame.
Flutter splash screen problems and fixes
| You see | Why | Fix |
|---|---|---|
| Old or wrong splash on iOS | iOS caches launch screens | flutter clean, delete the app, restart the device, reinstall |
| White screen before or after the splash | iOS cache, or slow startup | Same as above; use preserve() / remove() |
| Only the icon on Android 12+ | That's the Android 12 splash design | Set android_12.image and android_12.color |
| No splash from Android Studio on API 31 | Known API 31 launch issue | Open the app from its launcher icon |
| "Module flutter_native_splash not found" | Pods not installed | Run pod install in ios/ |
| "A splash screen was provided to Flutter, but this is deprecated" | Old meta-data in the manifest | Remove SplashScreenDrawable from AndroidManifest.xml |
FAQ
What size is the Flutter splash image?
PNG at 4x density. For Android 12: 1152×1152 with the logo in a 768 px circle.
Can I use a full-screen background image on Android 12?
No. Android 12+ shows a centered icon on a solid color.
Can the splash follow my app's dark mode setting?
No. It shows before Flutter loads, so it follows the system setting.
Can the splash be animated?
Not with this package, except GIFs on web. Show an animated Flutter screen after remove().