Avoid a few non-null assertions in inspector (#8862)
diff --git a/packages/devtools_app/lib/src/screens/inspector/inspector_data_models.dart b/packages/devtools_app/lib/src/screens/inspector/inspector_data_models.dart index 618bd65..4d52c28 100644 --- a/packages/devtools_app/lib/src/screens/inspector/inspector_data_models.dart +++ b/packages/devtools_app/lib/src/screens/inspector/inspector_data_models.dart
@@ -634,10 +634,10 @@ size: Size(widths[i], heights[i]), offset: Offset.zero, realSize: displayChildren[i].size, + layoutProperties: displayChildren[i], ) ..mainAxisOffset = calculateMainAxisOffset(i) - ..crossAxisOffset = calculateCrossAxisOffset(i) - ..layoutProperties = displayChildren[i], + ..crossAxisOffset = calculateCrossAxisOffset(i), ); } @@ -645,16 +645,18 @@ final actualLeadingSpace = leadingSpace(freeSpace); final actualBetweenSpace = betweenSpace(freeSpace); final renderPropsWithFullCrossAxisDimension = - RenderProperties(axis: direction) + RenderProperties( + axis: direction, + isFreeSpace: true, + layoutProperties: this, + ) ..crossAxisDimension = maxSizeAvailable(crossAxisDirection) ..crossAxisRealDimension = dimension(crossAxisDirection) - ..crossAxisOffset = 0.0 - ..isFreeSpace = true - ..layoutProperties = this; + ..crossAxisOffset = 0.0; if (actualLeadingSpace > 0.0 && displayMainAxisAlignment != MainAxisAlignment.start) { spaces.add( - renderPropsWithFullCrossAxisDimension.clone() + renderPropsWithFullCrossAxisDimension.copyWith() ..mainAxisOffset = 0.0 ..mainAxisDimension = renderLeadingSpace ..mainAxisRealDimension = actualLeadingSpace, @@ -664,7 +666,7 @@ for (var i = 0; i < childrenRenderProps.length - 1; ++i) { final child = childrenRenderProps[i]; spaces.add( - renderPropsWithFullCrossAxisDimension.clone() + renderPropsWithFullCrossAxisDimension.copyWith() ..mainAxisDimension = renderBetweenSpace ..mainAxisRealDimension = actualBetweenSpace ..mainAxisOffset = child.mainAxisOffset + child.mainAxisDimension, @@ -674,7 +676,7 @@ if (actualLeadingSpace > 0.0 && displayMainAxisAlignment != MainAxisAlignment.end) { spaces.add( - renderPropsWithFullCrossAxisDimension.clone() + renderPropsWithFullCrossAxisDimension.copyWith() ..mainAxisOffset = childrenRenderProps.last.mainAxisDimension + childrenRenderProps.last.mainAxisOffset @@ -700,7 +702,7 @@ } final renderProperties = childrenRenderProperties[i]; - final space = renderProperties.clone()..isFreeSpace = true; + final space = renderProperties.copyWith(isFreeSpace: true); space.crossAxisRealDimension = crossAxisDimension - space.crossAxisRealDimension; @@ -711,9 +713,9 @@ space.crossAxisDimension *= 0.5; final crossAxisRealDimension = space.crossAxisRealDimension; space.crossAxisRealDimension = crossAxisRealDimension * 0.5; - spaces.add(space.clone()..crossAxisOffset = 0.0); + spaces.add(space.copyWith()..crossAxisOffset = 0.0); spaces.add( - space.clone() + space.copyWith() ..crossAxisOffset = renderProperties.crossAxisDimension + renderProperties.crossAxisOffset, @@ -741,15 +743,15 @@ static final _textBaselineNamesToValues = TextBaseline.values.asNameMap(); } -/// RenderProperties contains information for rendering a [LayoutProperties] node +/// Information for rendering a [LayoutProperties] node. class RenderProperties { RenderProperties({ required this.axis, + required this.layoutProperties, + this.isFreeSpace = false, Size? size, Offset? offset, Size? realSize, - this.layoutProperties, - this.isFreeSpace = false, }) : width = size?.width ?? 0.0, height = size?.height ?? 0.0, realWidth = realSize?.width ?? 0.0, @@ -759,15 +761,15 @@ final Axis axis; - /// represents which node is rendered for this object. - LayoutProperties? layoutProperties; + /// Represents which node is rendered for this object. + final LayoutProperties layoutProperties; + + final bool isFreeSpace; double dx, dy; double width, height; double realWidth, realHeight; - bool isFreeSpace; - Size get size => Size(width, height); Size get realSize => Size(realWidth, realHeight); @@ -836,14 +838,14 @@ } } - RenderProperties clone() { + RenderProperties copyWith({bool? isFreeSpace}) { return RenderProperties( axis: axis, size: size, offset: offset, realSize: realSize, layoutProperties: layoutProperties, - isFreeSpace: isFreeSpace, + isFreeSpace: isFreeSpace ?? this.isFreeSpace, ); }
diff --git a/packages/devtools_app/lib/src/screens/inspector/layout_explorer/flex/flex.dart b/packages/devtools_app/lib/src/screens/inspector/layout_explorer/flex/flex.dart index 50d81cf..4980a44 100644 --- a/packages/devtools_app/lib/src/screens/inspector/layout_explorer/flex/flex.dart +++ b/packages/devtools_app/lib/src/screens/inspector/layout_explorer/flex/flex.dart
@@ -590,8 +590,7 @@ // TODO(polina-c, jacob314): consider refactoring to remove `!`. FlexLayoutProperties get root => state.properties!; - // TODO(polina-c, jacob314): consider refactoring to remove `!`. - LayoutProperties get properties => renderProperties.layoutProperties!; + LayoutProperties get properties => renderProperties.layoutProperties; ObjectGroup? get objectGroup => properties.node.objectGroupApi as ObjectGroup?;
diff --git a/packages/devtools_app/lib/src/screens/inspector/layout_explorer/flex/utils.dart b/packages/devtools_app/lib/src/screens/inspector/layout_explorer/flex/utils.dart index 66b9bc8..482152d 100644 --- a/packages/devtools_app/lib/src/screens/inspector/layout_explorer/flex/utils.dart +++ b/packages/devtools_app/lib/src/screens/inspector/layout_explorer/flex/utils.dart
@@ -64,10 +64,9 @@ offset: Offset.lerp(beginProps.offset, endProps.offset, t), size: Size.lerp(beginProps.size, endProps.size, t), realSize: Size.lerp(beginProps.realSize, endProps.realSize, t), - // TODO(polina-c, jacob314): crnsider refactoring to get rid of `!`. layoutProperties: AnimatedLayoutProperties( - beginProps.layoutProperties!, - endProps.layoutProperties!, + beginProps.layoutProperties, + endProps.layoutProperties, animation, ), ),
diff --git a/packages/devtools_app/lib/src/screens/inspector/layout_explorer/ui/free_space.dart b/packages/devtools_app/lib/src/screens/inspector/layout_explorer/ui/free_space.dart index e540912..8f4c7e0 100644 --- a/packages/devtools_app/lib/src/screens/inspector/layout_explorer/ui/free_space.dart +++ b/packages/devtools_app/lib/src/screens/inspector/layout_explorer/ui/free_space.dart
@@ -23,7 +23,7 @@ 'h=${toStringAsFixed(renderProperties.realHeight)}'; final widthDescription = 'w=${toStringAsFixed(renderProperties.realWidth)}'; final showWidth = - renderProperties.realWidth != renderProperties.layoutProperties?.width; + renderProperties.realWidth != renderProperties.layoutProperties.width; final widthWidget = Column( mainAxisAlignment: MainAxisAlignment.center, children: [
diff --git a/packages/devtools_app/lib/src/screens/inspector_v2/inspector_data_models.dart b/packages/devtools_app/lib/src/screens/inspector_v2/inspector_data_models.dart index 7b16198..b9c5ba8 100644 --- a/packages/devtools_app/lib/src/screens/inspector_v2/inspector_data_models.dart +++ b/packages/devtools_app/lib/src/screens/inspector_v2/inspector_data_models.dart
@@ -728,10 +728,10 @@ size: Size(widths[i], heights[i]), offset: Offset.zero, realSize: displayChildren[i].size, + layoutProperties: displayChildren[i], ) ..mainAxisOffset = calculateMainAxisOffset(i) - ..crossAxisOffset = calculateCrossAxisOffset(i) - ..layoutProperties = displayChildren[i], + ..crossAxisOffset = calculateCrossAxisOffset(i), ); } @@ -739,16 +739,18 @@ final actualLeadingSpace = leadingSpace(freeSpace); final actualBetweenSpace = betweenSpace(freeSpace); final renderPropsWithFullCrossAxisDimension = - RenderProperties(axis: direction) + RenderProperties( + axis: direction, + isFreeSpace: true, + layoutProperties: this, + ) ..crossAxisDimension = maxSizeAvailable(crossAxisDirection) ..crossAxisRealDimension = dimension(crossAxisDirection) - ..crossAxisOffset = 0.0 - ..isFreeSpace = true - ..layoutProperties = this; + ..crossAxisOffset = 0.0; if (actualLeadingSpace > 0.0 && displayMainAxisAlignment != MainAxisAlignment.start) { spaces.add( - renderPropsWithFullCrossAxisDimension.clone() + renderPropsWithFullCrossAxisDimension.copyWith() ..mainAxisOffset = 0.0 ..mainAxisDimension = renderLeadingSpace ..mainAxisRealDimension = actualLeadingSpace, @@ -758,7 +760,7 @@ for (var i = 0; i < childrenRenderProps.length - 1; ++i) { final child = childrenRenderProps[i]; spaces.add( - renderPropsWithFullCrossAxisDimension.clone() + renderPropsWithFullCrossAxisDimension.copyWith() ..mainAxisDimension = renderBetweenSpace ..mainAxisRealDimension = actualBetweenSpace ..mainAxisOffset = child.mainAxisOffset + child.mainAxisDimension, @@ -768,7 +770,7 @@ if (actualLeadingSpace > 0.0 && displayMainAxisAlignment != MainAxisAlignment.end) { spaces.add( - renderPropsWithFullCrossAxisDimension.clone() + renderPropsWithFullCrossAxisDimension.copyWith() ..mainAxisOffset = childrenRenderProps.last.mainAxisDimension + childrenRenderProps.last.mainAxisOffset @@ -794,7 +796,7 @@ } final renderProperties = childrenRenderProperties[i]; - final space = renderProperties.clone()..isFreeSpace = true; + final space = renderProperties.copyWith(isFreeSpace: true); space.crossAxisRealDimension = crossAxisDimension - space.crossAxisRealDimension; @@ -805,9 +807,9 @@ space.crossAxisDimension *= 0.5; final crossAxisRealDimension = space.crossAxisRealDimension; space.crossAxisRealDimension = crossAxisRealDimension * 0.5; - spaces.add(space.clone()..crossAxisOffset = 0.0); + spaces.add(space.copyWith()..crossAxisOffset = 0.0); spaces.add( - space.clone() + space.copyWith() ..crossAxisOffset = renderProperties.crossAxisDimension + renderProperties.crossAxisOffset, @@ -835,15 +837,15 @@ static final _textBaselineNamesToValues = TextBaseline.values.asNameMap(); } -/// RenderProperties contains information for rendering a [LayoutProperties] node +/// Information for rendering a [LayoutProperties] node. class RenderProperties { RenderProperties({ required this.axis, + required this.layoutProperties, + this.isFreeSpace = false, Size? size, Offset? offset, Size? realSize, - this.layoutProperties, - this.isFreeSpace = false, }) : width = size?.width ?? 0.0, height = size?.height ?? 0.0, realWidth = realSize?.width ?? 0.0, @@ -853,15 +855,15 @@ final Axis axis; - /// represents which node is rendered for this object. - LayoutProperties? layoutProperties; + /// Represents which node is rendered for this object. + final LayoutProperties layoutProperties; + + final bool isFreeSpace; double dx, dy; double width, height; double realWidth, realHeight; - bool isFreeSpace; - Size get size => Size(width, height); Size get realSize => Size(realWidth, realHeight); @@ -930,14 +932,14 @@ } } - RenderProperties clone() { + RenderProperties copyWith({bool? isFreeSpace}) { return RenderProperties( axis: axis, size: size, offset: offset, realSize: realSize, layoutProperties: layoutProperties, - isFreeSpace: isFreeSpace, + isFreeSpace: isFreeSpace ?? this.isFreeSpace, ); }
diff --git a/packages/devtools_app/lib/src/screens/inspector_v2/layout_explorer/flex/flex.dart b/packages/devtools_app/lib/src/screens/inspector_v2/layout_explorer/flex/flex.dart index 2c434d8..8b53303 100644 --- a/packages/devtools_app/lib/src/screens/inspector_v2/layout_explorer/flex/flex.dart +++ b/packages/devtools_app/lib/src/screens/inspector_v2/layout_explorer/flex/flex.dart
@@ -591,8 +591,7 @@ // TODO(polina-c, jacob314): consider refactoring to remove `!`. FlexLayoutProperties get root => state.properties!; - // TODO(polina-c, jacob314): consider refactoring to remove `!`. - LayoutProperties get properties => renderProperties.layoutProperties!; + LayoutProperties get properties => renderProperties.layoutProperties; ObjectGroup? get objectGroup => properties.node.objectGroupApi as ObjectGroup?;
diff --git a/packages/devtools_app/lib/src/screens/inspector_v2/layout_explorer/flex/utils.dart b/packages/devtools_app/lib/src/screens/inspector_v2/layout_explorer/flex/utils.dart index 1e674dc..14c775f 100644 --- a/packages/devtools_app/lib/src/screens/inspector_v2/layout_explorer/flex/utils.dart +++ b/packages/devtools_app/lib/src/screens/inspector_v2/layout_explorer/flex/utils.dart
@@ -64,10 +64,9 @@ offset: Offset.lerp(beginProps.offset, endProps.offset, t), size: Size.lerp(beginProps.size, endProps.size, t), realSize: Size.lerp(beginProps.realSize, endProps.realSize, t), - // TODO(polina-c, jacob314): crnsider refactoring to get rid of `!`. layoutProperties: AnimatedLayoutProperties( - beginProps.layoutProperties!, - endProps.layoutProperties!, + beginProps.layoutProperties, + endProps.layoutProperties, animation, ), ),
diff --git a/packages/devtools_app/lib/src/screens/inspector_v2/layout_explorer/ui/free_space.dart b/packages/devtools_app/lib/src/screens/inspector_v2/layout_explorer/ui/free_space.dart index 010f4bb..3d1e679 100644 --- a/packages/devtools_app/lib/src/screens/inspector_v2/layout_explorer/ui/free_space.dart +++ b/packages/devtools_app/lib/src/screens/inspector_v2/layout_explorer/ui/free_space.dart
@@ -23,7 +23,7 @@ 'h=${toStringAsFixed(renderProperties.realHeight)}'; final widthDescription = 'w=${toStringAsFixed(renderProperties.realWidth)}'; final showWidth = - renderProperties.realWidth != renderProperties.layoutProperties?.width; + renderProperties.realWidth != renderProperties.layoutProperties.width; final widthWidget = Column( mainAxisAlignment: MainAxisAlignment.center, children: [
diff --git a/packages/devtools_app/test/screens/inspector/layout_explorer/inspector_data_models_test.dart b/packages/devtools_app/test/screens/inspector/layout_explorer/inspector_data_models_test.dart index 95c0dda..213eb84 100644 --- a/packages/devtools_app/test/screens/inspector/layout_explorer/inspector_data_models_test.dart +++ b/packages/devtools_app/test/screens/inspector/layout_explorer/inspector_data_models_test.dart
@@ -147,12 +147,14 @@ size: const Size(250, 250), realSize: const Size(50.0, 0.0), offset: const Offset(0.0, 125.0), + layoutProperties: properties, ), RenderProperties( axis: Axis.horizontal, size: const Size(261.5, 500), realSize: const Size(75.0, 25.0), offset: const Offset(250.0, 0.0), + layoutProperties: properties, ), RenderProperties( axis: Axis.horizontal, @@ -160,6 +162,7 @@ realSize: const Size(375.0, 25.0), offset: const Offset(511.5, 0.0), isFreeSpace: true, + layoutProperties: properties, ), ]); }, @@ -192,12 +195,14 @@ size: const Size(261.5, 500.0), realSize: const Size(75.0, 25.0), offset: const Offset(400.0, 0.0), + layoutProperties: properties, ), RenderProperties( axis: Axis.horizontal, size: const Size(250.0, 250.0), realSize: const Size(50.0, 0.0), offset: const Offset(661.5, 125.0), + layoutProperties: properties, ), RenderProperties( axis: Axis.horizontal, @@ -205,6 +210,7 @@ realSize: const Size(375.0, 25.0), offset: const Offset(0.0, 0.0), isFreeSpace: true, + layoutProperties: properties, ), ]); },
diff --git a/packages/devtools_app/test/screens/inspector_v2/layout_explorer/inspector_data_models_test.dart b/packages/devtools_app/test/screens/inspector_v2/layout_explorer/inspector_data_models_test.dart index 3991e39..f08c1a1 100644 --- a/packages/devtools_app/test/screens/inspector_v2/layout_explorer/inspector_data_models_test.dart +++ b/packages/devtools_app/test/screens/inspector_v2/layout_explorer/inspector_data_models_test.dart
@@ -147,12 +147,14 @@ size: const Size(250, 250), realSize: const Size(50.0, 0.0), offset: const Offset(0.0, 125.0), + layoutProperties: properties, ), RenderProperties( axis: Axis.horizontal, size: const Size(261.5, 500), realSize: const Size(75.0, 25.0), offset: const Offset(250.0, 0.0), + layoutProperties: properties, ), RenderProperties( axis: Axis.horizontal, @@ -160,6 +162,7 @@ realSize: const Size(375.0, 25.0), offset: const Offset(511.5, 0.0), isFreeSpace: true, + layoutProperties: properties, ), ]); }, @@ -192,12 +195,14 @@ size: const Size(261.5, 500.0), realSize: const Size(75.0, 25.0), offset: const Offset(400.0, 0.0), + layoutProperties: properties, ), RenderProperties( axis: Axis.horizontal, size: const Size(250.0, 250.0), realSize: const Size(50.0, 0.0), offset: const Offset(661.5, 125.0), + layoutProperties: properties, ), RenderProperties( axis: Axis.horizontal, @@ -205,6 +210,7 @@ realSize: const Size(375.0, 25.0), offset: const Offset(0.0, 0.0), isFreeSpace: true, + layoutProperties: properties, ), ]); },