diff --git a/lib/interpret_and_optimize/entities/layouts/auto_layout_align_strategy.dart b/lib/interpret_and_optimize/entities/layouts/auto_layout_align_strategy.dart index da1512ba..5e82b622 100644 --- a/lib/interpret_and_optimize/entities/layouts/auto_layout_align_strategy.dart +++ b/lib/interpret_and_optimize/entities/layouts/auto_layout_align_strategy.dart @@ -23,19 +23,23 @@ class AutoLayoutAlignStrategy extends AlignStrategy { // New children list var spacedChildren = []; var children = context.tree.childrenOf(node); - sortChildren(children); + var isVertical = true; num space; // Add boxes if necessary for Column if (node is PBIntermediateColumnLayout) { + node.sortChildren(children); isVertical = true; space = node.layoutProperties.spacing; } // Add boxes if necessary for Row else if (node is PBIntermediateRowLayout) { + node.sortChildren(children); isVertical = false; space = node.layoutProperties.spacing; + } else { + sortChildren(children); } for (var i = 0; i < children.length; i++) { diff --git a/lib/interpret_and_optimize/entities/layouts/column.dart b/lib/interpret_and_optimize/entities/layouts/column.dart index f8b2132d..ce933fca 100644 --- a/lib/interpret_and_optimize/entities/layouts/column.dart +++ b/lib/interpret_and_optimize/entities/layouts/column.dart @@ -63,4 +63,10 @@ class PBIntermediateColumnLayout extends PBLayoutIntermediateNode ..mapRawChildren(json, tree); return tempCol; } + + @override + void sortChildren(List children) { + children.sort((child0, child1) => + child0.frame.topLeft.y.compareTo(child1.frame.topLeft.y)); + } } diff --git a/lib/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart b/lib/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart index 3db7d326..edd05efc 100644 --- a/lib/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart +++ b/lib/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart @@ -205,10 +205,18 @@ abstract class PBIntermediateNode extension PBPointLegacyMethod on Point { Point clone() => Point(x, y); - int compareTo(Point anotherPoint) => - y == anotherPoint.y || (y.abs() - anotherPoint.y.abs()).abs() < 3 - ? x.compareTo(anotherPoint.x) - : y.compareTo(anotherPoint.y); + int compareTo(Point anotherPoint) { + // Get both comparation points + var yCompare = y.compareTo(anotherPoint.y); + var xCompare = x.compareTo(anotherPoint.x); + + // Check who has a bigger difference and return it + if (yCompare.abs() > xCompare.abs()) { + return yCompare; + } else { + return xCompare; + } + } bool operator <(Object point) { if (point is Point) { diff --git a/lib/interpret_and_optimize/entities/subclasses/pb_layout_intermediate_node.dart b/lib/interpret_and_optimize/entities/subclasses/pb_layout_intermediate_node.dart index 7040e6a8..31e99938 100644 --- a/lib/interpret_and_optimize/entities/subclasses/pb_layout_intermediate_node.dart +++ b/lib/interpret_and_optimize/entities/subclasses/pb_layout_intermediate_node.dart @@ -52,7 +52,6 @@ abstract class PBLayoutIntermediateNode extends PBIntermediateNode if (context != null) { resize(context, children); } - sortChildren(children); } }