Updating with latest generated code.

This commit is contained in:
Luigi Rosso
2021-03-26 14:51:28 -07:00
parent 38cb01d192
commit 2ac6bccb9e
21 changed files with 128 additions and 105 deletions

View File

@ -53,7 +53,7 @@ abstract class CoreContext {
void markDependencyOrderDirty(); void markDependencyOrderDirty();
bool markDependenciesDirty(covariant Core rootObject); bool markDependenciesDirty(covariant Core rootObject);
void removeObject<T extends Core>(T object); void removeObject<T extends Core>(T object);
T addObject<T extends Core>(T object); T? addObject<T extends Core>(T? object);
void markNeedsAdvance(); void markNeedsAdvance();
void dirty(void Function() dirt); void dirty(void Function() dirt);
} }

View File

@ -9,7 +9,7 @@ class ArtboardImporter extends ImportStackObject {
ArtboardImporter(this.artboard); ArtboardImporter(this.artboard);
final List<LinearAnimation> animations = []; final List<LinearAnimation> animations = [];
void addComponent(Core<CoreContext> object) => artboard.addObject(object); void addComponent(Core<CoreContext>? object) => artboard.addObject(object);
void addAnimation(Animation animation) { void addAnimation(Animation animation) {
if (animation is LinearAnimation) { if (animation is LinearAnimation) {

View File

@ -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/paint/trim_path_base.dart';
import 'package:rive/src/generated/shapes/parametric_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_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/path_vertex_base.dart';
import 'package:rive/src/generated/shapes/points_path_base.dart'; import 'package:rive/src/generated/shapes/points_path_base.dart';
import 'package:rive/src/generated/shapes/polygon_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/solid_color.dart';
import 'package:rive/src/rive_core/shapes/paint/stroke.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/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/points_path.dart';
import 'package:rive/src/rive_core/shapes/polygon.dart'; import 'package:rive/src/rive_core/shapes/polygon.dart';
import 'package:rive/src/rive_core/shapes/rectangle.dart'; import 'package:rive/src/rive_core/shapes/rectangle.dart';
@ -211,8 +209,6 @@ class RiveCoreContext {
return Polygon(); return Polygon();
case StarBase.typeKey: case StarBase.typeKey:
return Star(); return Star();
case PathComposerBase.typeKey:
return PathComposer();
case CubicDetachedVertexBase.typeKey: case CubicDetachedVertexBase.typeKey:
return CubicDetachedVertex(); return CubicDetachedVertex();
case DrawRulesBase.typeKey: case DrawRulesBase.typeKey:

View File

@ -1,6 +1,7 @@
import 'dart:collection'; import 'dart:collection';
import 'package:rive/src/core/core.dart'; import 'package:rive/src/core/core.dart';
import 'package:rive/src/rive_core/animation/keyed_property.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 'package:rive/src/generated/animation/keyed_object_base.dart';
import 'linear_animation.dart'; import 'linear_animation.dart';
export 'package:rive/src/generated/animation/keyed_object_base.dart'; export 'package:rive/src/generated/animation/keyed_object_base.dart';
@ -10,14 +11,34 @@ class KeyedObject extends KeyedObjectBase<RuntimeArtboard> {
HashMap<int, KeyedProperty>(); HashMap<int, KeyedProperty>();
Iterable<KeyedProperty> get keyedProperties => _keyedProperties.values; Iterable<KeyedProperty> get keyedProperties => _keyedProperties.values;
@override @override
void onAddedDirty() {}
@override
void onAdded() {} void onAdded() {}
@override @override
void onAddedDirty() {} bool validate() {
if (!super.validate()) {
return false;
}
var component = context.resolve<Component>(objectId);
if (component == null) {
return false;
}
return true;
}
@override @override
void onRemoved() { void onRemoved() {
super.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) { bool internalAddKeyedProperty(KeyedProperty property) {
var value = _keyedProperties[property.propertyKey]; var value = _keyedProperties[property.propertyKey];
if (value != null && value != property) { if (value != null && value != property) {

View File

@ -84,7 +84,6 @@ class KeyedProperty extends KeyedPropertyBase<RuntimeArtboard>
} }
void _sortAndValidateKeyFrames() { void _sortAndValidateKeyFrames() {
assert(hasValidated);
sort(); sort();
for (int i = 0; i < _keyframes.length - 1; i++) { for (int i = 0; i < _keyframes.length - 1; i++) {
var a = _keyframes[i]; var a = _keyframes[i];

View File

@ -4,12 +4,9 @@ import 'package:rive/src/rive_core/animation/state_transition.dart';
import 'package:rive/src/generated/animation/layer_state_base.dart'; import 'package:rive/src/generated/animation/layer_state_base.dart';
export '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 { abstract class LayerState extends LayerStateBase {
final Set<StateTransition> _transitions = {}; final Set<StateTransition> _transitions = {};
Iterable<StateTransition> get transitions => _transitions; Iterable<StateTransition> get transitions => _transitions;
static final LayerState unknown = _UnknownLayerState();
@override @override
void onAdded() {} void onAdded() {}
@override @override

View File

@ -10,11 +10,18 @@ class LinearAnimation extends LinearAnimationBase {
final _keyedObjects = HashMap<int, KeyedObject>(); final _keyedObjects = HashMap<int, KeyedObject>();
Iterable<KeyedObject> get keyedObjects => _keyedObjects.values; Iterable<KeyedObject> get keyedObjects => _keyedObjects.values;
bool internalAddKeyedObject(KeyedObject object) { bool internalAddKeyedObject(KeyedObject object) {
if (internalCheckAddKeyedObject(object)) {
_keyedObjects[object.objectId] = object;
return true;
}
return false;
}
bool internalCheckAddKeyedObject(KeyedObject object) {
var value = _keyedObjects[object.objectId]; var value = _keyedObjects[object.objectId];
if (value != null && value != object) { if (value != null && value != object) {
return false; return false;
} }
_keyedObjects[object.objectId] = object;
return true; return true;
} }

View File

@ -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'; export 'package:rive/src/generated/animation/state_machine_layer_base.dart';
class StateMachineLayer extends StateMachineLayerBase { class StateMachineLayer extends StateMachineLayerBase {
LayerState _entryState = LayerState.unknown; LayerState? _entryState;
LayerState _anyState = LayerState.unknown; LayerState? _anyState;
LayerState _exitState = LayerState.unknown; LayerState? _exitState;
LayerState get entryState => _entryState; LayerState? get entryState => _entryState;
LayerState get anyState => _anyState; LayerState? get anyState => _anyState;
LayerState get exitState => _exitState; LayerState? get exitState => _exitState;
@override @override
ListBase<StateMachineComponent> machineComponentList(StateMachine machine) => ListBase<StateMachineComponent> machineComponentList(StateMachine machine) =>
machine.layers; machine.layers;

View File

@ -7,11 +7,11 @@ export 'package:rive/src/generated/animation/state_transition_base.dart';
class StateTransition extends StateTransitionBase { class StateTransition extends StateTransitionBase {
final StateTransitionConditions conditions = StateTransitionConditions(); final StateTransitionConditions conditions = StateTransitionConditions();
LayerState stateTo = LayerState.unknown; LayerState? stateTo;
static final StateTransition unknown = StateTransition(); static final StateTransition unknown = StateTransition();
@override @override
bool validate() { bool validate() {
return super.validate() && stateTo != LayerState.unknown; return super.validate() && stateTo != null;
} }
@override @override

View File

@ -1,14 +1,4 @@
import 'package:rive/src/generated/bones/skeletal_component_base.dart'; import 'package:rive/src/generated/bones/skeletal_component_base.dart';
export 'package:rive/src/generated/bones/skeletal_component_base.dart'; export 'package:rive/src/generated/bones/skeletal_component_base.dart';
class _UnknownSkeletalComponent extends SkeletalComponent { abstract class SkeletalComponent extends SkeletalComponentBase {}
@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();
}

View File

@ -32,7 +32,10 @@ class Skin extends SkinBase {
var temp = Mat2D(); var temp = Mat2D();
var bidx = 6; var bidx = 6;
for (final tendon in _tendons) { 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); var wt = Mat2D.multiply(temp, boneWorld, tendon.inverseBind);
_boneTransforms[bidx++] = wt[0]; _boneTransforms[bidx++] = wt[0];
_boneTransforms[bidx++] = wt[1]; _boneTransforms[bidx++] = wt[1];
@ -77,7 +80,7 @@ class Skin extends SkinBase {
void buildDependencies() { void buildDependencies() {
super.buildDependencies(); super.buildDependencies();
for (final tendon in _tendons) { for (final tendon in _tendons) {
tendon.bone.addDependent(this); tendon.bone?.addDependent(this);
} }
} }
@ -88,7 +91,9 @@ class Skin extends SkinBase {
case TendonBase.typeKey: case TendonBase.typeKey:
_tendons.add(child as Tendon); _tendons.add(child as Tendon);
markRebuildDependencies(); markRebuildDependencies();
if (parent is Skinnable) {
parent!.markRebuildDependencies(); parent!.markRebuildDependencies();
}
break; break;
} }
} }
@ -104,7 +109,7 @@ class Skin extends SkinBase {
} else { } else {
markRebuildDependencies(); markRebuildDependencies();
} }
parent!.markRebuildDependencies(); parent?.markRebuildDependencies();
break; break;
} }
} }

View File

@ -6,8 +6,8 @@ export 'package:rive/src/generated/bones/tendon_base.dart';
class Tendon extends TendonBase { class Tendon extends TendonBase {
final Mat2D _bind = Mat2D(); final Mat2D _bind = Mat2D();
Mat2D? _inverseBind; Mat2D? _inverseBind;
SkeletalComponent _bone = SkeletalComponent.unknown; SkeletalComponent? _bone;
SkeletalComponent get bone => _bone; SkeletalComponent? get bone => _bone;
Mat2D get inverseBind { Mat2D get inverseBind {
if (_inverseBind == null) { if (_inverseBind == null) {
_inverseBind = Mat2D(); _inverseBind = Mat2D();
@ -21,7 +21,7 @@ class Tendon extends TendonBase {
@override @override
void onAddedDirty() { void onAddedDirty() {
super.onAddedDirty(); super.onAddedDirty();
_bone = context.resolveWithDefault(boneId, SkeletalComponent.unknown); _bone = context.resolve(boneId);
_bind[0] = xx; _bind[0] = xx;
_bind[1] = xy; _bind[1] = xy;
_bind[2] = yx; _bind[2] = yx;

View File

@ -135,8 +135,10 @@ abstract class Component extends ComponentBase<RuntimeArtboard>
void onAdded() {} void onAdded() {}
@override @override
void onAddedDirty() { void onAddedDirty() {
if (parentId != Core.missingId) {
parent = context.resolve(parentId); parent = context.resolve(parentId);
} }
}
@override @override
@mustCallSuper @mustCallSuper

View File

@ -36,6 +36,9 @@ class RuntimeHeader {
throw RiveUnsupportedVersionException(riveVersion.major, throw RiveUnsupportedVersionException(riveVersion.major,
riveVersion.minor, readMajorVersion, readMinorVersion); riveVersion.minor, readMajorVersion, readMinorVersion);
} }
if (readMajorVersion == 6) {
reader.readVarUint();
}
int fileId = reader.readVarUint(); int fileId = reader.readVarUint();
var propertyFields = HashMap<int, int>(); var propertyFields = HashMap<int, int>();
var propertyKeys = <int>[]; var propertyKeys = <int>[];

View File

@ -105,6 +105,12 @@ class LinearGradient extends LinearGradientBase with ShapePaintMutator {
addDirt(ComponentDirt.transform); addDirt(ComponentDirt.transform);
} }
@override
void onAdded() {
super.onAdded();
syncColor();
}
@override @override
void opacityChanged(double from, double to) { void opacityChanged(double from, double to) {
syncColor(); syncColor();
@ -118,5 +124,8 @@ class LinearGradient extends LinearGradientBase with ShapePaintMutator {
} }
@override @override
bool validate() => super.validate() && shapePaintContainer != null; bool validate() {
print("${super.validate()} $shapePaintContainer");
return super.validate() && shapePaintContainer != null;
}
} }

View File

@ -2,6 +2,7 @@ import 'dart:ui';
import 'package:meta/meta.dart'; import 'package:meta/meta.dart';
import 'package:rive/src/rive_core/component.dart'; import 'package:rive/src/rive_core/component.dart';
import 'package:rive/src/rive_core/component_dirt.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/paint/shape_paint_mutator.dart';
import 'package:rive/src/rive_core/shapes/shape_paint_container.dart'; import 'package:rive/src/rive_core/shapes/shape_paint_container.dart';
import 'package:rive/src/generated/shapes/paint/shape_paint_base.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; Paint get paint => _paint;
ShapePaintMutator? _paintMutator; ShapePaintMutator? _paintMutator;
ShapePaintContainer? get shapePaintContainer => ShapePaintContainer? get shapePaintContainer =>
parent as ShapePaintContainer?; parent is ShapePaintContainer ? parent as ShapePaintContainer : null;
ShapePaint() { ShapePaint() {
_paint = makePaint(); _paint = makePaint();
} }
@ -33,6 +34,16 @@ abstract class ShapePaint extends ShapePaintBase {
super.childAdded(child); super.childAdded(child);
if (child is ShapePaintMutator) { if (child is ShapePaintMutator) {
_changeMutator(child as ShapePaintMutator); _changeMutator(child as ShapePaintMutator);
if (shapePaintContainer != null) {
_initMutator();
}
}
}
@override
void parentChanged(ContainerComponent? from, ContainerComponent? to) {
super.parentChanged(from, to);
if (shapePaintContainer != null) {
_initMutator(); _initMutator();
} }
} }

View File

@ -1,39 +1,28 @@
import 'dart:ui' as ui; 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.dart';
import 'package:rive/src/rive_core/component_dirt.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/math/mat2d.dart';
import 'package:rive/src/rive_core/shapes/shape.dart'; import 'package:rive/src/rive_core/shapes/shape.dart';
import 'package:rive/src/generated/shapes/path_composer_base.dart';
class PathComposer extends PathComposerBase { class PathComposer extends Component {
static final PathComposer unknown = PathComposer(); final Shape shape;
Shape? _shape; PathComposer(this.shape);
Shape? get shape => _shape; @override
Artboard? get artboard => shape.artboard;
final ui.Path worldPath = ui.Path(); final ui.Path worldPath = ui.Path();
final ui.Path localPath = ui.Path(); final ui.Path localPath = ui.Path();
ui.Path _fillPath = ui.Path(); ui.Path _fillPath = ui.Path();
ui.Path get fillPath => _fillPath; 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() { void _recomputePath() {
assert(_shape != null); var buildLocalPath = shape.wantLocalPath;
var buildLocalPath = _shape!.wantLocalPath; var buildWorldPath = shape.wantWorldPath || !buildLocalPath;
var buildWorldPath = _shape!.wantWorldPath || !buildLocalPath;
if (buildLocalPath) { if (buildLocalPath) {
localPath.reset(); localPath.reset();
var world = _shape!.worldTransform; var world = shape.worldTransform;
Mat2D inverseWorld = Mat2D(); Mat2D inverseWorld = Mat2D();
if (Mat2D.invert(inverseWorld, world)) { if (Mat2D.invert(inverseWorld, world)) {
for (final path in _shape!.paths) { for (final path in shape.paths) {
if (path.isHidden) { if (path.isHidden) {
continue; continue;
} }
@ -46,7 +35,7 @@ class PathComposer extends PathComposerBase {
} }
if (buildWorldPath) { if (buildWorldPath) {
worldPath.reset(); worldPath.reset();
for (final path in _shape!.paths) { for (final path in shape.paths) {
if (path.isHidden) { if (path.isHidden) {
continue; continue;
} }
@ -54,15 +43,14 @@ class PathComposer extends PathComposerBase {
matrix4: path.pathTransform.mat4); matrix4: path.pathTransform.mat4);
} }
} }
_fillPath = _shape!.fillInWorld ? worldPath : localPath; _fillPath = shape.fillInWorld ? worldPath : localPath;
} }
@override @override
void buildDependencies() { void buildDependencies() {
assert(_shape != null);
super.buildDependencies(); super.buildDependencies();
_shape!.addDependent(this); shape.addDependent(this);
for (final path in _shape!.paths) { for (final path in shape.paths) {
path.addDependent(this); path.addDependent(this);
} }
} }
@ -73,18 +61,4 @@ class PathComposer extends PathComposerBase {
_recomputePath(); _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);
}
}
} }

View File

@ -18,24 +18,18 @@ class Shape extends ShapeBase with ShapePaintContainer {
bool get wantLocalPath => _wantLocalPath; bool get wantLocalPath => _wantLocalPath;
bool _fillInWorld = false; bool _fillInWorld = false;
bool get fillInWorld => _fillInWorld; bool get fillInWorld => _fillInWorld;
PathComposer _pathComposer = PathComposer.unknown; late PathComposer pathComposer;
PathComposer get pathComposer => _pathComposer; Shape() {
set pathComposer(PathComposer value) { pathComposer = PathComposer(this);
if (_pathComposer == value) {
return;
} }
_pathComposer = value; ui.Path get fillPath => pathComposer.fillPath;
paintChanged();
}
ui.Path get fillPath => _pathComposer.fillPath;
bool addPath(Path path) { bool addPath(Path path) {
paintChanged(); paintChanged();
return paths.add(path); return paths.add(path);
} }
void _markComposerDirty() { void _markComposerDirty() {
_pathComposer.addDirt(ComponentDirt.path, recurse: true); pathComposer.addDirt(ComponentDirt.path, recurse: true);
invalidateStrokeEffects(); invalidateStrokeEffects();
} }
@ -123,9 +117,8 @@ class Shape extends ShapeBase with ShapePaintContainer {
void blendModeValueChanged(int from, int to) => _markBlendModeDirty(); void blendModeValueChanged(int from, int to) => _markBlendModeDirty();
@override @override
void draw(ui.Canvas canvas) { void draw(ui.Canvas canvas) {
assert(_pathComposer != PathComposer.unknown);
bool clipped = clip(canvas); bool clipped = clip(canvas);
var path = _pathComposer.fillPath; var path = pathComposer.fillPath;
if (!_fillInWorld) { if (!_fillInWorld) {
canvas.save(); canvas.save();
canvas.transform(worldTransform.mat4); canvas.transform(worldTransform.mat4);
@ -139,8 +132,8 @@ class Shape extends ShapeBase with ShapePaintContainer {
for (final stroke in strokes) { for (final stroke in strokes) {
var transformAffectsStroke = stroke.transformAffectsStroke; var transformAffectsStroke = stroke.transformAffectsStroke;
var path = transformAffectsStroke var path = transformAffectsStroke
? _pathComposer.localPath ? pathComposer.localPath
: _pathComposer.worldPath; : pathComposer.worldPath;
if (transformAffectsStroke) { if (transformAffectsStroke) {
canvas.save(); canvas.save();
canvas.transform(worldTransform.mat4); canvas.transform(worldTransform.mat4);
@ -166,4 +159,9 @@ class Shape extends ShapeBase with ShapePaintContainer {
void onStrokesChanged() => paintChanged(); void onStrokesChanged() => paintChanged();
@override @override
void onFillsChanged() => paintChanged(); void onFillsChanged() => paintChanged();
@override
void buildDependencies() {
super.buildDependencies();
pathComposer.buildDependencies();
}
} }

View File

@ -10,7 +10,7 @@ import 'package:rive/src/rive_core/rive_animation_controller.dart';
class LayerController { class LayerController {
final StateMachineLayer layer; final StateMachineLayer layer;
LayerState _currentState = LayerState.unknown; LayerState? _currentState;
LinearAnimationInstance? _animationInstanceFrom; LinearAnimationInstance? _animationInstanceFrom;
StateTransition? _transition; StateTransition? _transition;
double _mix = 1.0; double _mix = 1.0;
@ -18,7 +18,7 @@ class LayerController {
LayerController(this.layer) { LayerController(this.layer) {
_changeState(layer.entryState); _changeState(layer.entryState);
} }
bool _changeState(LayerState state) { bool _changeState(LayerState? state) {
if (state == _currentState) { if (state == _currentState) {
return false; return false;
} }
@ -27,7 +27,7 @@ class LayerController {
} }
void dispose() { void dispose() {
_changeState(LayerState.unknown); _changeState(null);
} }
bool apply(CoreContext core, double elapsedSeconds, bool apply(CoreContext core, double elapsedSeconds,
@ -71,7 +71,11 @@ class LayerController {
return tryChangeState(_currentState, inputValues); 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) { for (final transition in stateFrom.transitions) {
bool valid = true; bool valid = true;
for (final condition in transition.conditions) { for (final condition in transition.conditions) {

View File

@ -102,6 +102,13 @@ class RiveFile {
while (!reader.isEOF) { while (!reader.isEOF) {
final object = _readRuntimeObject(reader, propertyToField); final object = _readRuntimeObject(reader, propertyToField);
if (object == null) { 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; continue;
} }
@ -191,8 +198,8 @@ class RiveFile {
for (final artboard in _artboards) { for (final artboard in _artboards) {
var runtimeArtboard = artboard as RuntimeArtboard; var runtimeArtboard = artboard as RuntimeArtboard;
for (final object in runtimeArtboard.objects) { for (final object in runtimeArtboard.objects.whereNotNull()) {
if (object != null && object.validate()) { if (object.validate()) {
InternalCoreHelper.markValid(object); InternalCoreHelper.markValid(object);
} else { } else {
throw RiveFormatErrorException( throw RiveFormatErrorException(

View File

@ -19,9 +19,9 @@ class RuntimeArtboard extends Artboard implements CoreContext {
final Set<Component> _needDependenciesBuilt = {}; final Set<Component> _needDependenciesBuilt = {};
@override @override
T addObject<T extends Core>(T object) { T? addObject<T extends Core>(T? object) {
object.context = this; object?.context = this;
object.id = _objects.length; object?.id = _objects.length;
_objects.add(object); _objects.add(object);
return object; return object;