Last active
March 9, 2025 00:10
-
-
Save AngDrew/569bdd51742687d5526a8257b7f1eb8f to your computer and use it in GitHub Desktop.
preload flutter image for splash screen. so there will be no blank screen blink
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// @dart=2.12 | |
// load_image.dart | |
import 'dart:async'; | |
import 'dart:ui'; | |
import 'package:flutter/foundation.dart'; | |
import 'package:flutter/painting.dart'; | |
import 'package:flutter/services.dart'; | |
Future<void> loadImage(ImageProvider provider) { | |
final ImageConfiguration config = ImageConfiguration( | |
bundle: rootBundle, | |
devicePixelRatio: window.devicePixelRatio, | |
platform: defaultTargetPlatform, | |
); | |
final Completer<void> completer = Completer<void>(); | |
final ImageStream stream = provider.resolve(config); | |
late final ImageStreamListener listener; | |
listener = ImageStreamListener((ImageInfo image, bool sync) { | |
debugPrint('Image ${image.debugLabel} finished loading'); | |
completer.complete(); | |
stream.removeListener(listener); | |
}, onError: (Object exception, StackTrace? stackTrace) { | |
completer.complete(); | |
stream.removeListener(listener); | |
FlutterError.reportError(FlutterErrorDetails( | |
context: ErrorDescription('image failed to load'), | |
library: 'image resource service', | |
exception: exception, | |
stack: stackTrace, | |
silent: true, | |
)); | |
}); | |
stream.addListener(listener); | |
return completer.future; | |
} | |
// while on main | |
import 'package:flutter/material.dart'; | |
import 'package:mifmblog/flavors.dart'; | |
import 'package:mifmblog/src/logic/services/locator.dart'; | |
import 'package:mifmblog/src/logic/utils/load_image.dart'; | |
import 'src/app.dart'; | |
import 'src/settings/settings_controller.dart'; | |
import 'src/settings/settings_service.dart'; | |
Future<void> main() async { | |
WidgetsFlutterBinding.ensureInitialized(); | |
await loadImage( | |
const AssetImage('assets/images/global/auth_bg.png'), | |
); | |
await loadImage( | |
const AssetImage('assets/images/global/splash_bg.png'), | |
); | |
runApp(MyApp()); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Awesome! Thank you!