import 'package:flutter/material.dart'; import '../app/app_theme.dart'; import '../l10n/l10n.dart'; import '../models/growth_stage.dart'; class GrowthObject extends StatelessWidget { const GrowthObject({ required this.stage, this.size = 148, this.showAmbientHalo = true, super.key, }); final GrowthStage stage; final double size; final bool showAmbientHalo; @override Widget build(BuildContext context) { final reduceMotion = MediaQuery.of(context).disableAnimations; final visuals = FocusSeedVisuals.of(context); final image = Image.asset( stage.assetPath, key: ValueKey(stage), width: size, height: size, fit: BoxFit.contain, gaplessPlayback: true, semanticLabel: localizedGrowthSemantic(context.l10n, stage), ); return SizedBox.square( dimension: size, child: Stack( alignment: Alignment.center, children: [ if (showAmbientHalo) Container( width: size * 0.76, height: size * 0.76, decoration: BoxDecoration( shape: BoxShape.circle, color: visuals.ambientTint, ), ), AnimatedSwitcher( duration: reduceMotion ? Duration.zero : const Duration(milliseconds: 420), switchInCurve: Curves.easeOutCubic, switchOutCurve: Curves.easeInCubic, transitionBuilder: (child, animation) { if (reduceMotion) { return FadeTransition(opacity: animation, child: child); } return FadeTransition( opacity: animation, child: ScaleTransition( scale: Tween(begin: 0.94, end: 1.0).animate(animation), child: child, ), ); }, child: image, ), ], ), ); } }