Как: проверить, прокручивается ли ListView / больше экрана

#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.