Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save Ticore/11cbf703f35ebcdb6c730b396eb495fa to your computer and use it in GitHub Desktop.

Select an option

Save Ticore/11cbf703f35ebcdb6c730b396eb495fa to your computer and use it in GitHub Desktop.
///
/// 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