diff --git a/lib/game/view/widgets/bonus_animation.dart b/lib/game/view/widgets/bonus_animation.dart index b929ab65..e90ba892 100644 --- a/lib/game/view/widgets/bonus_animation.dart +++ b/lib/game/view/widgets/bonus_animation.dart @@ -1,7 +1,6 @@ // ignore_for_file: public_member_api_docs import 'package:flame/flame.dart'; -import 'package:flame/image_composition.dart'; import 'package:flame/sprite.dart'; import 'package:flame/widgets.dart'; import 'package:flutter/material.dart' hide Image; @@ -45,46 +44,43 @@ class BonusAnimation extends StatelessWidget { final VoidCallback? onCompleted; - @override - Widget build(BuildContext context) { + static Future loadAssets() { Flame.images.prefix = ''; + return Flame.images.loadAll([ + Assets.images.bonusAnimation.dashNest.keyName, + Assets.images.bonusAnimation.sparkyTurboCharge.keyName, + Assets.images.bonusAnimation.dino.keyName, + // TODO: add google word animation asset here + ]); + } - // TODO(arturplaczek): Load assets in parent widget, remove future builder - // and user image from cache. - return FutureBuilder( - future: Flame.images.load(imagePath), - builder: (BuildContext context, AsyncSnapshot snapshot) { - if (snapshot.hasData) { - final spriteSheet = SpriteSheet.fromColumnsAndRows( - image: snapshot.data!, - columns: 8, - rows: 9, - ); - final animation = spriteSheet.createAnimation( - row: 0, - stepTime: 1 / 24, - to: spriteSheet.rows * spriteSheet.columns, - loop: false, - ); - - Future.delayed( - Duration(seconds: animation.totalDuration().ceil()), - () { - onCompleted?.call(); - }, - ); - - return SizedBox( - width: double.infinity, - height: double.infinity, - child: SpriteAnimationWidget( - animation: animation, - ), - ); - } + @override + Widget build(BuildContext context) { + final spriteSheet = SpriteSheet.fromColumnsAndRows( + image: Flame.images.fromCache(imagePath), + columns: 8, + rows: 9, + ); + final animation = spriteSheet.createAnimation( + row: 0, + stepTime: 1 / 24, + to: spriteSheet.rows * spriteSheet.columns, + loop: false, + ); - return const SizedBox(); + Future.delayed( + Duration(seconds: animation.totalDuration().ceil()), + () { + onCompleted?.call(); }, ); + + return SizedBox( + width: double.infinity, + height: double.infinity, + child: SpriteAnimationWidget( + animation: animation, + ), + ); } } diff --git a/lib/game/view/widgets/widgets.dart b/lib/game/view/widgets/widgets.dart index 7e9db5c3..674577af 100644 --- a/lib/game/view/widgets/widgets.dart +++ b/lib/game/view/widgets/widgets.dart @@ -1,2 +1,3 @@ +export 'bonus_animation.dart'; export 'game_hud.dart'; export 'play_button_overlay.dart'; diff --git a/test/game/view/widgets/bonus_animation_test.dart b/test/game/view/widgets/bonus_animation_test.dart index 5463a164..c1b3191c 100644 --- a/test/game/view/widgets/bonus_animation_test.dart +++ b/test/game/view/widgets/bonus_animation_test.dart @@ -1,10 +1,8 @@ import 'dart:async'; -import 'dart:typed_data'; import 'dart:ui' as ui; import 'package:flame/assets.dart'; -import 'package:flame/flame.dart'; import 'package:flame/widgets.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -17,17 +15,12 @@ class MockImage extends Mock implements ui.Image {} void main() { TestWidgetsFlutterBinding.ensureInitialized(); - final image = decodeImageFromList(Uint8List.fromList(transparentImage)); - late Images images; - setUp(() { - images = MockImages(); - when(() => images.load(any())).thenAnswer((_) => image); - - Flame.images = images; + setUp(() async { + await BonusAnimation.loadAssets(); }); - group('renders SpriteAnimationWidget for', () { + group('loads correctly SpriteAnimationWidget for', () { testWidgets('dashNest', (tester) async { await tester.runAsync(() async { await tester.pumpWidget(