mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
This reverts commit 99daddc2c07840f06ee7fff1d4c11675bfe97a36.
This commit is contained in:
parent
d603ee1100
commit
54ef030ab8
@ -61,7 +61,6 @@ class CupertinoScrollbar extends RawScrollbar {
|
||||
this.thicknessWhileDragging = defaultThicknessWhileDragging,
|
||||
Radius radius = defaultRadius,
|
||||
this.radiusWhileDragging = defaultRadiusWhileDragging,
|
||||
ScrollNotificationPredicate? notificationPredicate,
|
||||
}) : assert(thickness != null),
|
||||
assert(thickness < double.infinity),
|
||||
assert(thicknessWhileDragging != null),
|
||||
@ -78,7 +77,6 @@ class CupertinoScrollbar extends RawScrollbar {
|
||||
fadeDuration: _kScrollbarFadeDuration,
|
||||
timeToFade: _kScrollbarTimeToFade,
|
||||
pressDuration: const Duration(milliseconds: 100),
|
||||
notificationPredicate: notificationPredicate ?? defaultScrollNotificationPredicate,
|
||||
);
|
||||
|
||||
/// Default value for [thickness] if it's not specified in [CupertinoScrollbar].
|
||||
|
||||
@ -153,7 +153,6 @@ class _MaterialScrollbar extends RawScrollbar {
|
||||
this.hoverThickness,
|
||||
double? thickness,
|
||||
Radius? radius,
|
||||
ScrollNotificationPredicate? notificationPredicate,
|
||||
}) : super(
|
||||
key: key,
|
||||
child: child,
|
||||
@ -164,7 +163,6 @@ class _MaterialScrollbar extends RawScrollbar {
|
||||
fadeDuration: _kScrollbarFadeDuration,
|
||||
timeToFade: _kScrollbarTimeToFade,
|
||||
pressDuration: Duration.zero,
|
||||
notificationPredicate: notificationPredicate ?? defaultScrollNotificationPredicate,
|
||||
);
|
||||
|
||||
final bool? showTrackOnHover;
|
||||
|
||||
@ -565,10 +565,6 @@ class ScrollbarPainter extends ChangeNotifier implements CustomPainter {
|
||||
/// visible without the fade animation. This requires that a [ScrollController]
|
||||
/// is provided to [controller], or that the [PrimaryScrollController] is available.
|
||||
///
|
||||
/// If the scrollbar is wrapped around multiple [ScrollView]s, it only responds to
|
||||
/// the nearest scrollView and shows the corresponding scrollbar thumb by default.
|
||||
/// Set [notificationPredicate] to something else for more complicated behaviors.
|
||||
///
|
||||
/// Scrollbars are interactive and will also use the [PrimaryScrollController] if
|
||||
/// a [controller] is not set. Scrollbar thumbs can be dragged along the main axis
|
||||
/// of the [ScrollView] to change the [ScrollPosition]. Tapping along the track
|
||||
@ -611,7 +607,6 @@ class RawScrollbar extends StatefulWidget {
|
||||
this.fadeDuration = _kScrollbarFadeDuration,
|
||||
this.timeToFade = _kScrollbarTimeToFade,
|
||||
this.pressDuration = Duration.zero,
|
||||
this.notificationPredicate = defaultScrollNotificationPredicate,
|
||||
}) : assert(child != null),
|
||||
assert(fadeDuration != null),
|
||||
assert(timeToFade != null),
|
||||
@ -772,14 +767,6 @@ class RawScrollbar extends StatefulWidget {
|
||||
/// Cannot be null, defaults to [Duration.zero].
|
||||
final Duration pressDuration;
|
||||
|
||||
/// A check that specifies whether a [ScrollNotification] should be
|
||||
/// handled by this widget.
|
||||
///
|
||||
/// By default, checks whether `notification.depth == 0`. That means if the
|
||||
/// scrollbar is wrapped around multiple [ScrollView]s, it only responds to the
|
||||
/// nearest scrollView and shows the corresponding scrollbar thumb.
|
||||
final ScrollNotificationPredicate notificationPredicate;
|
||||
|
||||
@override
|
||||
RawScrollbarState<RawScrollbar> createState() => RawScrollbarState<RawScrollbar>();
|
||||
}
|
||||
@ -1044,8 +1031,6 @@ class RawScrollbarState<T extends RawScrollbar> extends State<T> with TickerProv
|
||||
}
|
||||
|
||||
bool _handleScrollNotification(ScrollNotification notification) {
|
||||
if (!widget.notificationPredicate(notification))
|
||||
return false;
|
||||
|
||||
final ScrollMetrics metrics = notification.metrics;
|
||||
if (metrics.maxScrollExtent <= metrics.minScrollExtent)
|
||||
|
||||
@ -804,67 +804,4 @@ void main() {
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
// Regression test for https://github.com/flutter/flutter/issues/66444
|
||||
testWidgets("Scrollbar doesn't show when scroll the inner scrollable widget", (WidgetTester tester) async {
|
||||
final GlobalKey key1 = GlobalKey();
|
||||
final GlobalKey key2 = GlobalKey();
|
||||
final GlobalKey outerKey = GlobalKey();
|
||||
final GlobalKey innerKey = GlobalKey();
|
||||
await tester.pumpWidget(
|
||||
Directionality(
|
||||
textDirection: TextDirection.ltr,
|
||||
child: MediaQuery(
|
||||
data: const MediaQueryData(),
|
||||
child: RawScrollbar(
|
||||
key: key2,
|
||||
thumbColor: const Color(0x11111111),
|
||||
child: SingleChildScrollView(
|
||||
key: outerKey,
|
||||
child: SizedBox(
|
||||
height: 1000.0,
|
||||
width: double.infinity,
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
RawScrollbar(
|
||||
key: key1,
|
||||
thumbColor: const Color(0x22222222),
|
||||
child: SizedBox(
|
||||
height: 300.0,
|
||||
width: double.infinity,
|
||||
child: SingleChildScrollView(
|
||||
key: innerKey,
|
||||
child: const SizedBox(
|
||||
key: Key('Inner scrollable'),
|
||||
height: 1000.0,
|
||||
width: double.infinity,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// Drag the inner scrollable widget.
|
||||
await tester.drag(find.byKey(innerKey), const Offset(0.0, -25.0));
|
||||
await tester.pump();
|
||||
// Scrollbar fully showing.
|
||||
await tester.pump(const Duration(milliseconds: 500));
|
||||
|
||||
expect(
|
||||
tester.renderObject(find.byKey(key2)),
|
||||
paintsExactlyCountTimes(#drawRect, 2), // Each bar will call [drawRect] twice.
|
||||
);
|
||||
|
||||
expect(
|
||||
tester.renderObject(find.byKey(key1)),
|
||||
paintsExactlyCountTimes(#drawRect, 2),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user