Created
May 4, 2020 00:06
-
-
Save Ticore/11cbf703f35ebcdb6c730b396eb495fa to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /// | |
| /// flutter test command: | |
| /// `flutter test --update-goldens flutter_widget_rebuild_repaint_test.dart` | |
| /// | |
| import 'dart:math'; | |
| import 'package:flutter/material.dart'; | |
| import 'package:flutter/rendering.dart'; | |
| import 'package:flutter_test/flutter_test.dart'; | |
| /// | |
| /// widget rebuild, repaint test | |
| /// | |
| void main() { | |
| testWidgets('StatefulWidget context', (WidgetTester tester) async { | |
| // set device size | |
| TestWidgetsFlutterBinding binding = tester.binding; | |
| binding.window.physicalSizeTestValue = Size(400, 700); | |
| binding.window.devicePixelRatioTestValue = 1.0; | |
| // prepare widget & finder | |
| var widget = StatefulBlock(); | |
| var widgetFinder = find.byType(StatefulBlock); | |
| // 1st render ui | |
| await tester.pumpWidget(widget); | |
| await expectLater( | |
| widgetFinder, matchesGoldenFile('widget_rebuild_before.png')); | |
| // enable repaint rainbow | |
| debugRepaintRainbowEnabled = true; | |
| // trigger rebuild | |
| StatefulBlock.state.setState(() => 0); | |
| // 2nd render ui | |
| await tester.pumpWidget(widget); | |
| await expectLater( | |
| widgetFinder, matchesGoldenFile('widget_rebuild_after.png')); | |
| }); | |
| } | |
| /// 有狀態 Block | |
| class StatefulBlock extends StatefulWidget { | |
| static BlockState state; | |
| @override | |
| State<StatefulWidget> createState() => state = BlockState(); | |
| } | |
| class BlockState extends State { | |
| @override | |
| Widget build(BuildContext context) { | |
| print('BlockState.build();'); | |
| Color color = Random().nextInt(2) == 0 ? Colors.blue : Colors.red; | |
| return Container(color: color, padding: EdgeInsets.all(10)); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment