preload_util.dart 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import 'dart:async';
  2. import 'package:flutter/foundation.dart';
  3. import 'package:flutter/painting.dart';
  4. import 'package:flutter/services.dart';
  5. class PreloadImage {
  6. static Future<void> loadImage(ImageProvider provider) {
  7. final config = ImageConfiguration(
  8. bundle: rootBundle,
  9. devicePixelRatio: 1,
  10. platform: defaultTargetPlatform,
  11. );
  12. final Completer<void> completer = Completer();
  13. final ImageStream stream = provider.resolve(config);
  14. late final ImageStreamListener listener;
  15. listener = ImageStreamListener(
  16. (ImageInfo image, bool sync) {
  17. debugPrint("Image ${image.debugLabel} finished loading");
  18. completer.complete();
  19. stream.removeListener(listener);
  20. },
  21. onError: (dynamic exception, StackTrace? stackTrace) {
  22. completer.complete();
  23. stream.removeListener(listener);
  24. FlutterError.reportError(
  25. FlutterErrorDetails(
  26. context: ErrorDescription('image failed to load'),
  27. library: 'image resource service',
  28. exception: exception,
  29. stack: stackTrace,
  30. silent: true,
  31. ),
  32. );
  33. },
  34. );
  35. stream.addListener(listener);
  36. return completer.future;
  37. }
  38. }