| // 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/material.dart'; |
| import 'package:flutter_test/flutter_test.dart'; |
| |
| import 'test_widgets.dart'; |
| |
| class TestCustomPainter extends CustomPainter { |
| TestCustomPainter({ required this.log, required this.name }); |
| |
| final List<String> log; |
| final String name; |
| |
| @override |
| void paint(Canvas canvas, Size size) { |
| log.add(name); |
| } |
| |
| @override |
| bool shouldRepaint(TestCustomPainter oldPainter) { |
| return name != oldPainter.name |
| || log != oldPainter.log; |
| } |
| } |
| |
| void main() { |
| testWidgets('Do we paint when coming back from a navigation', (WidgetTester tester) async { |
| final List<String> log = <String>[]; |
| log.add('0'); |
| await tester.pumpWidget( |
| MaterialApp( |
| routes: <String, WidgetBuilder>{ |
| '/': (BuildContext context) => RepaintBoundary( |
| child: RepaintBoundary( |
| child: FlipWidget( |
| left: CustomPaint( |
| painter: TestCustomPainter( |
| log: log, |
| name: 'left', |
| ), |
| ), |
| right: CustomPaint( |
| painter: TestCustomPainter( |
| log: log, |
| name: 'right', |
| ), |
| ), |
| ), |
| ), |
| ), |
| '/second': (BuildContext context) => Container(), |
| }, |
| ), |
| ); |
| log.add('1'); |
| final NavigatorState navigator = tester.state<NavigatorState>(find.byType(Navigator)); |
| navigator.pushNamed('/second'); |
| log.add('2'); |
| expect(await tester.pumpAndSettle(const Duration(minutes: 1)), 2); |
| log.add('3'); |
| flipStatefulWidget(tester, skipOffstage: false); |
| log.add('4'); |
| navigator.pop(); |
| log.add('5'); |
| expect(await tester.pumpAndSettle(const Duration(minutes: 1)), 2); |
| log.add('6'); |
| flipStatefulWidget(tester); |
| expect(await tester.pumpAndSettle(), 1); |
| log.add('7'); |
| expect(log, <String>[ |
| '0', |
| 'left', |
| '1', |
| '2', |
| '3', |
| '4', |
| '5', |
| 'right', |
| '6', |
| 'left', |
| '7', |
| ]); |
| }); |
| } |