#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. Это просто физика прокрутки, и она сама по себе не генерирует никаких событий.