Flutter ScrollPhysics.shouldAcceptUserOffset не влияет на поведение прокрутки - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть 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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...