diff --git a/packages/flame/lib/src/camera/behaviors/bounded_position_behavior.dart b/packages/flame/lib/src/camera/behaviors/bounded_position_behavior.dart index 1d973024329..2ed921aef2e 100644 --- a/packages/flame/lib/src/camera/behaviors/bounded_position_behavior.dart +++ b/packages/flame/lib/src/camera/behaviors/bounded_position_behavior.dart @@ -23,6 +23,7 @@ class BoundedPositionBehavior extends Component { PositionProvider? target, double precision = 0.5, super.priority, + super.key, }) : assert(precision > 0, 'Precision must be positive: $precision'), _bounds = bounds, _target = target, diff --git a/packages/flame/lib/src/camera/behaviors/follow_behavior.dart b/packages/flame/lib/src/camera/behaviors/follow_behavior.dart index 810600766a2..da172ea6f2a 100644 --- a/packages/flame/lib/src/camera/behaviors/follow_behavior.dart +++ b/packages/flame/lib/src/camera/behaviors/follow_behavior.dart @@ -24,6 +24,7 @@ class FollowBehavior extends Component { this.horizontalOnly = false, this.verticalOnly = false, super.priority, + super.key, }) : _target = target, _owner = owner, _speed = maxSpeed, diff --git a/packages/flame/lib/src/camera/behaviors/viewport_aware_bounds_behavior.dart b/packages/flame/lib/src/camera/behaviors/viewport_aware_bounds_behavior.dart index 3368f77f4cf..55664161341 100644 --- a/packages/flame/lib/src/camera/behaviors/viewport_aware_bounds_behavior.dart +++ b/packages/flame/lib/src/camera/behaviors/viewport_aware_bounds_behavior.dart @@ -22,6 +22,7 @@ class ViewportAwareBoundsBehavior extends Component with ParentIsA { ViewportAwareBoundsBehavior({ required Shape boundsShape, + super.key, }) : _boundsShape = boundsShape; @override diff --git a/packages/flame/lib/src/camera/camera_component.dart b/packages/flame/lib/src/camera/camera_component.dart index 6bc63472e29..53619a90a06 100644 --- a/packages/flame/lib/src/camera/camera_component.dart +++ b/packages/flame/lib/src/camera/camera_component.dart @@ -47,6 +47,7 @@ class CameraComponent extends Component { Viewfinder? viewfinder, Component? backdrop, List? hudComponents, + super.key, }) : _viewport = (viewport ?? MaxViewport())..addAll(hudComponents ?? []), _viewfinder = viewfinder ?? Viewfinder(), _backdrop = backdrop ?? Component(), @@ -74,12 +75,14 @@ class CameraComponent extends Component { Viewfinder? viewfinder, Component? backdrop, List? hudComponents, + ComponentKey? key, }) : this( world: world, viewport: FixedResolutionViewport(resolution: Vector2(width, height)), viewfinder: viewfinder ?? Viewfinder(), backdrop: backdrop, hudComponents: hudComponents, + key: key, ); /// The [viewport] is the "window" through which the game world is observed. diff --git a/packages/flame/lib/src/camera/viewfinder.dart b/packages/flame/lib/src/camera/viewfinder.dart index 59279bd3cea..dd2686ab990 100644 --- a/packages/flame/lib/src/camera/viewfinder.dart +++ b/packages/flame/lib/src/camera/viewfinder.dart @@ -22,6 +22,10 @@ class Viewfinder extends Component PositionProvider, ScaleProvider, CoordinateTransform { + Viewfinder({ + super.key, + }); + /// Transform matrix used by the viewfinder. final Transform2D transform = Transform2D(); diff --git a/packages/flame/lib/src/camera/viewport.dart b/packages/flame/lib/src/camera/viewport.dart index 96d89a23be0..2fd3b511315 100644 --- a/packages/flame/lib/src/camera/viewport.dart +++ b/packages/flame/lib/src/camera/viewport.dart @@ -24,7 +24,10 @@ abstract class Viewport extends Component PositionProvider, SizeProvider, CoordinateTransform { - Viewport({super.children}); + Viewport({ + super.children, + super.key, + }); final Vector2 _size = Vector2.zero(); bool _isInitialized = false; diff --git a/packages/flame/lib/src/camera/world.dart b/packages/flame/lib/src/camera/world.dart index ddc47042860..34053704c92 100644 --- a/packages/flame/lib/src/camera/world.dart +++ b/packages/flame/lib/src/camera/world.dart @@ -19,6 +19,7 @@ class World extends Component implements CoordinateTransform { World({ super.children, super.priority = -0x7fffffff, + super.key, }); @override diff --git a/packages/flame/lib/src/components/core/component_tree_root.dart b/packages/flame/lib/src/components/core/component_tree_root.dart index ee4f8f97a01..b445f7aaa34 100644 --- a/packages/flame/lib/src/components/core/component_tree_root.dart +++ b/packages/flame/lib/src/components/core/component_tree_root.dart @@ -9,8 +9,10 @@ import 'package:meta/meta.dart'; /// functionality, namely: it contains global lifecycle events for the component /// tree. class ComponentTreeRoot extends Component { - ComponentTreeRoot({super.children}) - : _queue = RecycledQueue(_LifecycleEvent.new), + ComponentTreeRoot({ + super.children, + super.key, + }) : _queue = RecycledQueue(_LifecycleEvent.new), _blocked = {}, _componentsToRebalance = {}; diff --git a/packages/flame/lib/src/components/input/keyboard_listener_component.dart b/packages/flame/lib/src/components/input/keyboard_listener_component.dart index f39d683809b..9330f49fb5c 100644 --- a/packages/flame/lib/src/components/input/keyboard_listener_component.dart +++ b/packages/flame/lib/src/components/input/keyboard_listener_component.dart @@ -16,6 +16,7 @@ class KeyboardListenerComponent extends Component with KeyboardHandler { KeyboardListenerComponent({ Map keyUp = const {}, Map keyDown = const {}, + super.key, }) : _keyUp = keyUp, _keyDown = keyDown; diff --git a/packages/flame/lib/src/effects/anchor_by_effect.dart b/packages/flame/lib/src/effects/anchor_by_effect.dart index 7aa9123faf3..edc7b7bf812 100644 --- a/packages/flame/lib/src/effects/anchor_by_effect.dart +++ b/packages/flame/lib/src/effects/anchor_by_effect.dart @@ -24,6 +24,7 @@ class AnchorByEffect extends AnchorEffect { EffectController controller, { AnchorProvider? target, void Function()? onComplete, + super.key, }) : _offset = offset.clone(), super(controller, target, onComplete: onComplete); diff --git a/packages/flame/lib/src/effects/anchor_effect.dart b/packages/flame/lib/src/effects/anchor_effect.dart index a280ec583c4..7fbf0dd2e7e 100644 --- a/packages/flame/lib/src/effects/anchor_effect.dart +++ b/packages/flame/lib/src/effects/anchor_effect.dart @@ -1,4 +1,4 @@ -import 'package:flame/src/anchor.dart'; +import 'package:flame/components.dart'; import 'package:flame/src/effects/anchor_by_effect.dart'; import 'package:flame/src/effects/anchor_to_effect.dart'; import 'package:flame/src/effects/controllers/effect_controller.dart'; @@ -6,7 +6,6 @@ import 'package:flame/src/effects/effect.dart'; import 'package:flame/src/effects/effect_target.dart'; import 'package:flame/src/effects/measurable_effect.dart'; import 'package:flame/src/effects/provider_interfaces.dart'; -import 'package:vector_math/vector_math_64.dart'; /// Base class for effects that affect the `anchor` of their targets. /// @@ -22,6 +21,7 @@ abstract class AnchorEffect extends Effect super.controller, AnchorProvider? target, { super.onComplete, + super.key, }) { this.target = target; } @@ -31,12 +31,14 @@ abstract class AnchorEffect extends Effect EffectController controller, { AnchorProvider? target, void Function()? onComplete, + ComponentKey? key, }) => AnchorByEffect( offset, controller, target: target, onComplete: onComplete, + key: key, ); factory AnchorEffect.to( @@ -44,11 +46,13 @@ abstract class AnchorEffect extends Effect EffectController controller, { AnchorProvider? target, void Function()? onComplete, + ComponentKey? key, }) => AnchorToEffect( destination, controller, target: target, onComplete: onComplete, + key: key, ); } diff --git a/packages/flame/lib/src/effects/anchor_to_effect.dart b/packages/flame/lib/src/effects/anchor_to_effect.dart index e3c785ba47c..8b881a59f18 100644 --- a/packages/flame/lib/src/effects/anchor_to_effect.dart +++ b/packages/flame/lib/src/effects/anchor_to_effect.dart @@ -15,6 +15,7 @@ class AnchorToEffect extends AnchorEffect { EffectController controller, { AnchorProvider? target, void Function()? onComplete, + super.key, }) : _destination = destination, super(controller, target, onComplete: onComplete); diff --git a/packages/flame/lib/src/effects/color_effect.dart b/packages/flame/lib/src/effects/color_effect.dart index 3a1c291d3e2..d50ec32a3bd 100644 --- a/packages/flame/lib/src/effects/color_effect.dart +++ b/packages/flame/lib/src/effects/color_effect.dart @@ -23,6 +23,7 @@ class ColorEffect extends ComponentEffect { double opacityTo = 1, this.paintId, void Function()? onComplete, + super.key, }) : assert( opacityFrom >= 0 && opacityFrom <= 1 && diff --git a/packages/flame/lib/src/effects/component_effect.dart b/packages/flame/lib/src/effects/component_effect.dart index 52dfc95ec13..6da175afd01 100644 --- a/packages/flame/lib/src/effects/component_effect.dart +++ b/packages/flame/lib/src/effects/component_effect.dart @@ -9,6 +9,7 @@ abstract class ComponentEffect extends Effect { ComponentEffect( super.controller, { super.onComplete, + super.key, }); late T target; diff --git a/packages/flame/lib/src/effects/effect.dart b/packages/flame/lib/src/effects/effect.dart index 6c42678ec64..7ed3bf6dca4 100644 --- a/packages/flame/lib/src/effects/effect.dart +++ b/packages/flame/lib/src/effects/effect.dart @@ -27,8 +27,11 @@ import 'package:meta/meta.dart'; /// changes in the effect's target; and also the `reset()` method if they have /// non-trivial internal state. abstract class Effect extends Component { - Effect(this.controller, {this.onComplete}) - : removeOnFinish = true, + Effect( + this.controller, { + this.onComplete, + super.key, + }) : removeOnFinish = true, _paused = false, _started = false, _finished = false { @@ -210,5 +213,5 @@ abstract class Effect extends Component { /// This is a main method that MUST be implemented in every derived class. void apply(double progress); - //#endregion +//#endregion } diff --git a/packages/flame/lib/src/effects/glow_effect.dart b/packages/flame/lib/src/effects/glow_effect.dart index 00a27dda892..05a7110d766 100644 --- a/packages/flame/lib/src/effects/glow_effect.dart +++ b/packages/flame/lib/src/effects/glow_effect.dart @@ -11,7 +11,12 @@ import 'package:meta/meta.dart'; /// same component also used incremental updates. @experimental class GlowEffect extends Effect with EffectTarget { - GlowEffect(this.strength, super.controller, {this.style = BlurStyle.outer}); + GlowEffect( + this.strength, + super.controller, { + this.style = BlurStyle.outer, + super.key, + }); final BlurStyle style; final double strength; diff --git a/packages/flame/lib/src/effects/move_along_path_effect.dart b/packages/flame/lib/src/effects/move_along_path_effect.dart index 296cf8f9d0b..d26832cc3a0 100644 --- a/packages/flame/lib/src/effects/move_along_path_effect.dart +++ b/packages/flame/lib/src/effects/move_along_path_effect.dart @@ -31,6 +31,7 @@ class MoveAlongPathEffect extends MoveEffect { bool oriented = false, PositionProvider? target, void Function()? onComplete, + super.key, }) : _isAbsolute = absolute, _followDirection = oriented, super( diff --git a/packages/flame/lib/src/effects/move_by_effect.dart b/packages/flame/lib/src/effects/move_by_effect.dart index 6e854b37b8b..1e1bbf7eb67 100644 --- a/packages/flame/lib/src/effects/move_by_effect.dart +++ b/packages/flame/lib/src/effects/move_by_effect.dart @@ -23,6 +23,7 @@ class MoveByEffect extends MoveEffect { EffectController controller, { PositionProvider? target, void Function()? onComplete, + super.key, }) : _offset = offset.clone(), super(controller, target, onComplete: onComplete); diff --git a/packages/flame/lib/src/effects/move_effect.dart b/packages/flame/lib/src/effects/move_effect.dart index 8a5f3a919f7..acff5968e02 100644 --- a/packages/flame/lib/src/effects/move_effect.dart +++ b/packages/flame/lib/src/effects/move_effect.dart @@ -1,3 +1,4 @@ +import 'package:flame/components.dart'; import 'package:flame/src/effects/controllers/effect_controller.dart'; import 'package:flame/src/effects/effect.dart'; import 'package:flame/src/effects/effect_target.dart'; @@ -5,7 +6,6 @@ import 'package:flame/src/effects/measurable_effect.dart'; import 'package:flame/src/effects/move_by_effect.dart'; import 'package:flame/src/effects/move_to_effect.dart'; import 'package:flame/src/effects/provider_interfaces.dart'; -import 'package:vector_math/vector_math_64.dart'; /// Base class for effects that affect the `position` of their targets. /// @@ -21,6 +21,7 @@ abstract class MoveEffect extends Effect super.controller, PositionProvider? target, { super.onComplete, + super.key, }) { this.target = target; } @@ -30,12 +31,14 @@ abstract class MoveEffect extends Effect EffectController controller, { PositionProvider? target, void Function()? onComplete, + ComponentKey? key, }) => MoveByEffect( offset, controller, target: target, onComplete: onComplete, + key: key, ); factory MoveEffect.to( @@ -43,11 +46,13 @@ abstract class MoveEffect extends Effect EffectController controller, { PositionProvider? target, void Function()? onComplete, + ComponentKey? key, }) => MoveToEffect( destination, controller, target: target, onComplete: onComplete, + key: key, ); } diff --git a/packages/flame/lib/src/effects/move_to_effect.dart b/packages/flame/lib/src/effects/move_to_effect.dart index 9c16502d093..81e86db8612 100644 --- a/packages/flame/lib/src/effects/move_to_effect.dart +++ b/packages/flame/lib/src/effects/move_to_effect.dart @@ -24,6 +24,7 @@ class MoveToEffect extends MoveEffect { EffectController controller, { PositionProvider? target, void Function()? onComplete, + super.key, }) : _destination = destination.clone(), _offset = Vector2.zero(), super(controller, target, onComplete: onComplete); diff --git a/packages/flame/lib/src/effects/opacity_effect.dart b/packages/flame/lib/src/effects/opacity_effect.dart index 87589f90978..06cc251e3ad 100644 --- a/packages/flame/lib/src/effects/opacity_effect.dart +++ b/packages/flame/lib/src/effects/opacity_effect.dart @@ -1,3 +1,4 @@ +import 'package:flame/components.dart'; import 'package:flame/effects.dart'; /// Change the opacity of a component over time. @@ -13,6 +14,7 @@ class OpacityEffect extends Effect with EffectTarget { super.controller, { OpacityProvider? target, super.onComplete, + super.key, }) : _opacityOffset = offset { this.target = target; } @@ -23,12 +25,14 @@ class OpacityEffect extends Effect with EffectTarget { EffectController controller, { OpacityProvider? target, void Function()? onComplete, + ComponentKey? key, }) { return _OpacityToEffect( targetOpacity, controller, target: target, onComplete: onComplete, + key: key, ); } @@ -36,12 +40,14 @@ class OpacityEffect extends Effect with EffectTarget { EffectController controller, { OpacityProvider? target, void Function()? onComplete, + ComponentKey? key, }) { return _OpacityToEffect( 1.0, controller, target: target, onComplete: onComplete, + key: key, ); } @@ -49,12 +55,14 @@ class OpacityEffect extends Effect with EffectTarget { EffectController controller, { OpacityProvider? target, void Function()? onComplete, + ComponentKey? key, }) { return _OpacityToEffect( 0.0, controller, target: target, onComplete: onComplete, + key: key, ); } @@ -89,6 +97,7 @@ class _OpacityToEffect extends OpacityEffect { EffectController controller, { OpacityProvider? target, void Function()? onComplete, + super.key, }) : super.by( 0.0, controller, diff --git a/packages/flame/lib/src/effects/remove_effect.dart b/packages/flame/lib/src/effects/remove_effect.dart index e455b5356a8..0dfaa5374af 100644 --- a/packages/flame/lib/src/effects/remove_effect.dart +++ b/packages/flame/lib/src/effects/remove_effect.dart @@ -6,6 +6,7 @@ class RemoveEffect extends ComponentEffect { RemoveEffect({ double delay = 0.0, void Function()? onComplete, + super.key, }) : super( LinearEffectController(delay), onComplete: onComplete, diff --git a/packages/flame/lib/src/effects/rotate_effect.dart b/packages/flame/lib/src/effects/rotate_effect.dart index 31e2985fc1b..40a6c19c81f 100644 --- a/packages/flame/lib/src/effects/rotate_effect.dart +++ b/packages/flame/lib/src/effects/rotate_effect.dart @@ -1,3 +1,4 @@ +import 'package:flame/components.dart'; import 'package:flame/src/effects/controllers/effect_controller.dart'; import 'package:flame/src/effects/effect.dart'; import 'package:flame/src/effects/effect_target.dart'; @@ -25,17 +26,20 @@ class RotateEffect extends Effect double angle, super.controller, { super.onComplete, + super.key, }) : _angle = angle; factory RotateEffect.to( double angle, EffectController controller, { void Function()? onComplete, + ComponentKey? key, }) { return _RotateToEffect( angle, controller, onComplete: onComplete, + key: key, ); } @@ -58,6 +62,7 @@ class _RotateToEffect extends RotateEffect { double angle, EffectController controller, { void Function()? onComplete, + super.key, }) : _destinationAngle = angle, super.by(0, controller, onComplete: onComplete); diff --git a/packages/flame/lib/src/effects/scale_effect.dart b/packages/flame/lib/src/effects/scale_effect.dart index 5141813dcaf..7350b16aa51 100644 --- a/packages/flame/lib/src/effects/scale_effect.dart +++ b/packages/flame/lib/src/effects/scale_effect.dart @@ -1,8 +1,8 @@ +import 'package:flame/components.dart'; import 'package:flame/src/effects/controllers/effect_controller.dart'; import 'package:flame/src/effects/effect.dart'; import 'package:flame/src/effects/effect_target.dart'; import 'package:flame/src/effects/provider_interfaces.dart'; -import 'package:vector_math/vector_math_64.dart'; /// Scale a component. /// @@ -20,17 +20,20 @@ class ScaleEffect extends Effect with EffectTarget { Vector2 scaleFactor, super.controller, { super.onComplete, + super.key, }) : _scaleFactor = scaleFactor.clone(); factory ScaleEffect.to( Vector2 targetScale, EffectController controller, { void Function()? onComplete, + ComponentKey? key, }) => _ScaleToEffect( targetScale, controller, onComplete: onComplete, + key: key, ); final Vector2 _scaleFactor; @@ -59,6 +62,7 @@ class _ScaleToEffect extends ScaleEffect { Vector2 targetScale, EffectController controller, { void Function()? onComplete, + super.key, }) : _targetScale = targetScale.clone(), super.by( Vector2.zero(), diff --git a/packages/flame/lib/src/effects/sequence_effect.dart b/packages/flame/lib/src/effects/sequence_effect.dart index a99d76c2ffe..625146dd5ce 100644 --- a/packages/flame/lib/src/effects/sequence_effect.dart +++ b/packages/flame/lib/src/effects/sequence_effect.dart @@ -52,6 +52,7 @@ class SequenceEffect extends Effect { bool infinite = false, int repeatCount = 1, super.onComplete, + super.key, }) : assert(effects.isNotEmpty, 'The list of effects cannot be empty'), assert( !(infinite && repeatCount != 1), diff --git a/packages/flame/lib/src/effects/size_effect.dart b/packages/flame/lib/src/effects/size_effect.dart index 0c47b438270..c9acb447fb0 100644 --- a/packages/flame/lib/src/effects/size_effect.dart +++ b/packages/flame/lib/src/effects/size_effect.dart @@ -21,6 +21,7 @@ class SizeEffect extends Effect with EffectTarget { super.controller, { SizeProvider? target, super.onComplete, + super.key, }) : _offset = offset.clone() { this.target = target; } @@ -35,8 +36,14 @@ class SizeEffect extends Effect with EffectTarget { Vector2 targetSize, EffectController controller, { void Function()? onComplete, + ComponentKey? key, }) => - _SizeToEffect(targetSize, controller, onComplete: onComplete); + _SizeToEffect( + targetSize, + controller, + onComplete: onComplete, + key: key, + ); Vector2 _offset; @@ -56,6 +63,7 @@ class _SizeToEffect extends SizeEffect { Vector2 targetSize, EffectController controller, { void Function()? onComplete, + super.key, }) : _targetSize = targetSize.clone(), super.by( Vector2.zero(), diff --git a/packages/flame/lib/src/effects/transform2d_effect.dart b/packages/flame/lib/src/effects/transform2d_effect.dart index d72816f9926..58cdfdb33bb 100644 --- a/packages/flame/lib/src/effects/transform2d_effect.dart +++ b/packages/flame/lib/src/effects/transform2d_effect.dart @@ -15,6 +15,7 @@ abstract class Transform2DEffect extends ComponentEffect { Transform2DEffect( super.controller, { super.onComplete, + super.key, }); late Transform2D transform; diff --git a/packages/flame/lib/src/geometry/circle_component.dart b/packages/flame/lib/src/geometry/circle_component.dart index 55dcf949610..844badef69f 100644 --- a/packages/flame/lib/src/geometry/circle_component.dart +++ b/packages/flame/lib/src/geometry/circle_component.dart @@ -21,6 +21,7 @@ class CircleComponent extends ShapeComponent implements SizeProvider { super.priority, super.paint, super.paintLayers, + super.key, }) : super(size: Vector2.all((radius ?? 0) * 2)); /// With this constructor you define the [CircleComponent] in relation to the @@ -36,6 +37,7 @@ class CircleComponent extends ShapeComponent implements SizeProvider { super.paint, super.paintLayers, super.children, + super.key, }) : super(size: Vector2.all(relation * min(parentSize.x, parentSize.y))); @override