Skip to content

Commit 8f5a29a

Browse files
committed
Fix auto canvas placeholder crashing in fixed-height scrollable canvases.
1 parent ec73d21 commit 8f5a29a

File tree

2 files changed

+27
-51
lines changed

2 files changed

+27
-51
lines changed

lib/src/transformers/node_transformers/passive_rectangle_transformer.dart

Lines changed: 9 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,16 @@ class PassiveRectangleWidget extends StatelessWidget {
7373
Widget build(BuildContext context) {
7474
final ScopedValues scopedValues = ScopedValues.of(context);
7575

76-
// final BaseNode? parent = node.id == kRootNode || node.parentID == kRootNode
77-
// ? null
78-
// : getNode(node.parentID);
76+
final BaseNode? parent = node.id == kRootNode || node.parentID == kRootNode
77+
? null
78+
: manager.getNode(node.parentID);
79+
bool isPlaceholder =
80+
parent is CanvasNode && parent.properties.bodyId == node.id;
7981

8082
/// TODO Birju / Saad. Why does the commented out parent code below break published layouts only?
8183
/// Saad's note: The below code looks like AdaptiveNodeBox
82-
final double? width = (node.horizontalFit == SizeFit.shrinkWrap)
84+
final double? width = (node.horizontalFit == SizeFit.shrinkWrap ||
85+
isPlaceholder)
8386
? null
8487
: (node.horizontalFit ==
8588
SizeFit
@@ -89,7 +92,8 @@ class PassiveRectangleWidget extends StatelessWidget {
8992
? double.infinity
9093
: node.basicBoxLocal.width;
9194

92-
final double? height = (node.verticalFit == SizeFit.shrinkWrap)
95+
final double? height = (node.verticalFit == SizeFit.shrinkWrap ||
96+
isPlaceholder)
9397
? null
9498
: (node.verticalFit ==
9599
SizeFit
@@ -138,25 +142,11 @@ class PassiveRectangleWidget extends StatelessWidget {
138142
...buildFills(
139143
node,
140144
useInk: false,
141-
// useInk: node is BlendMixin &&
142-
// (node as BlendMixin).inkWell != null &&
143-
// settings.useInk,
144145
obscureImages: settings.obscureImages,
145146
settings: settings,
146147
scopedValues: scopedValues,
147148
),
148149
...buildStrokes(node, scopedValues),
149-
// old
150-
// ...wrapWithPaddingAndScroll(
151-
// node,
152-
// [
153-
// ...children,
154-
// if (portalWidget != null) portalWidget,
155-
// ],
156-
// stackAlignment: stackAlignment,
157-
// applyPadding: applyPadding,
158-
// ),
159-
160150
...wrapWithInkWell(
161151
context,
162152
node,
@@ -170,37 +160,6 @@ class PassiveRectangleWidget extends StatelessWidget {
170160
applyPadding: applyPadding,
171161
),
172162
),
173-
174-
// Builder(builder: (context) {
175-
// final child = Stack(
176-
// children: [
177-
// ...wrapWithPaddingAndScroll(
178-
// node,
179-
// [
180-
// ...children,
181-
// if (portalWidget != null) portalWidget,
182-
// ],
183-
// stackAlignment: stackAlignment,
184-
// applyPadding: applyPadding,
185-
// ),
186-
// ],
187-
// );
188-
//
189-
// if (node is BlendMixin && (node as BlendMixin).inkWell != null) {
190-
// return Material(
191-
// type: MaterialType.transparency,
192-
// child: InkWell(
193-
// onLongPress: () {},
194-
// onTap: () {
195-
// // TODO:
196-
// },
197-
// child: child,
198-
// ),
199-
// );
200-
// }
201-
//
202-
// return child;
203-
// }),
204163
],
205164
),
206165
);

lib/src/transformers/node_transformers/passive_row_column_transformer.dart

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class PassiveRowColumnTransformer extends NodeWidgetTransformer<RowColumnNode> {
1313
required List<Widget> childrenWidgets,
1414
required List<BaseNode> childrenNodes,
1515
required bool withScroll,
16+
required GetNode getNode,
1617
}) {
1718
assert(rowColumnNode is RowColumnMixin);
1819

@@ -27,8 +28,22 @@ class PassiveRowColumnTransformer extends NodeWidgetTransformer<RowColumnNode> {
2728
} else if (rowColumnNode.verticalFit == SizeFit.shrinkWrap) {
2829
fixHeight = rowColumnNode.constraints.minHeight;
2930
} else {
30-
fixHeight = rowColumnNode.constraints.maxHeight ?? double.infinity;
31+
// If the node is a canvas node's body, it is likely a placeholder that
32+
// expands to fill all available space, while the canvas is already meant
33+
// to do that as a scroll view. In this case, we avoid setting the height
34+
// to infinity at all costs.
35+
final BaseNode? parent = rowColumnNode.parentID == kRootNode
36+
? null
37+
: getNode(rowColumnNode.parentID);
38+
bool isPlaceholder =
39+
parent is CanvasNode && parent.properties.bodyId == rowColumnNode.id;
40+
if (isPlaceholder) {
41+
fixHeight = rowColumnNode.constraints.minHeight;
42+
} else {
43+
fixHeight = rowColumnNode.constraints.maxHeight ?? double.infinity;
44+
}
3145
}
46+
3247
if (rowColumnNode.horizontalFit == SizeFit.locked ||
3348
rowColumnNode.horizontalFit == SizeFit.fixed) {
3449
fixWidth = rowColumnNode.outerBoxLocal.width;
@@ -302,6 +317,7 @@ class PassiveRowColumnWidget extends StatelessWidget {
302317
childrenWidgets: widgetChildren,
303318
childrenNodes: children,
304319
withScroll: true,
320+
getNode: manager.getNode,
305321
)
306322
],
307323
settings: settings,
@@ -311,6 +327,7 @@ class PassiveRowColumnWidget extends StatelessWidget {
311327
childrenWidgets: widgetChildren,
312328
childrenNodes: children,
313329
withScroll: true,
330+
getNode: manager.getNode,
314331
);
315332

316333
if (kIsTestLayout) {

0 commit comments

Comments
 (0)