ebobola-dev / flutter-dev-posts

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Flutter Dev Posts on Reddit App

Preview

Экран Списка постов

three post list images

Экран Поста

two post page images

Landscape отображение экрана поста

post page with image landscape post page without image landscape

Описание работы приложения

  • При запуске приложения читаются сохранные посты из локальной базы данных
  • На экране списка постов можно обновить список постов, нажав на кнопку в правом верхнем углу экрана или потянув список постов вниз (pull to refresh)
    • Новые посты добавяться в начало списка и сохранятся в базе данных, старые посты изменяться, посты в которых есть изменения, изменятся, также изменения перезапишутся в базе данных
    • Если при обновлении произойдет какая-то ошибка, сверзу появится снек бар с сообщением об ошибке
  • При клике на пост, откроется экран с подробной информацией об этом посте

Немножечко костылей

Об иконке обновления (кнопке обновления постов)

Моя идея заключалась в том, чтобы иконка вращалась при обновлении и при окончании обновления она докрутилась до начального положения

update button code

Мне нужно было узнать, когда анимация вращения иконки завершилась, не считая при этом анимацию докручивания иконки, поэтому я добавил флаг, который был поднят только во время вращения иконки, не включая докручивание, иначе если просто использовать флаги AnimationController'a, анимация вращения иконки не запустилась бы, если начать обновление во время докручивания иконки Вероятно есть более лучшее решение

О кешировании постов и их изображений (базе данных)

Я использовал Hive как локальное хранилище постов, через некоторое время понял, что в Hive объекты сортируются автоматически по ключам, и у меня нет возможности добавить объекты на какое-то нн-ое место (в данном случае мне нужно было добавлять посты в начало списка(хранилища))

Лучшим решением наверно было бы использоваться другой вариант хранилища, но у меня не было времени всё переделывать, поэтому я решил сохранять порядок постов (сохранять его локально), и читать посты из хранилища в нужном порядке

Сохранение изображений постов я тоже сделал очень примитивно, не успел полностью протестировать его работу, скорее всего там могут присутствовать баги

Другое

Landscape отображение экрана поста не протестировано до конца, возможно будет криво при больших размерах картинки Также я не успел полностью протестировать работу базы данных, и кеширование изображений

При написании приложения использовал Bloc как стейт-менеджмент Связку Bloc + Freezed использовал первый раз

На всю работу у меня ушло примерно 16 часов, но я часто отвлекался

About


Languages

Language:Dart 63.9%Language:C++ 17.2%Language:CMake 14.9%Language:HTML 1.5%Language:C 1.2%Language:Swift 1.1%Language:Kotlin 0.1%Language:Objective-C 0.0%