RenderIndexedStack - Mark invisible children as offstage in debugDescribeProperties (#96639)

This commit is contained in:
Marcel Kirchhoff 2022-02-08 01:15:19 +01:00 committed by GitHub
parent 3facdb8717
commit 36a8f0f2ae
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 0 deletions

View file

@ -749,4 +749,20 @@ class RenderIndexedStack extends RenderStack {
super.debugFillProperties(properties);
properties.add(IntProperty('index', index));
}
@override
List<DiagnosticsNode> debugDescribeChildren() {
final List<DiagnosticsNode> children = <DiagnosticsNode>[];
int i = 0;
RenderObject? child = firstChild;
while (child != null) {
children.add(child.toDiagnosticsNode(
name: 'child ${i + 1}',
style: i != index! ? DiagnosticsTreeStyle.offstage : null,
));
child = (child.parentData! as StackParentData).nextSibling;
i += 1;
}
return children;
}
}

View file

@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/foundation.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart';
@ -118,6 +119,33 @@ void main() {
expect(visitedChildren.first, child2);
});
test('debugDescribeChildren marks invisible children as offstage', () {
final RenderBox child1 = RenderConstrainedBox(
additionalConstraints: BoxConstraints.tight(const Size(100.0, 100.0)),
);
final RenderBox child2 = RenderConstrainedBox(
additionalConstraints: BoxConstraints.tight(const Size(100.0, 100.0)),
);
final RenderBox child3 = RenderConstrainedBox(
additionalConstraints: BoxConstraints.tight(const Size(100.0, 100.0)),
);
final RenderBox stack = RenderIndexedStack(
index: 2,
children: <RenderBox>[child1, child2, child3],
);
final List<DiagnosticsNode> diagnosticNodes = stack.debugDescribeChildren();
expect(diagnosticNodes[0].name, 'child 1');
expect(diagnosticNodes[0].style, DiagnosticsTreeStyle.offstage);
expect(diagnosticNodes[1].name, 'child 2');
expect(diagnosticNodes[1].style, DiagnosticsTreeStyle.offstage);
expect(diagnosticNodes[2].name, 'child 3');
expect(diagnosticNodes[2].style, DiagnosticsTreeStyle.sparse);
});
});
// More tests in ../widgets/stack_test.dart