blob: 1283a386438af5e1879bde4fc5671447cadc3318 [file] [log] [blame]
// 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',
]);
});
}