Как мне добавить переполнение в списки в Flutter?

#flutter

#flutter

Вопрос:

Я хочу добавить overscrolls в конце и в верхней части списка, только если кто-то выполняет overscrolls.

Итак… У меня было несколько идей, я попытался начать с использования GestureDetector, и, похоже, он не работает, если список больше экрана, затем я добавил контроллер прокрутки ListView, но он работает только в том случае, если список больше экрана.

Я попытался добавить его через уведомление, но это кажется слишком медленным.

Есть идеи?

 class _PullableListState extends State<PullableList> {
  double overScrollOnEnd = 0;

  @override
  Widget build(BuildContext context) {
    return NotificationListener<ScrollNotification>(
      onNotification: (notification) {
        // print(notification.metrics.pixels);
        if (notification is OverscrollNotification) {
          setState(() {
            overScrollOnEnd  = notification.dragDetails.delta.dy;
          });
          print(overScrollOnEnd);
        }
        if (notification is ScrollUpdateNotification) {
          setState(() {
            overScrollOnEnd = 0;
          });
        }
        return true;
      },
      child: Container(
        margin: EdgeInsets.only(top: max(overScrollOnEnd, 0)),
        child: ListView.builder(
          itemBuilder: widget.itemBuilder,
          itemCount: widget.itemCount,
        ),
      ),
    );
  }
}
  

Ответ №1:

Вы хотите, чтобы AlwaysScrollableScrollPhysics сочетался с BouncingScrollPhysics.

 class _PullableListState extends State<PullableList> {
  double overScrollOnEnd = 0;

  @override
  Widget build(BuildContext context) {
    return Container(
      margin: EdgeInsets.only(top: max(overScrollOnEnd, 0)),
      child: ListView.builder(
        physics: BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()),
        itemBuilder: widget.itemBuilder,
        itemCount: widget.itemCount,
      ),
    );
  }
}
  

Комментарии:

1. Это похоже на решение проблемы.

2. Если бы я хотел добавить действие, допустим, если бы я должен был переполниться на величину X, как бы вы его добавили? (Вы уже ответили на мой вопрос, поэтому я благодарю вас, я просто жду 10 минут, чтобы одобрить ваш ответ).

3. Для этого вам все равно придется использовать ScrollNotifications. Это просто физика прокрутки, и она сама по себе не генерирует никаких событий.