diff --git a/integration_test/test.dart b/integration_test/test.dart index 311435a..f87bdce 100644 --- a/integration_test/test.dart +++ b/integration_test/test.dart @@ -1,8 +1,8 @@ import 'dart:io'; +import 'package:bouncy_ball_physics/ball_painter.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; @@ -13,15 +13,16 @@ void main() { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); const String screenshotMode = String.fromEnvironment('SCREENSHOT_MODE', defaultValue: 'desktop'); - + group('Test App', () { // Test for 'Line' Dropdown testWidgets('Test with take screenshot for Line', (tester) async { - Widget app = MyApp(); + Widget app = const MyApp(); await tester.pumpFrames(app, const Duration(seconds: 5)); - + // try to find the dropdown + expect(find.byType(DropdownButton), findsOneWidget); // Open the dropdown - await tester.tap(find.byType(DropdownButton)); + await tester.tap(find.byType(DropdownButton)); await tester.pumpFrames( app, const Duration(milliseconds: 500)); // Adjust time as needed @@ -37,11 +38,12 @@ void main() { // Test for 'Single Triangle' Dropdown testWidgets('Test with take screenshot for Single Triangle', (tester) async { - Widget app = MyApp(); + Widget app = const MyApp(); await tester.pumpFrames(app, const Duration(seconds: 5)); - + // try to find the dropdown + expect(find.byType(DropdownButton), findsOneWidget); // Open the dropdown - await tester.tap(find.byType(DropdownButton)); + await tester.tap(find.byType(DropdownButton)); await tester.pumpFrames(app, const Duration(milliseconds: 500)); var label = 'Single Triangle'; @@ -55,11 +57,13 @@ void main() { // Test for 'Multiple Triangles' Dropdown testWidgets('Test with take screenshot for Multiple Triangles', (tester) async { - Widget app = MyApp(); + Widget app = const MyApp(); await tester.pumpFrames(app, const Duration(seconds: 5)); + // try to find the dropdown + expect(find.byType(DropdownButton), findsOneWidget); // Open the dropdown - await tester.tap(find.byType(DropdownButton)); + await tester.tap(find.byType(DropdownButton)); await tester.pumpFrames(app, const Duration(milliseconds: 500)); var label = 'Multiple Triangles'; diff --git a/lib/ball_painter.dart b/lib/ball_painter.dart index cbd6fb8..4056438 100644 --- a/lib/ball_painter.dart +++ b/lib/ball_painter.dart @@ -11,8 +11,7 @@ class BallPainter extends CustomPainter { List balls; TrailShape trailShape; - BallPainter( - {required this.balls, this.trailShape = TrailShape.line}); + BallPainter({required this.balls, this.trailShape = TrailShape.line}); final Map _paintCache = {}; @@ -49,9 +48,10 @@ class BallPainter extends CustomPainter { } void _drawLineTrail(Canvas canvas, Ball ball, Paint paint) { - for (var i = 0; i < ball.trail.length - 1; i++) { - canvas.drawLine(ball.trail[i], ball.trail[i + 1], paint..strokeWidth = ball.radius / 10); - } + for (var i = 0; i < ball.trail.length - 1; i++) { + canvas.drawLine(ball.trail[i], ball.trail[i + 1], + paint..strokeWidth = ball.radius / 10); + } } void _drawSingleTriangleTrail(Canvas canvas, Ball ball, Paint paint) { diff --git a/lib/ball_physics_widget.dart b/lib/ball_physics_widget.dart index fd58343..cc865b4 100644 --- a/lib/ball_physics_widget.dart +++ b/lib/ball_physics_widget.dart @@ -1,15 +1,8 @@ -import 'dart:math'; - -import 'package:bouncy_ball_physics/ball.dart'; import 'package:bouncy_ball_physics/trail_shape_selector.dart'; import 'package:flutter/material.dart'; import 'ball_painter.dart'; -import 'dart:math'; -import 'package:flutter/material.dart'; -import 'package:bouncy_ball_physics/ball_painter.dart'; -import 'package:bouncy_ball_physics/trail_shape_selector.dart'; import 'package:bouncy_ball_physics/ball_physics_manager.dart'; class BallPhysicsWidget extends StatefulWidget { @@ -110,13 +103,15 @@ class BallPhysicsWidgetState extends State children: [ const Text("Balls Limit"), ValueListenableBuilder( - valueListenable:manager. ballLimitNotifier, + valueListenable: manager.ballLimitNotifier, builder: (BuildContext context, int value, Widget? child) { return Slider( value: manager.ballLimitNotifier.value.toDouble(), min: manager.slidersMinValue, max: manager.slidersMaxValue, - divisions: (manager.slidersMaxValue - manager.slidersMinValue).toInt(), + divisions: + (manager.slidersMaxValue - manager.slidersMinValue) + .toInt(), label: manager.ballLimitNotifier.value.toString(), onChanged: (double value) { manager.ballLimitNotifier.value = value.toInt(); @@ -131,7 +126,9 @@ class BallPhysicsWidgetState extends State value: manager.tailLengthNotifier.value.toDouble(), min: manager.slidersMinValue, max: manager.slidersMaxValue, - divisions: (manager.slidersMaxValue - manager.slidersMinValue).toInt(), + divisions: + (manager.slidersMaxValue - manager.slidersMinValue) + .toInt(), label: manager.tailLengthNotifier.value.toString(), onChanged: (double value) { manager.tailLengthNotifier.value = value.toInt(); @@ -153,8 +150,6 @@ class BallPhysicsWidgetState extends State @override void dispose() { _controller.dispose(); - manager.ballCountNotifier.dispose(); - // ... [dispose other notifiers in manager] super.dispose(); } } diff --git a/lib/main.dart b/lib/main.dart index 705517d..222da2c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,18 +3,18 @@ import 'package:bouncy_ball_physics/ball_physics_widget.dart'; import 'package:flutter/material.dart'; void main() { - runApp(MyApp()); + runApp(const MyApp()); } class MyApp extends StatelessWidget { - MyApp({super.key}); + const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: const Text('Ball Physics')), - body: BallPhysicsWidget(), // Use the key here + body: const BallPhysicsWidget(), // Use the key here floatingActionButton: FloatingActionButton( onPressed: () { // Call the reset method using the key diff --git a/screenshots/test-Line-mobile.png b/screenshots/test-Line-mobile.png index 59e6110..7506974 100644 Binary files a/screenshots/test-Line-mobile.png and b/screenshots/test-Line-mobile.png differ diff --git a/screenshots/test-Multiple-Triangles-mobile.png b/screenshots/test-Multiple-Triangles-mobile.png index dc16f2b..bfdc4da 100644 Binary files a/screenshots/test-Multiple-Triangles-mobile.png and b/screenshots/test-Multiple-Triangles-mobile.png differ diff --git a/screenshots/test-Single-Triangle-mobile.png b/screenshots/test-Single-Triangle-mobile.png index 4764760..7b9ccfb 100644 Binary files a/screenshots/test-Single-Triangle-mobile.png and b/screenshots/test-Single-Triangle-mobile.png differ diff --git a/test/widget_test.dart b/test/widget_test.dart index 783d536..73d6c41 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -12,7 +12,7 @@ import 'package:flutter_test/flutter_test.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. - await tester.pumpWidget(MyApp()); + await tester.pumpWidget(const MyApp()); // Verify that our counter starts at 0. expect(find.text('0'), findsOneWidget);