Skip to content

Instantly share code, notes, and snippets.

@AngDrew
Last active April 11, 2024 17:59
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AngDrew/569bdd51742687d5526a8257b7f1eb8f to your computer and use it in GitHub Desktop.
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
// @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());
}
@deminearchiver
Copy link

Awesome! Thank you!

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