feat: редактирование видосов + hero анимация при переходах и зум при кадрировании

This commit is contained in:
Jganenokk
2026-08-16 21:23:56 +07:00
parent 53f0587c31
commit 3e6254bc5d
25 changed files with 6372 additions and 2261 deletions
+39
View File
@@ -65,9 +65,11 @@ double _pageOpacity(WidgetTester tester) => tester
void main() {
late ui.Image image;
late ui.Image wide;
setUpAll(() async {
image = await createTestImage(width: 4, height: 3);
wide = await createTestImage(width: 8, height: 2);
});
testWidgets('photo flies from the origin rect to the contained target', (
@@ -185,4 +187,41 @@ void main() {
expect(find.byType(Opacity), findsNothing);
expect(tester.getSize(find.byKey(const ValueKey('target'))).height, 500);
});
testWidgets('замена кадра меняет пропорции обратного перелёта', (
tester,
) async {
final hero = PhotoHeroController(
origin: () => _origin,
image: RawImageProvider(image),
);
late BuildContext context;
await tester.pumpWidget(
MaterialApp(
home: Builder(
builder: (ctx) {
context = ctx;
return const Scaffold();
},
),
),
);
final navigator = Navigator.of(context);
navigator.push(PhotoHeroRoute<void>(hero: hero, builder: (_) => _page()));
await tester.pumpAndSettle();
hero.image.value = RawImageProvider(wide);
await tester.pump();
navigator.pop();
await tester.pump();
await tester.pump(const Duration(milliseconds: 16));
expect(_flying, findsOneWidget);
final size = tester.getSize(_flying);
expect(size.width / size.height, closeTo(4, 0.2));
await tester.pump(const Duration(milliseconds: 400));
});
}