| // Copyright 2016 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_test/flutter_test.dart' hide TypeMatcher; |
| import 'package:flutter/widgets.dart'; |
| |
| class SizeChanger extends StatefulWidget { |
| const SizeChanger({ |
| Key key, |
| this.child, |
| }) : super(key: key); |
| |
| final Widget child; |
| |
| @override |
| SizeChangerState createState() => new SizeChangerState(); |
| } |
| |
| class SizeChangerState extends State<SizeChanger> { |
| bool _flag = false; |
| |
| void trigger() { |
| setState(() { |
| _flag = true; |
| }); |
| } |
| |
| @override |
| Widget build(BuildContext context) { |
| return new Row( |
| textDirection: TextDirection.ltr, |
| children: <Widget>[ |
| new SizedBox( |
| height: _flag ? 50.0 : 100.0, |
| width: 100.0, |
| child: widget.child |
| ) |
| ], |
| ); |
| } |
| } |
| |
| class Wrapper extends StatelessWidget { |
| const Wrapper({ |
| Key key, |
| this.child, |
| }) : super(key: key); |
| |
| final Widget child; |
| |
| @override |
| Widget build(BuildContext context) { |
| return child; |
| } |
| } |
| |
| void main() { |
| testWidgets('Applying parent data inside a LayoutBuilder', (WidgetTester tester) async { |
| int frame = 1; |
| await tester.pumpWidget(new SizeChanger( // when this is triggered, the child LayoutBuilder will build again |
| child: new LayoutBuilder(builder: (BuildContext context, BoxConstraints constraints) { |
| return new Column(children: <Widget>[new Expanded( |
| flex: frame, // this is different after the next pump, so that the parentData has to be applied again |
| child: new Container(height: 100.0), |
| )]); |
| }) |
| )); |
| frame += 1; |
| tester.state<SizeChangerState>(find.byType(SizeChanger)).trigger(); |
| await tester.pump(); |
| }); |
| } |