#flutter #dart
#flutter #dart
Вопрос:
Я хотел бы определить, является ли ListView прокручиваемым или отображает элементы размером больше экрана.
Это связано с тем, что я хотел бы, чтобы сообщение show a toast сообщало пользователю о прокрутке вниз, но только в том случае, если дочерние элементы ListView прокручиваются, например, на некоторых больших устройствах список может фактически не нуждаться в прокрутке для отображения изображения, но на небольших устройствах большое изображение внутри ListView может быть прокручиваемым.
Ответ №1:
Вы можете получить ListView
высоту содержимого, обратившись к слушателю controller.position.maxScrollExtent
на controller
.
final ScrollController controller = ScrollController();
@override
void initState() {
_controller.addListener(_scrollListener);
super.initState();
}
@override
void dispose() {
_controller?.removeListener(_scrollListener);
_controller.dispose();
super.dispose();
}
void _scrollListener() {
// you can access the height of ListView content using maxScrollExtent
print(_controller.position.maxScrollExtent);
// if you wanna get once you can directly removeListener
// _controller.removeListener(_scrollListener);
}
Вам необходимо подключиться _controller
к ListView
контроллеру
Комментарии:
1. как мы можем узнать, начинается ли прокрутка со значением
_controller.position.maxScrollExtent
? @Ampersanda
Ответ №2:
Сначала возьмите форму размера экрана MediaQuery.of(context).size.height
в качестве ссылки на размер экрана.
Затем теперь проверьте этот ссылочный размер с высотой listView
и установите bool
переменную true
или false
, чтобы показать toast
Пример:
double screenSize=MediaQuery.of(context).size.height
Если ваш ListView имеет одну плитку высотой 30,0, включая верхние и нижние поля для плитки. и есть 10 плиток. Тогда ListView
высота будет равна 300,0
Теперь, если размер экрана больше 300,0, тогда нет необходимости показывать toast
, а если он меньше, тогда покажите toast
Комментарии:
1. Я не думаю, что это практичный ответ, поскольку на экране могут быть другие виджеты с неизвестной высотой
2. @HassanM.Сказал, я думаю, именно поэтому это не помечено как ответ XD.