
This fixes a rendering problem in the AnimatedChildSwitcher where it would add a new "previous" child each time it rebuilt, and if you did it fast enough, all of them would disappear from the page. It also expands the API for AnimatedChildSwitcher to allow you to specify your own transition and/or layout builder for the transition. Fixes #16226
96 lines
2.8 KiB
Dart
96 lines
2.8 KiB
Dart
// Copyright 2015 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'package:flutter/rendering.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
import 'rendering_tester.dart';
|
|
|
|
void main() {
|
|
test('Stack can layout with top, right, bottom, left 0.0', () {
|
|
final RenderBox size = new RenderConstrainedBox(
|
|
additionalConstraints: new BoxConstraints.tight(const Size(100.0, 100.0))
|
|
);
|
|
|
|
final RenderBox red = new RenderDecoratedBox(
|
|
decoration: const BoxDecoration(
|
|
color: const Color(0xFFFF0000),
|
|
),
|
|
child: size
|
|
);
|
|
|
|
final RenderBox green = new RenderDecoratedBox(
|
|
decoration: const BoxDecoration(
|
|
color: const Color(0xFFFF0000),
|
|
),
|
|
);
|
|
|
|
final RenderBox stack = new RenderStack(
|
|
textDirection: TextDirection.ltr,
|
|
children: <RenderBox>[red, green],
|
|
);
|
|
final StackParentData greenParentData = green.parentData;
|
|
greenParentData
|
|
..top = 0.0
|
|
..right = 0.0
|
|
..bottom = 0.0
|
|
..left = 0.0;
|
|
|
|
layout(stack, constraints: const BoxConstraints());
|
|
|
|
expect(stack.size.width, equals(100.0));
|
|
expect(stack.size.height, equals(100.0));
|
|
|
|
expect(red.size.width, equals(100.0));
|
|
expect(red.size.height, equals(100.0));
|
|
|
|
expect(green.size.width, equals(100.0));
|
|
expect(green.size.height, equals(100.0));
|
|
});
|
|
|
|
test('Stack can layout with no children', () {
|
|
final RenderBox stack = new RenderStack(
|
|
textDirection: TextDirection.ltr,
|
|
children: <RenderBox>[],
|
|
);
|
|
|
|
layout(stack, constraints: new BoxConstraints.tight(const Size(100.0, 100.0)));
|
|
|
|
expect(stack.size.width, equals(100.0));
|
|
expect(stack.size.height, equals(100.0));
|
|
});
|
|
|
|
group('RenderIndexedStack', () {
|
|
test('visitChildrenForSemantics only visits displayed child', () {
|
|
final RenderBox child1 = new RenderConstrainedBox(
|
|
additionalConstraints: new BoxConstraints.tight(const Size(100.0, 100.0))
|
|
);
|
|
final RenderBox child2 = new RenderConstrainedBox(
|
|
additionalConstraints: new BoxConstraints.tight(const Size(100.0, 100.0))
|
|
);
|
|
final RenderBox child3 = new RenderConstrainedBox(
|
|
additionalConstraints: new BoxConstraints.tight(const Size(100.0, 100.0))
|
|
);
|
|
final RenderBox stack = new RenderIndexedStack(
|
|
index: 1,
|
|
textDirection: TextDirection.ltr,
|
|
children: <RenderBox>[child1, child2, child3],
|
|
);
|
|
|
|
final List<RenderObject> visitedChildren = <RenderObject>[];
|
|
final RenderObjectVisitor visitor = (RenderObject child) {
|
|
visitedChildren.add(child);
|
|
};
|
|
|
|
stack.visitChildrenForSemantics(visitor);
|
|
|
|
expect(visitedChildren, hasLength(1));
|
|
expect(visitedChildren.first, child2);
|
|
});
|
|
|
|
});
|
|
|
|
// More tests in ../widgets/stack_test.dart
|
|
}
|