mirror of
https://github.com/rive-app/rive-flutter.git
synced 2025-06-27 02:07:12 +08:00
Updating with latest generated code.
This commit is contained in:
@ -53,7 +53,7 @@ abstract class CoreContext {
|
||||
void markDependencyOrderDirty();
|
||||
bool markDependenciesDirty(covariant Core rootObject);
|
||||
void removeObject<T extends Core>(T object);
|
||||
T addObject<T extends Core>(T object);
|
||||
T? addObject<T extends Core>(T? object);
|
||||
void markNeedsAdvance();
|
||||
void dirty(void Function() dirt);
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ class ArtboardImporter extends ImportStackObject {
|
||||
ArtboardImporter(this.artboard);
|
||||
final List<LinearAnimation> animations = [];
|
||||
|
||||
void addComponent(Core<CoreContext> object) => artboard.addObject(object);
|
||||
void addComponent(Core<CoreContext>? object) => artboard.addObject(object);
|
||||
|
||||
void addAnimation(Animation animation) {
|
||||
if (animation is LinearAnimation) {
|
||||
|
@ -58,7 +58,6 @@ import 'package:rive/src/generated/shapes/paint/stroke_base.dart';
|
||||
import 'package:rive/src/generated/shapes/paint/trim_path_base.dart';
|
||||
import 'package:rive/src/generated/shapes/parametric_path_base.dart';
|
||||
import 'package:rive/src/generated/shapes/path_base.dart';
|
||||
import 'package:rive/src/generated/shapes/path_composer_base.dart';
|
||||
import 'package:rive/src/generated/shapes/path_vertex_base.dart';
|
||||
import 'package:rive/src/generated/shapes/points_path_base.dart';
|
||||
import 'package:rive/src/generated/shapes/polygon_base.dart';
|
||||
@ -112,7 +111,6 @@ import 'package:rive/src/rive_core/shapes/paint/radial_gradient.dart';
|
||||
import 'package:rive/src/rive_core/shapes/paint/solid_color.dart';
|
||||
import 'package:rive/src/rive_core/shapes/paint/stroke.dart';
|
||||
import 'package:rive/src/rive_core/shapes/paint/trim_path.dart';
|
||||
import 'package:rive/src/rive_core/shapes/path_composer.dart';
|
||||
import 'package:rive/src/rive_core/shapes/points_path.dart';
|
||||
import 'package:rive/src/rive_core/shapes/polygon.dart';
|
||||
import 'package:rive/src/rive_core/shapes/rectangle.dart';
|
||||
@ -211,8 +209,6 @@ class RiveCoreContext {
|
||||
return Polygon();
|
||||
case StarBase.typeKey:
|
||||
return Star();
|
||||
case PathComposerBase.typeKey:
|
||||
return PathComposer();
|
||||
case CubicDetachedVertexBase.typeKey:
|
||||
return CubicDetachedVertex();
|
||||
case DrawRulesBase.typeKey:
|
||||
|
@ -1,6 +1,7 @@
|
||||
import 'dart:collection';
|
||||
import 'package:rive/src/core/core.dart';
|
||||
import 'package:rive/src/rive_core/animation/keyed_property.dart';
|
||||
import 'package:rive/src/rive_core/component.dart';
|
||||
import 'package:rive/src/generated/animation/keyed_object_base.dart';
|
||||
import 'linear_animation.dart';
|
||||
export 'package:rive/src/generated/animation/keyed_object_base.dart';
|
||||
@ -10,14 +11,34 @@ class KeyedObject extends KeyedObjectBase<RuntimeArtboard> {
|
||||
HashMap<int, KeyedProperty>();
|
||||
Iterable<KeyedProperty> get keyedProperties => _keyedProperties.values;
|
||||
@override
|
||||
void onAddedDirty() {}
|
||||
@override
|
||||
void onAdded() {}
|
||||
@override
|
||||
void onAddedDirty() {}
|
||||
bool validate() {
|
||||
if (!super.validate()) {
|
||||
return false;
|
||||
}
|
||||
var component = context.resolve<Component>(objectId);
|
||||
if (component == null) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@override
|
||||
void onRemoved() {
|
||||
super.onRemoved();
|
||||
}
|
||||
|
||||
bool isValidKeyedProperty(KeyedProperty property) {
|
||||
var value = _keyedProperties[property.propertyKey];
|
||||
if (value != null && value != property) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool internalAddKeyedProperty(KeyedProperty property) {
|
||||
var value = _keyedProperties[property.propertyKey];
|
||||
if (value != null && value != property) {
|
||||
|
@ -84,7 +84,6 @@ class KeyedProperty extends KeyedPropertyBase<RuntimeArtboard>
|
||||
}
|
||||
|
||||
void _sortAndValidateKeyFrames() {
|
||||
assert(hasValidated);
|
||||
sort();
|
||||
for (int i = 0; i < _keyframes.length - 1; i++) {
|
||||
var a = _keyframes[i];
|
||||
|
@ -4,12 +4,9 @@ import 'package:rive/src/rive_core/animation/state_transition.dart';
|
||||
import 'package:rive/src/generated/animation/layer_state_base.dart';
|
||||
export 'package:rive/src/generated/animation/layer_state_base.dart';
|
||||
|
||||
class _UnknownLayerState extends LayerState {}
|
||||
|
||||
abstract class LayerState extends LayerStateBase {
|
||||
final Set<StateTransition> _transitions = {};
|
||||
Iterable<StateTransition> get transitions => _transitions;
|
||||
static final LayerState unknown = _UnknownLayerState();
|
||||
@override
|
||||
void onAdded() {}
|
||||
@override
|
||||
|
@ -10,11 +10,18 @@ class LinearAnimation extends LinearAnimationBase {
|
||||
final _keyedObjects = HashMap<int, KeyedObject>();
|
||||
Iterable<KeyedObject> get keyedObjects => _keyedObjects.values;
|
||||
bool internalAddKeyedObject(KeyedObject object) {
|
||||
if (internalCheckAddKeyedObject(object)) {
|
||||
_keyedObjects[object.objectId] = object;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool internalCheckAddKeyedObject(KeyedObject object) {
|
||||
var value = _keyedObjects[object.objectId];
|
||||
if (value != null && value != object) {
|
||||
return false;
|
||||
}
|
||||
_keyedObjects[object.objectId] = object;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -10,12 +10,12 @@ import 'package:rive/src/generated/animation/state_machine_layer_base.dart';
|
||||
export 'package:rive/src/generated/animation/state_machine_layer_base.dart';
|
||||
|
||||
class StateMachineLayer extends StateMachineLayerBase {
|
||||
LayerState _entryState = LayerState.unknown;
|
||||
LayerState _anyState = LayerState.unknown;
|
||||
LayerState _exitState = LayerState.unknown;
|
||||
LayerState get entryState => _entryState;
|
||||
LayerState get anyState => _anyState;
|
||||
LayerState get exitState => _exitState;
|
||||
LayerState? _entryState;
|
||||
LayerState? _anyState;
|
||||
LayerState? _exitState;
|
||||
LayerState? get entryState => _entryState;
|
||||
LayerState? get anyState => _anyState;
|
||||
LayerState? get exitState => _exitState;
|
||||
@override
|
||||
ListBase<StateMachineComponent> machineComponentList(StateMachine machine) =>
|
||||
machine.layers;
|
||||
|
@ -7,11 +7,11 @@ export 'package:rive/src/generated/animation/state_transition_base.dart';
|
||||
|
||||
class StateTransition extends StateTransitionBase {
|
||||
final StateTransitionConditions conditions = StateTransitionConditions();
|
||||
LayerState stateTo = LayerState.unknown;
|
||||
LayerState? stateTo;
|
||||
static final StateTransition unknown = StateTransition();
|
||||
@override
|
||||
bool validate() {
|
||||
return super.validate() && stateTo != LayerState.unknown;
|
||||
return super.validate() && stateTo != null;
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -1,14 +1,4 @@
|
||||
import 'package:rive/src/generated/bones/skeletal_component_base.dart';
|
||||
export 'package:rive/src/generated/bones/skeletal_component_base.dart';
|
||||
|
||||
class _UnknownSkeletalComponent extends SkeletalComponent {
|
||||
@override
|
||||
double x = 0;
|
||||
@override
|
||||
double y = 0;
|
||||
}
|
||||
|
||||
// ignore: avoid_classes_with_only_static_members
|
||||
abstract class SkeletalComponent extends SkeletalComponentBase {
|
||||
static final SkeletalComponent unknown = _UnknownSkeletalComponent();
|
||||
}
|
||||
abstract class SkeletalComponent extends SkeletalComponentBase {}
|
||||
|
@ -32,7 +32,10 @@ class Skin extends SkinBase {
|
||||
var temp = Mat2D();
|
||||
var bidx = 6;
|
||||
for (final tendon in _tendons) {
|
||||
var boneWorld = tendon.bone.worldTransform;
|
||||
if (tendon.bone == null) {
|
||||
continue;
|
||||
}
|
||||
var boneWorld = tendon.bone!.worldTransform;
|
||||
var wt = Mat2D.multiply(temp, boneWorld, tendon.inverseBind);
|
||||
_boneTransforms[bidx++] = wt[0];
|
||||
_boneTransforms[bidx++] = wt[1];
|
||||
@ -77,7 +80,7 @@ class Skin extends SkinBase {
|
||||
void buildDependencies() {
|
||||
super.buildDependencies();
|
||||
for (final tendon in _tendons) {
|
||||
tendon.bone.addDependent(this);
|
||||
tendon.bone?.addDependent(this);
|
||||
}
|
||||
}
|
||||
|
||||
@ -88,7 +91,9 @@ class Skin extends SkinBase {
|
||||
case TendonBase.typeKey:
|
||||
_tendons.add(child as Tendon);
|
||||
markRebuildDependencies();
|
||||
parent!.markRebuildDependencies();
|
||||
if (parent is Skinnable) {
|
||||
parent!.markRebuildDependencies();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -104,7 +109,7 @@ class Skin extends SkinBase {
|
||||
} else {
|
||||
markRebuildDependencies();
|
||||
}
|
||||
parent!.markRebuildDependencies();
|
||||
parent?.markRebuildDependencies();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -6,8 +6,8 @@ export 'package:rive/src/generated/bones/tendon_base.dart';
|
||||
class Tendon extends TendonBase {
|
||||
final Mat2D _bind = Mat2D();
|
||||
Mat2D? _inverseBind;
|
||||
SkeletalComponent _bone = SkeletalComponent.unknown;
|
||||
SkeletalComponent get bone => _bone;
|
||||
SkeletalComponent? _bone;
|
||||
SkeletalComponent? get bone => _bone;
|
||||
Mat2D get inverseBind {
|
||||
if (_inverseBind == null) {
|
||||
_inverseBind = Mat2D();
|
||||
@ -21,7 +21,7 @@ class Tendon extends TendonBase {
|
||||
@override
|
||||
void onAddedDirty() {
|
||||
super.onAddedDirty();
|
||||
_bone = context.resolveWithDefault(boneId, SkeletalComponent.unknown);
|
||||
_bone = context.resolve(boneId);
|
||||
_bind[0] = xx;
|
||||
_bind[1] = xy;
|
||||
_bind[2] = yx;
|
||||
|
@ -135,7 +135,9 @@ abstract class Component extends ComponentBase<RuntimeArtboard>
|
||||
void onAdded() {}
|
||||
@override
|
||||
void onAddedDirty() {
|
||||
parent = context.resolve(parentId);
|
||||
if (parentId != Core.missingId) {
|
||||
parent = context.resolve(parentId);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -36,6 +36,9 @@ class RuntimeHeader {
|
||||
throw RiveUnsupportedVersionException(riveVersion.major,
|
||||
riveVersion.minor, readMajorVersion, readMinorVersion);
|
||||
}
|
||||
if (readMajorVersion == 6) {
|
||||
reader.readVarUint();
|
||||
}
|
||||
int fileId = reader.readVarUint();
|
||||
var propertyFields = HashMap<int, int>();
|
||||
var propertyKeys = <int>[];
|
||||
|
@ -105,6 +105,12 @@ class LinearGradient extends LinearGradientBase with ShapePaintMutator {
|
||||
addDirt(ComponentDirt.transform);
|
||||
}
|
||||
|
||||
@override
|
||||
void onAdded() {
|
||||
super.onAdded();
|
||||
syncColor();
|
||||
}
|
||||
|
||||
@override
|
||||
void opacityChanged(double from, double to) {
|
||||
syncColor();
|
||||
@ -118,5 +124,8 @@ class LinearGradient extends LinearGradientBase with ShapePaintMutator {
|
||||
}
|
||||
|
||||
@override
|
||||
bool validate() => super.validate() && shapePaintContainer != null;
|
||||
bool validate() {
|
||||
print("${super.validate()} $shapePaintContainer");
|
||||
return super.validate() && shapePaintContainer != null;
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ import 'dart:ui';
|
||||
import 'package:meta/meta.dart';
|
||||
import 'package:rive/src/rive_core/component.dart';
|
||||
import 'package:rive/src/rive_core/component_dirt.dart';
|
||||
import 'package:rive/src/rive_core/container_component.dart';
|
||||
import 'package:rive/src/rive_core/shapes/paint/shape_paint_mutator.dart';
|
||||
import 'package:rive/src/rive_core/shapes/shape_paint_container.dart';
|
||||
import 'package:rive/src/generated/shapes/paint/shape_paint_base.dart';
|
||||
@ -12,7 +13,7 @@ abstract class ShapePaint extends ShapePaintBase {
|
||||
Paint get paint => _paint;
|
||||
ShapePaintMutator? _paintMutator;
|
||||
ShapePaintContainer? get shapePaintContainer =>
|
||||
parent as ShapePaintContainer?;
|
||||
parent is ShapePaintContainer ? parent as ShapePaintContainer : null;
|
||||
ShapePaint() {
|
||||
_paint = makePaint();
|
||||
}
|
||||
@ -33,6 +34,16 @@ abstract class ShapePaint extends ShapePaintBase {
|
||||
super.childAdded(child);
|
||||
if (child is ShapePaintMutator) {
|
||||
_changeMutator(child as ShapePaintMutator);
|
||||
if (shapePaintContainer != null) {
|
||||
_initMutator();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void parentChanged(ContainerComponent? from, ContainerComponent? to) {
|
||||
super.parentChanged(from, to);
|
||||
if (shapePaintContainer != null) {
|
||||
_initMutator();
|
||||
}
|
||||
}
|
||||
|
@ -1,39 +1,28 @@
|
||||
import 'dart:ui' as ui;
|
||||
import 'package:rive/src/rive_core/artboard.dart';
|
||||
import 'package:rive/src/rive_core/component.dart';
|
||||
import 'package:rive/src/rive_core/component_dirt.dart';
|
||||
import 'package:rive/src/rive_core/math/mat2d.dart';
|
||||
import 'package:rive/src/rive_core/shapes/shape.dart';
|
||||
import 'package:rive/src/generated/shapes/path_composer_base.dart';
|
||||
|
||||
class PathComposer extends PathComposerBase {
|
||||
static final PathComposer unknown = PathComposer();
|
||||
Shape? _shape;
|
||||
Shape? get shape => _shape;
|
||||
class PathComposer extends Component {
|
||||
final Shape shape;
|
||||
PathComposer(this.shape);
|
||||
@override
|
||||
Artboard? get artboard => shape.artboard;
|
||||
final ui.Path worldPath = ui.Path();
|
||||
final ui.Path localPath = ui.Path();
|
||||
ui.Path _fillPath = ui.Path();
|
||||
ui.Path get fillPath => _fillPath;
|
||||
void _changeShape(Shape? value) {
|
||||
if (value == _shape) {
|
||||
return;
|
||||
}
|
||||
if (_shape != null && _shape!.pathComposer == this) {
|
||||
_shape!.pathComposer = PathComposer.unknown;
|
||||
}
|
||||
value?.pathComposer = this;
|
||||
_shape = value;
|
||||
}
|
||||
|
||||
void _recomputePath() {
|
||||
assert(_shape != null);
|
||||
var buildLocalPath = _shape!.wantLocalPath;
|
||||
var buildWorldPath = _shape!.wantWorldPath || !buildLocalPath;
|
||||
var buildLocalPath = shape.wantLocalPath;
|
||||
var buildWorldPath = shape.wantWorldPath || !buildLocalPath;
|
||||
if (buildLocalPath) {
|
||||
localPath.reset();
|
||||
var world = _shape!.worldTransform;
|
||||
var world = shape.worldTransform;
|
||||
Mat2D inverseWorld = Mat2D();
|
||||
if (Mat2D.invert(inverseWorld, world)) {
|
||||
for (final path in _shape!.paths) {
|
||||
for (final path in shape.paths) {
|
||||
if (path.isHidden) {
|
||||
continue;
|
||||
}
|
||||
@ -46,7 +35,7 @@ class PathComposer extends PathComposerBase {
|
||||
}
|
||||
if (buildWorldPath) {
|
||||
worldPath.reset();
|
||||
for (final path in _shape!.paths) {
|
||||
for (final path in shape.paths) {
|
||||
if (path.isHidden) {
|
||||
continue;
|
||||
}
|
||||
@ -54,15 +43,14 @@ class PathComposer extends PathComposerBase {
|
||||
matrix4: path.pathTransform.mat4);
|
||||
}
|
||||
}
|
||||
_fillPath = _shape!.fillInWorld ? worldPath : localPath;
|
||||
_fillPath = shape.fillInWorld ? worldPath : localPath;
|
||||
}
|
||||
|
||||
@override
|
||||
void buildDependencies() {
|
||||
assert(_shape != null);
|
||||
super.buildDependencies();
|
||||
_shape!.addDependent(this);
|
||||
for (final path in _shape!.paths) {
|
||||
shape.addDependent(this);
|
||||
for (final path in shape.paths) {
|
||||
path.addDependent(this);
|
||||
}
|
||||
}
|
||||
@ -73,18 +61,4 @@ class PathComposer extends PathComposerBase {
|
||||
_recomputePath();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
bool resolveArtboard() {
|
||||
_changeShape(null);
|
||||
return super.resolveArtboard();
|
||||
}
|
||||
|
||||
@override
|
||||
void visitAncestor(Component ancestor) {
|
||||
super.visitAncestor(ancestor);
|
||||
if (_shape == null && ancestor is Shape) {
|
||||
_changeShape(ancestor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,24 +18,18 @@ class Shape extends ShapeBase with ShapePaintContainer {
|
||||
bool get wantLocalPath => _wantLocalPath;
|
||||
bool _fillInWorld = false;
|
||||
bool get fillInWorld => _fillInWorld;
|
||||
PathComposer _pathComposer = PathComposer.unknown;
|
||||
PathComposer get pathComposer => _pathComposer;
|
||||
set pathComposer(PathComposer value) {
|
||||
if (_pathComposer == value) {
|
||||
return;
|
||||
}
|
||||
_pathComposer = value;
|
||||
paintChanged();
|
||||
late PathComposer pathComposer;
|
||||
Shape() {
|
||||
pathComposer = PathComposer(this);
|
||||
}
|
||||
|
||||
ui.Path get fillPath => _pathComposer.fillPath;
|
||||
ui.Path get fillPath => pathComposer.fillPath;
|
||||
bool addPath(Path path) {
|
||||
paintChanged();
|
||||
return paths.add(path);
|
||||
}
|
||||
|
||||
void _markComposerDirty() {
|
||||
_pathComposer.addDirt(ComponentDirt.path, recurse: true);
|
||||
pathComposer.addDirt(ComponentDirt.path, recurse: true);
|
||||
invalidateStrokeEffects();
|
||||
}
|
||||
|
||||
@ -123,9 +117,8 @@ class Shape extends ShapeBase with ShapePaintContainer {
|
||||
void blendModeValueChanged(int from, int to) => _markBlendModeDirty();
|
||||
@override
|
||||
void draw(ui.Canvas canvas) {
|
||||
assert(_pathComposer != PathComposer.unknown);
|
||||
bool clipped = clip(canvas);
|
||||
var path = _pathComposer.fillPath;
|
||||
var path = pathComposer.fillPath;
|
||||
if (!_fillInWorld) {
|
||||
canvas.save();
|
||||
canvas.transform(worldTransform.mat4);
|
||||
@ -139,8 +132,8 @@ class Shape extends ShapeBase with ShapePaintContainer {
|
||||
for (final stroke in strokes) {
|
||||
var transformAffectsStroke = stroke.transformAffectsStroke;
|
||||
var path = transformAffectsStroke
|
||||
? _pathComposer.localPath
|
||||
: _pathComposer.worldPath;
|
||||
? pathComposer.localPath
|
||||
: pathComposer.worldPath;
|
||||
if (transformAffectsStroke) {
|
||||
canvas.save();
|
||||
canvas.transform(worldTransform.mat4);
|
||||
@ -166,4 +159,9 @@ class Shape extends ShapeBase with ShapePaintContainer {
|
||||
void onStrokesChanged() => paintChanged();
|
||||
@override
|
||||
void onFillsChanged() => paintChanged();
|
||||
@override
|
||||
void buildDependencies() {
|
||||
super.buildDependencies();
|
||||
pathComposer.buildDependencies();
|
||||
}
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ import 'package:rive/src/rive_core/rive_animation_controller.dart';
|
||||
|
||||
class LayerController {
|
||||
final StateMachineLayer layer;
|
||||
LayerState _currentState = LayerState.unknown;
|
||||
LayerState? _currentState;
|
||||
LinearAnimationInstance? _animationInstanceFrom;
|
||||
StateTransition? _transition;
|
||||
double _mix = 1.0;
|
||||
@ -18,7 +18,7 @@ class LayerController {
|
||||
LayerController(this.layer) {
|
||||
_changeState(layer.entryState);
|
||||
}
|
||||
bool _changeState(LayerState state) {
|
||||
bool _changeState(LayerState? state) {
|
||||
if (state == _currentState) {
|
||||
return false;
|
||||
}
|
||||
@ -27,7 +27,7 @@ class LayerController {
|
||||
}
|
||||
|
||||
void dispose() {
|
||||
_changeState(LayerState.unknown);
|
||||
_changeState(null);
|
||||
}
|
||||
|
||||
bool apply(CoreContext core, double elapsedSeconds,
|
||||
@ -71,7 +71,11 @@ class LayerController {
|
||||
return tryChangeState(_currentState, inputValues);
|
||||
}
|
||||
|
||||
bool tryChangeState(LayerState stateFrom, HashMap<int, dynamic> inputValues) {
|
||||
bool tryChangeState(
|
||||
LayerState? stateFrom, HashMap<int, dynamic> inputValues) {
|
||||
if (stateFrom == null) {
|
||||
return false;
|
||||
}
|
||||
for (final transition in stateFrom.transitions) {
|
||||
bool valid = true;
|
||||
for (final condition in transition.conditions) {
|
||||
|
@ -102,6 +102,13 @@ class RiveFile {
|
||||
while (!reader.isEOF) {
|
||||
final object = _readRuntimeObject(reader, propertyToField);
|
||||
if (object == null) {
|
||||
// See if there's an artboard on the stack, need to track the null
|
||||
// object as it'll still hold an id.
|
||||
var artboardImporter =
|
||||
importStack.latest<ArtboardImporter>(ArtboardBase.typeKey);
|
||||
if (artboardImporter != null) {
|
||||
artboardImporter.addComponent(null);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -191,8 +198,8 @@ class RiveFile {
|
||||
|
||||
for (final artboard in _artboards) {
|
||||
var runtimeArtboard = artboard as RuntimeArtboard;
|
||||
for (final object in runtimeArtboard.objects) {
|
||||
if (object != null && object.validate()) {
|
||||
for (final object in runtimeArtboard.objects.whereNotNull()) {
|
||||
if (object.validate()) {
|
||||
InternalCoreHelper.markValid(object);
|
||||
} else {
|
||||
throw RiveFormatErrorException(
|
||||
|
@ -19,9 +19,9 @@ class RuntimeArtboard extends Artboard implements CoreContext {
|
||||
final Set<Component> _needDependenciesBuilt = {};
|
||||
|
||||
@override
|
||||
T addObject<T extends Core>(T object) {
|
||||
object.context = this;
|
||||
object.id = _objects.length;
|
||||
T? addObject<T extends Core>(T? object) {
|
||||
object?.context = this;
|
||||
object?.id = _objects.length;
|
||||
|
||||
_objects.add(object);
|
||||
return object;
|
||||
|
Reference in New Issue
Block a user