// 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/material.dart'; import 'package:flutter_test/flutter_test.dart' hide TypeMatcher; // This is a regression test for https://github.com/flutter/flutter/issues/5840. class Bar extends StatefulWidget { @override BarState createState() => new BarState(); } class BarState extends State<Bar> { final GlobalKey _fooKey = new GlobalKey(); bool _mode = false; void trigger() { setState(() { _mode = !_mode; }); } @override Widget build(BuildContext context) { if (_mode) { return new SizedBox( child: new LayoutBuilder( builder: (BuildContext context, BoxConstraints constraints) => new StatefulCreationCounter(key: _fooKey), ), ); } else { return new LayoutBuilder( builder: (BuildContext context, BoxConstraints constraints) => new StatefulCreationCounter(key: _fooKey), ); } } } class StatefulCreationCounter extends StatefulWidget { StatefulCreationCounter({ Key key }) : super(key: key); @override StatefulCreationCounterState createState() => new StatefulCreationCounterState(); } class StatefulCreationCounterState extends State<StatefulCreationCounter> { static int creationCount = 0; @override void initState() { super.initState(); creationCount += 1; } @override Widget build(BuildContext context) => new Container(); } void main() { testWidgets('reparent state with layout builder', (WidgetTester tester) async { expect(StatefulCreationCounterState.creationCount, 0); await tester.pumpWidget(new Bar()); expect(StatefulCreationCounterState.creationCount, 1); BarState s = tester.state/*<BarState>*/(find.byType(Bar)); s.trigger(); await tester.pump(); expect(StatefulCreationCounterState.creationCount, 1); }); }