mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 16:05:18 +00:00
70 lines
2.1 KiB
Dart
70 lines
2.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_desktop_tools/flutter_desktop_tools.dart';
|
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
|
|
|
class InterScrollbar extends HookWidget {
|
|
final Widget child;
|
|
final ScrollController? controller;
|
|
final bool? thumbVisibility;
|
|
final bool? trackVisibility;
|
|
final double? thickness;
|
|
final Radius? radius;
|
|
final bool Function(ScrollNotification)? notificationPredicate;
|
|
final bool? interactive;
|
|
final ScrollbarOrientation? scrollbarOrientation;
|
|
|
|
const InterScrollbar({
|
|
super.key,
|
|
required this.child,
|
|
this.controller,
|
|
this.thumbVisibility,
|
|
this.trackVisibility,
|
|
this.thickness,
|
|
this.radius,
|
|
this.notificationPredicate,
|
|
this.interactive,
|
|
this.scrollbarOrientation,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final theme = Theme.of(context);
|
|
|
|
if (DesktopTools.platform.isDesktop) return child;
|
|
|
|
return ScrollbarTheme(
|
|
data: theme.scrollbarTheme.copyWith(
|
|
crossAxisMargin: 10,
|
|
minThumbLength: 80,
|
|
thickness: MaterialStateProperty.resolveWith((states) {
|
|
if (states.contains(MaterialState.hovered) ||
|
|
states.contains(MaterialState.dragged) ||
|
|
states.contains(MaterialState.pressed)) {
|
|
return 40;
|
|
}
|
|
return 20;
|
|
}),
|
|
radius: const Radius.circular(20),
|
|
thumbColor: MaterialStateProperty.resolveWith((states) {
|
|
if (states.contains(MaterialState.hovered) ||
|
|
states.contains(MaterialState.dragged)) {
|
|
return theme.colorScheme.onSurface.withOpacity(0.5);
|
|
}
|
|
return theme.colorScheme.onSurface.withOpacity(0.3);
|
|
}),
|
|
),
|
|
child: Scrollbar(
|
|
controller: controller,
|
|
thumbVisibility: thumbVisibility,
|
|
trackVisibility: trackVisibility,
|
|
thickness: thickness,
|
|
radius: radius,
|
|
notificationPredicate: notificationPredicate,
|
|
interactive: interactive ?? true,
|
|
scrollbarOrientation: scrollbarOrientation,
|
|
child: child,
|
|
),
|
|
);
|
|
}
|
|
}
|