| // Copyright 2014 The Flutter 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/widgets.dart'; |
| import 'package:flutter_test/flutter_test.dart'; |
| |
| late ChangerState changer; |
| |
| class Changer extends StatefulWidget { |
| const Changer(this.child, { Key? key }) : super(key: key); |
| |
| final Widget child; |
| |
| @override |
| ChangerState createState() => ChangerState(); |
| } |
| |
| class ChangerState extends State<Changer> { |
| bool _state = false; |
| |
| @override |
| void initState() { |
| super.initState(); |
| changer = this; |
| } |
| |
| void test() { setState(() { _state = true; }); } |
| |
| @override |
| Widget build(BuildContext context) => _state ? Wrapper(widget.child) : widget.child; |
| } |
| |
| class Wrapper extends StatelessWidget { |
| const Wrapper(this.child, { Key? key }) : super(key: key); |
| |
| final Widget child; |
| |
| @override |
| Widget build(BuildContext context) => child; |
| } |
| |
| class Leaf extends StatefulWidget { |
| const Leaf({ Key? key }) : super(key: key); |
| @override |
| LeafState createState() => LeafState(); |
| } |
| |
| class LeafState extends State<Leaf> { |
| @override |
| Widget build(BuildContext context) => const Text('leaf', textDirection: TextDirection.ltr); |
| } |
| |
| void main() { |
| testWidgets('three-way setState() smoke test', (WidgetTester tester) async { |
| await tester.pumpWidget(const Changer(Wrapper(Leaf()))); |
| await tester.pumpWidget(const Changer(Wrapper(Leaf()))); |
| changer.test(); |
| await tester.pump(); |
| }); |
| } |