twonly-app-dependencies/lottie/test/dynamic_image_test.dart
2025-12-07 16:10:41 +01:00

96 lines
2.5 KiB
Dart

import 'dart:async';
import 'dart:io';
import 'dart:ui' as ui;
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:lottie/lottie.dart';
import 'utils.dart';
void main() {
testWidgets('Can specify ImageProvider with zip file ', (tester) async {
var size = const Size(500, 400);
tester.view.physicalSize = size;
tester.view.devicePixelRatio = 1.0;
var callCount = 0;
ImageProvider imageProviderFactory(LottieImageAsset image) {
++callCount;
return FileImage(File('example/assets/Images/WeAccept/img_0.png'));
}
Future<LottieComposition?> decoder(List<int> bytes) {
return LottieComposition.decodeZip(
bytes,
imageProviderFactory: imageProviderFactory,
);
}
var composition = (await tester.runAsync(
() => FileLottie(
File('example/assets/spinning_carrousel.zip'),
imageProviderFactory: imageProviderFactory,
decoder: decoder,
).load(),
))!;
await tester.pumpWidget(FilmStrip(composition, size: size));
expect(callCount, 2);
await expectLater(
find.byType(FilmStrip),
matchesGoldenFile('goldens/dynamic_image/zip_with_provider.png'),
);
});
testWidgets('Can specify image delegate', (tester) async {
var size = const Size(500, 400);
tester.view.physicalSize = size;
tester.view.devicePixelRatio = 1.0;
var image = await tester.runAsync(
() async => loadImage(
FileImage(File('example/assets/Images/WeAccept/img_0.png')),
),
);
var composition = (await tester.runAsync(
() async =>
FileLottie(File('example/assets/spinning_carrousel.zip')).load(),
))!;
var delegates = LottieDelegates(
image: (composition, asset) {
return image;
},
);
await tester.pumpWidget(
FilmStrip(composition, size: size, delegates: delegates),
);
await expectLater(
find.byType(FilmStrip),
matchesGoldenFile('goldens/dynamic_image/delegate.png'),
);
});
}
Future<ui.Image?> loadImage(ImageProvider provider) {
var completer = Completer<ui.Image?>();
var imageStream = provider.resolve(ImageConfiguration.empty);
late ImageStreamListener listener;
listener = ImageStreamListener(
(image, synchronousLoaded) {
imageStream.removeListener(listener);
completer.complete(image.image);
},
onError: (dynamic e, _) {
imageStream.removeListener(listener);
completer.complete();
},
);
imageStream.addListener(listener);
return completer.future;
}