mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-07-25 21:10:13 +08:00
@@ -549,7 +549,6 @@ class RefreshIndicatorState extends State<RefreshIndicator>
|
|||||||
if (widget.isClampingScrollPhysics) {
|
if (widget.isClampingScrollPhysics) {
|
||||||
return ScrollConfiguration(
|
return ScrollConfiguration(
|
||||||
behavior: RefreshScrollBehavior(
|
behavior: RefreshScrollBehavior(
|
||||||
desktopDragDevices,
|
|
||||||
scrollPhysics: RefreshScrollPhysicsIOS(
|
scrollPhysics: RefreshScrollPhysicsIOS(
|
||||||
parent: const RangeMaintainingScrollPhysics(),
|
parent: const RangeMaintainingScrollPhysics(),
|
||||||
onDrag: _onDrag,
|
onDrag: _onDrag,
|
||||||
@@ -562,7 +561,6 @@ class RefreshIndicatorState extends State<RefreshIndicator>
|
|||||||
}
|
}
|
||||||
return ScrollConfiguration(
|
return ScrollConfiguration(
|
||||||
behavior: RefreshScrollBehavior(
|
behavior: RefreshScrollBehavior(
|
||||||
desktopDragDevices,
|
|
||||||
scrollPhysics: RefreshScrollPhysics(
|
scrollPhysics: RefreshScrollPhysics(
|
||||||
parent: const RangeMaintainingScrollPhysics(),
|
parent: const RangeMaintainingScrollPhysics(),
|
||||||
onDrag: _onDrag,
|
onDrag: _onDrag,
|
||||||
@@ -625,8 +623,7 @@ class RefreshIndicatorState extends State<RefreshIndicator>
|
|||||||
typedef refreshIndicator = RefreshIndicator;
|
typedef refreshIndicator = RefreshIndicator;
|
||||||
|
|
||||||
class RefreshScrollBehavior extends CustomScrollBehavior {
|
class RefreshScrollBehavior extends CustomScrollBehavior {
|
||||||
const RefreshScrollBehavior(
|
const RefreshScrollBehavior({
|
||||||
super.dragDevices, {
|
|
||||||
required this.scrollPhysics,
|
required this.scrollPhysics,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,19 @@
|
|||||||
|
import 'dart:io' show Platform;
|
||||||
|
|
||||||
import 'package:flutter/gestures.dart' show PointerDeviceKind;
|
import 'package:flutter/gestures.dart' show PointerDeviceKind;
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
const Set<PointerDeviceKind> desktopDragDevices = {
|
||||||
|
.touch,
|
||||||
|
.mouse,
|
||||||
|
.trackpad,
|
||||||
|
.stylus,
|
||||||
|
.invertedStylus,
|
||||||
|
.unknown,
|
||||||
|
};
|
||||||
|
|
||||||
class CustomScrollBehavior extends MaterialScrollBehavior {
|
class CustomScrollBehavior extends MaterialScrollBehavior {
|
||||||
const CustomScrollBehavior(this.dragDevices);
|
const CustomScrollBehavior();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget buildScrollbar(
|
Widget buildScrollbar(
|
||||||
@@ -12,14 +23,32 @@ class CustomScrollBehavior extends MaterialScrollBehavior {
|
|||||||
) => child;
|
) => child;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
final Set<PointerDeviceKind> dragDevices;
|
Widget buildOverscrollIndicator(
|
||||||
|
BuildContext context,
|
||||||
|
Widget child,
|
||||||
|
ScrollableDetails details,
|
||||||
|
) {
|
||||||
|
if (Platform.isAndroid) {
|
||||||
|
return StretchingOverscrollIndicator(
|
||||||
|
axisDirection: details.direction,
|
||||||
|
clipBehavior: details.decorationClipBehavior ?? .hardEdge,
|
||||||
|
child: child,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return child;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Set<PointerDeviceKind> get dragDevices => desktopDragDevices;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Set<PointerDeviceKind> desktopDragDevices = <PointerDeviceKind>{
|
class NoOverscrollIndicator extends CustomScrollBehavior {
|
||||||
PointerDeviceKind.touch,
|
const NoOverscrollIndicator();
|
||||||
PointerDeviceKind.stylus,
|
|
||||||
PointerDeviceKind.invertedStylus,
|
@override
|
||||||
PointerDeviceKind.trackpad,
|
Widget buildOverscrollIndicator(
|
||||||
PointerDeviceKind.unknown,
|
BuildContext context,
|
||||||
PointerDeviceKind.mouse,
|
Widget child,
|
||||||
};
|
ScrollableDetails details,
|
||||||
|
) => child;
|
||||||
|
}
|
||||||
|
|||||||
@@ -288,7 +288,7 @@ class MyApp extends StatelessWidget {
|
|||||||
FlutterSmartDialog.observer,
|
FlutterSmartDialog.observer,
|
||||||
],
|
],
|
||||||
scrollBehavior: PlatformUtils.isDesktop
|
scrollBehavior: PlatformUtils.isDesktop
|
||||||
? const CustomScrollBehavior(desktopDragDevices)
|
? const CustomScrollBehavior()
|
||||||
: null,
|
: null,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import 'package:PiliPlus/common/widgets/custom_icon.dart';
|
|||||||
import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart';
|
import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart';
|
||||||
import 'package:PiliPlus/common/widgets/flutter/text_field/controller.dart';
|
import 'package:PiliPlus/common/widgets/flutter/text_field/controller.dart';
|
||||||
import 'package:PiliPlus/common/widgets/pair.dart';
|
import 'package:PiliPlus/common/widgets/pair.dart';
|
||||||
|
import 'package:PiliPlus/common/widgets/scroll_behavior.dart'
|
||||||
|
show NoOverscrollIndicator;
|
||||||
import 'package:PiliPlus/common/widgets/scroll_physics.dart';
|
import 'package:PiliPlus/common/widgets/scroll_physics.dart';
|
||||||
import 'package:PiliPlus/common/widgets/sliver/sliver_floating_header.dart';
|
import 'package:PiliPlus/common/widgets/sliver/sliver_floating_header.dart';
|
||||||
import 'package:PiliPlus/common/widgets/sliver/sliver_to_box_adapter.dart';
|
import 'package:PiliPlus/common/widgets/sliver/sliver_to_box_adapter.dart';
|
||||||
@@ -412,6 +414,7 @@ class _DynamicDetailPageState
|
|||||||
return Padding(
|
return Padding(
|
||||||
padding: EdgeInsets.symmetric(horizontal: padding),
|
padding: EdgeInsets.symmetric(horizontal: padding),
|
||||||
child: NestedScrollView(
|
child: NestedScrollView(
|
||||||
|
scrollBehavior: const NoOverscrollIndicator(),
|
||||||
headerSliverBuilder: (context, innerBoxIsScrolled) {
|
headerSliverBuilder: (context, innerBoxIsScrolled) {
|
||||||
return [
|
return [
|
||||||
SliverToBoxWithOffsetAdapter(
|
SliverToBoxWithOffsetAdapter(
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import 'package:PiliPlus/common/widgets/dialog/dialog.dart';
|
import 'package:PiliPlus/common/widgets/dialog/dialog.dart';
|
||||||
import 'package:PiliPlus/common/widgets/keep_alive_wrapper.dart';
|
import 'package:PiliPlus/common/widgets/keep_alive_wrapper.dart';
|
||||||
import 'package:PiliPlus/common/widgets/loading_widget/loading_widget.dart';
|
import 'package:PiliPlus/common/widgets/loading_widget/loading_widget.dart';
|
||||||
|
import 'package:PiliPlus/common/widgets/scroll_behavior.dart'
|
||||||
|
show NoOverscrollIndicator;
|
||||||
import 'package:PiliPlus/common/widgets/scroll_physics.dart';
|
import 'package:PiliPlus/common/widgets/scroll_physics.dart';
|
||||||
import 'package:PiliPlus/common/widgets/sliver/sliver_pinned_header.dart';
|
import 'package:PiliPlus/common/widgets/sliver/sliver_pinned_header.dart';
|
||||||
import 'package:PiliPlus/models/common/live/live_dm_silent_type.dart';
|
import 'package:PiliPlus/models/common/live/live_dm_silent_type.dart';
|
||||||
@@ -93,6 +95,7 @@ class _LiveDmBlockPageState extends State<LiveDmBlockPage> {
|
|||||||
isPortrait
|
isPortrait
|
||||||
? ExtendedNestedScrollView(
|
? ExtendedNestedScrollView(
|
||||||
onlyOneScrollInBody: true,
|
onlyOneScrollInBody: true,
|
||||||
|
scrollBehavior: const NoOverscrollIndicator(),
|
||||||
headerSliverBuilder: (context, innerBoxIsScrolled) {
|
headerSliverBuilder: (context, innerBoxIsScrolled) {
|
||||||
return [
|
return [
|
||||||
SliverToBoxAdapter(child: left),
|
SliverToBoxAdapter(child: left),
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ import 'package:PiliPlus/common/widgets/dialog/report_member.dart';
|
|||||||
import 'package:PiliPlus/common/widgets/dynamic_sliver_app_bar/dynamic_sliver_app_bar.dart';
|
import 'package:PiliPlus/common/widgets/dynamic_sliver_app_bar/dynamic_sliver_app_bar.dart';
|
||||||
import 'package:PiliPlus/common/widgets/gesture/tap_gesture_recognizer.dart';
|
import 'package:PiliPlus/common/widgets/gesture/tap_gesture_recognizer.dart';
|
||||||
import 'package:PiliPlus/common/widgets/loading_widget/loading_widget.dart';
|
import 'package:PiliPlus/common/widgets/loading_widget/loading_widget.dart';
|
||||||
|
import 'package:PiliPlus/common/widgets/scroll_behavior.dart'
|
||||||
|
show NoOverscrollIndicator;
|
||||||
import 'package:PiliPlus/common/widgets/scroll_physics.dart';
|
import 'package:PiliPlus/common/widgets/scroll_physics.dart';
|
||||||
import 'package:PiliPlus/http/live.dart';
|
import 'package:PiliPlus/http/live.dart';
|
||||||
import 'package:PiliPlus/http/loading_state.dart';
|
import 'package:PiliPlus/http/loading_state.dart';
|
||||||
@@ -92,8 +94,9 @@ class _MemberPageState extends State<MemberPage> {
|
|||||||
() => switch (_userController.loadingState.value) {
|
() => switch (_userController.loadingState.value) {
|
||||||
Loading() => m3eLoading,
|
Loading() => m3eLoading,
|
||||||
Success(:final response) => ExtendedNestedScrollView(
|
Success(:final response) => ExtendedNestedScrollView(
|
||||||
key: _userController.scrollKey,
|
|
||||||
onlyOneScrollInBody: true,
|
onlyOneScrollInBody: true,
|
||||||
|
key: _userController.scrollKey,
|
||||||
|
scrollBehavior: const NoOverscrollIndicator(),
|
||||||
pinnedHeaderSliverHeightBuilder: () =>
|
pinnedHeaderSliverHeightBuilder: () =>
|
||||||
kToolbarHeight + MediaQuery.viewPaddingOf(context).top,
|
kToolbarHeight + MediaQuery.viewPaddingOf(context).top,
|
||||||
headerSliverBuilder: (context, innerBoxIsScrolled) {
|
headerSliverBuilder: (context, innerBoxIsScrolled) {
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import 'package:PiliPlus/common/widgets/flutter/pop_scope.dart';
|
|||||||
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
||||||
import 'package:PiliPlus/common/widgets/keep_alive_wrapper.dart';
|
import 'package:PiliPlus/common/widgets/keep_alive_wrapper.dart';
|
||||||
import 'package:PiliPlus/common/widgets/route_aware_mixin.dart';
|
import 'package:PiliPlus/common/widgets/route_aware_mixin.dart';
|
||||||
|
import 'package:PiliPlus/common/widgets/scroll_behavior.dart'
|
||||||
|
show NoOverscrollIndicator;
|
||||||
import 'package:PiliPlus/common/widgets/scroll_physics.dart'
|
import 'package:PiliPlus/common/widgets/scroll_physics.dart'
|
||||||
show tabBarView, platformAlwaysClampingPhysics, platformClampingPhysics;
|
show tabBarView, platformAlwaysClampingPhysics, platformClampingPhysics;
|
||||||
import 'package:PiliPlus/common/widgets/sliver/video_header.dart';
|
import 'package:PiliPlus/common/widgets/sliver/video_header.dart';
|
||||||
@@ -520,6 +522,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
|
|||||||
physics: platformClampingPhysics,
|
physics: platformClampingPhysics,
|
||||||
key: videoDetailController.scrollKey,
|
key: videoDetailController.scrollKey,
|
||||||
controller: videoDetailController.scrollCtr,
|
controller: videoDetailController.scrollCtr,
|
||||||
|
scrollBehavior: const NoOverscrollIndicator(),
|
||||||
pinnedHeaderSliverHeightBuilder: () {
|
pinnedHeaderSliverHeightBuilder: () {
|
||||||
double pinnedHeight = this.isFullScreen || !isPortrait
|
double pinnedHeight = this.isFullScreen || !isPortrait
|
||||||
? maxHeight - (isWindowMode && !isPortrait ? 0 : padding.top)
|
? maxHeight - (isWindowMode && !isPortrait ? 0 : padding.top)
|
||||||
|
|||||||
@@ -84,7 +84,6 @@ $patches = @($ModalBarrierPatch, $TextSelectionPatch, $MouseCursorPatch,
|
|||||||
|
|
||||||
switch ($platform.ToLower()) {
|
switch ($platform.ToLower()) {
|
||||||
"android" {
|
"android" {
|
||||||
$reverts += $NewOverScrollIndicator
|
|
||||||
$patches += $BottomSheetAndroidPatch
|
$patches += $BottomSheetAndroidPatch
|
||||||
$patches += $ScrollViewPatch
|
$patches += $ScrollViewPatch
|
||||||
$patches += $NavigatorPatch
|
$patches += $NavigatorPatch
|
||||||
|
|||||||
Reference in New Issue
Block a user