import 'package:sky/widgets.dart'; import 'package:test/test.dart'; import 'widget_tester.dart'; class InnerComponent extends StatefulComponent { InnerComponent(); bool _didInitState = false; void initState() { _didInitState = true; } void syncConstructorArguments(InnerComponent source) { } Widget build() { return new Container(); } } class OuterContainer extends StatefulComponent { OuterContainer({ this.child }); InnerComponent child; void syncConstructorArguments(OuterContainer source) { child = source.child; } Widget build() { return child; } } void main() { test('resync stateful widget', () { WidgetTester tester = new WidgetTester(); InnerComponent inner1; InnerComponent inner2; OuterContainer outer; tester.pumpFrame(() { inner1 = new InnerComponent(); outer = new OuterContainer(child: inner1); return outer; }); expect(inner1._didInitState, isTrue); expect(inner1.parent, isNotNull); tester.pumpFrame(() { inner2 = new InnerComponent(); return new OuterContainer(child: inner2); }); expect(inner1._didInitState, isTrue); expect(inner1.parent, isNotNull); expect(inner2._didInitState, isFalse); expect(inner2.parent, isNull); outer.setState(() {}); tester.pumpFrameWithoutChange(0.0); expect(inner1._didInitState, isTrue); expect(inner1.parent, isNotNull); expect(inner2._didInitState, isFalse); expect(inner2.parent, isNull); }); }