Hola, Amigos! Продолжаем разбираться с пагинацией. Сегодня рассмотрим, как подключить логику работы к пользовательскому интерфейсу.
Для того, чтобы мы могли вызывать подгрузку новой страницы, нам нужен триггер. В зависимости от функционала можно рассмотреть как навигацию по страницам, в таком случае необходимо будет сбрасывать предыдущие данные, так и реализацию бесконечного списка, который мы и разберем подробнее.
В бесконечном списке страницы грузятся в момент, когда пользователь практически доходит до конца. Для этого нам понадобится
Тут мы получаем текущее и максимальное положение скролла и сравниваем их. Совет - не нужно дожидаться, пока пользователь дойдет до самого конца списка, лучше начинать грузить пораньше, например, когда до максимума осталось 200 пикселей. Тут все зависит от высоты элементов списка и их количества на экране.
Следующий момент - виджет загрузки первой страницы. Каким он будет, зависит от вас. Часто используют
И в самом конце, нужно сделать отображение загрузки новой страницы. Для этого мы манипулируем количеством элементов в списке и его последним элементом:
Как и в случае с первоначальной загрузкой, вы можете выбрать то, что вам удобно и подходит.
Делитесь в комментариях, а каким виджетом вы показываете состояние загрузки на ваших проектах?
Для того, чтобы мы могли вызывать подгрузку новой страницы, нам нужен триггер. В зависимости от функционала можно рассмотреть как навигацию по страницам, в таком случае необходимо будет сбрасывать предыдущие данные, так и реализацию бесконечного списка, который мы и разберем подробнее.
В бесконечном списке страницы грузятся в момент, когда пользователь практически доходит до конца. Для этого нам понадобится
ScrollController, который мы подцепляем к виджету списка, это может быть ListView.builder или ListView.separated. Далее нужно добавить прослушку:
_scrollController.addListener(() {
final currentScroll = _scrollController.position.pixels;
final maxScroll = _scrollController.position.maxScrollExtent;
if (currentScroll >= (maxScroll - 200) && !isLoading) {
… // Вызов функции для подгрузки
}
});
Тут мы получаем текущее и максимальное положение скролла и сравниваем их. Совет - не нужно дожидаться, пока пользователь дойдет до самого конца списка, лучше начинать грузить пораньше, например, когда до максимума осталось 200 пикселей. Тут все зависит от высоты элементов списка и их количества на экране.
Следующий момент - виджет загрузки первой страницы. Каким он будет, зависит от вас. Часто используют
CircularProgressIndicator или какой-либо скелет, например, с Shimmer эффектом. Показываем мы его, если находимся в состоянии загрузки данных и у нас пока нет элементов списка:
if (isLoading && items.isEmpty) {
return …
}
И в самом конце, нужно сделать отображение загрузки новой страницы. Для этого мы манипулируем количеством элементов в списке и его последним элементом:
ListView.builder(
conroller: _scrollController,
…
itemCount: items.length + (isLoading && !isLastPage ? 1 : 0),
itemBuilder: (context, index) {
if (index < items.length) {
return … // Ваш элемент списка
}
return … // Ваш индикатор загрузки
},
);
Как и в случае с первоначальной загрузкой, вы можете выбрать то, что вам удобно и подходит.
Делитесь в комментариях, а каким виджетом вы показываете состояние загрузки на ваших проектах?
👍10❤🔥4❤3
Hola, Amigos! На связи Павел Гершевич, Mobile TeamLead в Amiga. В каждом приложении мы авторизуем пользователей, но не все встраивают механизмы обновления токенов.
Поэтому мы написали статью о том, как это делается, и поделились нашим опытом. Из нее вы узнаете:
Как работает авторизация запросов на сервере
🔵 Что хранит в себе JWT и как узнать, когда он закончит действовать
🔵 Как работает QueryInterceptor в Dio и чем он отличается от обычного
🔵 3 способа обработки токенов с завершившимся сроком действия
Ссылка на статью на Хабре
Делитесь в комментариях, а как вы поступаете при получении ошибки 401 Unauthorized?
Поэтому мы написали статью о том, как это делается, и поделились нашим опытом. Из нее вы узнаете:
Как работает авторизация запросов на сервере
Ссылка на статью на Хабре
Делитесь в комментариях, а как вы поступаете при получении ошибки 401 Unauthorized?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤3🔥3
Hola, Amigos! На связи Павел Гершевич, Mobile TeamLead в Amiga. Для того, чтобы наши приложения работали лучше, можно отслеживать их жизненный цикл, чтобы не совершалось лишних действий. Для этого нам нужен
Рассказывайте в комментариях, а что вы делаете при изменении жизненного цикла приложения?
AppLifecycleState, который предоставляет добавление обратных вызовов для изменения состояния. Давайте посмотрим, какие состояния есть у Flutter-приложений:resumed - стандартное состояние, когда приложение находится в foreground. При переходе в него можно запускать остановленные потоки данных (Stream) и анимации, а также обновлять устаревшие данные.inactive - наше приложение видно, но пользователь не может с ним работать. Его можно увидеть, когда мы смотрим на все свернутые приложения. Также, например, открытие системного диалогового окна для выдачи разрешения переведет в это состояние. Тут можно остановить анимации. Но учитывайте, это состояние - временное.hidden - еще одно временное состояние. Наше приложение не видно, но оно еще не полностью на паузе. Оно добавлено в Flutter 3.13 чтобы мы могли сохранить состояние, пока операционная система не порезала ресурсы.paused - наше приложение полностью в фоне. Основной isolate еще работает, но Flutter Engine уже не занимается рендерингом. В этом состоянии можно отключиться от WebSockets, отменить работу таймеров, прослушку потоков данных. Но из этого состояния ОС может закрыть приложение.detached - крайнее состояние нашего приложения. Оно показывает, что приложение закрывается либо открывается (холодный запуск).Рассказывайте в комментариях, а что вы делаете при изменении жизненного цикла приложения?
1🔥11❤6👍5
Hola, Amigos! Мы все любим ускорять и упрощать написание шаблонного кода. Один из таких методов - Snippets.
Snippet - аббревиатура, которую IDE может преобразовать в код.
Показываем, как это сделать в Android Studio. А в следующей части расскажем про VS Code.
Рассказывайте в комментариях, используете snippets в работе?
Snippet - аббревиатура, которую IDE может преобразовать в код.
Показываем, как это сделать в Android Studio. А в следующей части расскажем про VS Code.
Рассказывайте в комментариях, используете snippets в работе?
1❤9👍8🔥5
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥16❤9👍7
Hola, Amigos! В прошлой части мы показали как создать свой собственный Snippet в Android Studio. Теперь пришла очередь сделать это в VS Code.
Делитесь в комментариях, какие Snippets для вас были бы самыми полезными?
Делитесь в комментариях, какие Snippets для вас были бы самыми полезными?
1🔥13❤4👍3