From 2ea212dbdf36bbb32bc35edb10cd9df69cedd8c1 Mon Sep 17 00:00:00 2001 From: Angelo Silvestre Date: Mon, 8 Jan 2024 16:38:12 -0300 Subject: [PATCH] Create a WidgetTester extension to drag scroll bars (Resolves #22) --- lib/flutter_test_robots.dart | 1 + lib/src/scrollbar.dart | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 lib/src/scrollbar.dart diff --git a/lib/flutter_test_robots.dart b/lib/flutter_test_robots.dart index e5afbf7..b8b3380 100644 --- a/lib/flutter_test_robots.dart +++ b/lib/flutter_test_robots.dart @@ -3,3 +3,4 @@ library flutter_test_robots; export 'src/clipboard.dart'; export 'src/input_method_engine.dart'; export 'src/keyboard.dart'; +export 'src/scrollbar.dart'; diff --git a/lib/src/scrollbar.dart b/lib/src/scrollbar.dart new file mode 100644 index 0000000..01f7722 --- /dev/null +++ b/lib/src/scrollbar.dart @@ -0,0 +1,26 @@ +import 'package:flutter/gestures.dart'; +import 'package:flutter_test/flutter_test.dart'; + +/// Simulates the user interacting with a Scrollbar. +extension ScrollbarInteractions on WidgetTester { + /// Press a scrollbar thumb at [thumbLocation] and drag it vertically by [delta] pixels. + Future dragScrollbar(Offset thumbLocation, double delta) async { + //Hover to make the thumb visible with a duration long enough to run the fade in animation. + final testPointer = TestPointer(1, PointerDeviceKind.mouse); + + await sendEventToBinding(testPointer.hover(thumbLocation, timeStamp: const Duration(seconds: 1))); + await pumpAndSettle(); + + // Press the thumb. + await sendEventToBinding(testPointer.down(thumbLocation)); + await pump(const Duration(milliseconds: 40)); + + // Move the thumb down. + await sendEventToBinding(testPointer.move(thumbLocation + Offset(0, delta))); + await pump(); + + // Release the pointer. + await sendEventToBinding(testPointer.up()); + await pump(); + } +}