У меня есть NestedScrollView с CustomScrollView в качестве дочернего элемента.
Для CustomScrollview я хотел бы определить физику прокрутки, которая отображает только поведение прокрутки внизу. Если в верхней части происходит избыточная прокрутка, перетаскивание должно быть передано в родительскую прокручиваемую область (NestedScrollView).
Я попытался добиться этого поведения, установив значение acceptUserOffset. К сожалению, этот метод не вызывается постоянно. Как принудительно обновить ScrollPhysics (без прохождения StatefullWidget)?
Вот реализация внутреннего ScrollPhysics:
import 'package:flutter/cupertino.dart';
class InnerScrollPhysics extends BouncingScrollPhysics {
bool _overscroll = false;
InnerScrollPhysics({ScrollPhysics parent,}) : super(parent: parent);
@override
InnerScrollPhysics applyTo(ScrollPhysics ancestor) {
return InnerScrollPhysics(parent: buildParent(ancestor));
}
@override
bool shouldAcceptUserOffset(ScrollMetrics position){
return !_overscroll; //This does not prevent the scrollable from scrolling :(
//super.shouldAcceptUserOffset(position);
}
@override
bool get allowImplicitScrolling => false;
@override
double get minFlingVelocity => super.minFlingVelocity;
@override double applyBoundaryConditions(ScrollMetrics position, double value) {
if (value < position.pixels && position.pixels <= position.minScrollExtent) { // underscroll
_overscroll = true;
return value - position.pixels;
}
if (value < position.minScrollExtent && position.minScrollExtent < position.pixels) {// hit top edge
_overscroll = true;
return value - position.minScrollExtent;
}
//Else: no overscroll -> behave as usual
_overscroll = false;
return 0;
}
}