Skip to content

Instantly share code, notes, and snippets.

@szotp
Last active June 16, 2019 08:55
Show Gist options
  • Save szotp/f136b2f096555ca13bcddbeae2bd48ca to your computer and use it in GitHub Desktop.
Save szotp/f136b2f096555ca13bcddbeae2bd48ca to your computer and use it in GitHub Desktop.
import 'dart:async';
import 'dart:ui';
import 'package:flutter/widgets.dart';
// Usage:
Future<void> main() async {
await precacheImageCustom(SplashPage.image);
await precacheImageCustom(LoginPage.backgroundImage);
runApp(App());
}
Future<void> precacheImageCustom(
ImageProvider provider, {
Size size,
ImageErrorListener onError,
}) {
WidgetsFlutterBinding.ensureInitialized();
final ImageConfiguration config = ImageConfiguration(
devicePixelRatio: MediaQueryData.fromWindow(window).devicePixelRatio,
);
final Completer<void> completer = Completer<void>();
final ImageStream stream = provider.resolve(config);
void listener(ImageInfo image, bool sync) {
completer.complete();
stream.removeListener(listener);
}
void errorListener(dynamic exception, StackTrace stackTrace) {
completer.complete();
stream.removeListener(listener);
if (onError != null) {
onError(exception, stackTrace);
} else {
FlutterError.reportError(FlutterErrorDetails(
context: 'image failed to precache',
library: 'image resource service',
exception: exception,
stack: stackTrace,
silent: true,
));
}
}
stream.addListener(listener, onError: errorListener);
return completer.future;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment