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,
),
]);
},