mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-04-20 11:08:03 +08:00
85 lines
2.4 KiB
Dart
85 lines
2.4 KiB
Dart
import 'package:PiliPlus/common/widgets/flutter/page/tabs.dart';
|
|
import 'package:PiliPlus/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart';
|
|
import 'package:PiliPlus/utils/storage_pref.dart';
|
|
import 'package:flutter/material.dart' hide TabBarView;
|
|
|
|
Widget videoTabBarView({
|
|
required List<Widget> children,
|
|
TabController? controller,
|
|
}) => TabBarView<CustomHorizontalDragGestureRecognizer>(
|
|
controller: controller,
|
|
physics: const CustomTabBarViewScrollPhysics(parent: ClampingScrollPhysics()),
|
|
horizontalDragGestureRecognizer: CustomHorizontalDragGestureRecognizer(),
|
|
children: children,
|
|
);
|
|
|
|
Widget tabBarView({
|
|
required List<Widget> children,
|
|
TabController? controller,
|
|
}) => TabBarView<CustomHorizontalDragGestureRecognizer>(
|
|
physics: const CustomTabBarViewScrollPhysics(),
|
|
controller: controller,
|
|
horizontalDragGestureRecognizer: CustomHorizontalDragGestureRecognizer(),
|
|
children: children,
|
|
);
|
|
|
|
SpringDescription _customSpringDescription() {
|
|
final List<double> springDescription = Pref.springDescription;
|
|
return SpringDescription(
|
|
mass: springDescription[0],
|
|
stiffness: springDescription[1],
|
|
damping: springDescription[2],
|
|
);
|
|
}
|
|
|
|
class CustomTabBarViewScrollPhysics extends ScrollPhysics {
|
|
const CustomTabBarViewScrollPhysics({super.parent});
|
|
|
|
@override
|
|
CustomTabBarViewScrollPhysics applyTo(ScrollPhysics? ancestor) {
|
|
return CustomTabBarViewScrollPhysics(parent: buildParent(ancestor));
|
|
}
|
|
|
|
static final _springDescription = _customSpringDescription();
|
|
|
|
@override
|
|
SpringDescription get spring => _springDescription;
|
|
}
|
|
|
|
mixin ReloadMixin {
|
|
late bool reload = false;
|
|
}
|
|
|
|
class ReloadScrollPhysics extends AlwaysScrollableScrollPhysics {
|
|
const ReloadScrollPhysics({super.parent, required this.controller});
|
|
|
|
final ReloadMixin controller;
|
|
|
|
@override
|
|
ReloadScrollPhysics applyTo(ScrollPhysics? ancestor) {
|
|
return ReloadScrollPhysics(
|
|
parent: buildParent(ancestor),
|
|
controller: controller,
|
|
);
|
|
}
|
|
|
|
@override
|
|
double adjustPositionForNewDimensions({
|
|
required ScrollMetrics oldPosition,
|
|
required ScrollMetrics newPosition,
|
|
required bool isScrolling,
|
|
required double velocity,
|
|
}) {
|
|
if (controller.reload) {
|
|
controller.reload = false;
|
|
return 0;
|
|
}
|
|
return super.adjustPositionForNewDimensions(
|
|
oldPosition: oldPosition,
|
|
newPosition: newPosition,
|
|
isScrolling: isScrolling,
|
|
velocity: velocity,
|
|
);
|
|
}
|
|
}
|