Приведи пример фичи, реализацией которой гордишься.

Ответ

Одна из фич, которой я горжусь, — это офлайн-карта с маршрутизацией в приложении для туристов на Flutter. Пользователи могли загружать региональные карты и строить пешеходные маршруты без подключения к интернету.

Техническая реализация:

  1. Выбор стека: Для работы с векторными картами я использовал пакет flutter_map вместе с vector_tiles. Данные карт (в формате .mbtiles) хранились локально в приложении после загрузки.
  2. Офлайн-маршрутизация: Самая сложная часть. Я интегрировал движок маршрутизации Valhalla, скомпилированный в нативную библиотеку (с помощью FFI — dart:ffi). Для Android и iOS пришлось писать отдельные плагины, которые загружали граф дорог (также предзагружаемый) и вычисляли маршрут.
    // Упрощённый пример вызова нативного кода через FFI
    final route = await OfflineRouter.instance.calculateRoute(
      start: LatLng(55.7558, 37.6173),
      end: LatLng(55.7601, 37.6245),
      profile: RoutingProfile.walking,
    );
  3. Отображение маршрута: Рассчитанный маршрут (список координат) отрисовывался поверх карты с помощью CustomPainter, что давало полный контроль над стилем линии (цвет, ширина, пунктир).
  4. Управление данными: Реализовал систему фоновой загрузки и обновления карт с индикацией прогресса и проверкой целостности файлов.

Чем я горжусь:

  • Архитектура: Фича была полностью изолирована в отдельный feature-модуль по принципу Feature-First. Использовался riverpod для состояния, что упростило тестирование.
  • Производительность: Маршрут длиной 10 км рассчитывался за 1-2 секунды на среднем смартфоне, без лагов при отрисовке.
  • Пользовательский результат: Фича стала ключевой для приложения, так как туристы часто оказывались вне зоны покрытия. По данным аналитики, пользователи с загруженными картами проводили в приложении на 40% больше времени.

Этот опыт глубоко погрузил меня в нативные интеграции, работу с памятью в Dart FFI и оптимизацию тяжелых вычислений в мобильном приложении.

Ответ 18+ 🔞

Да ты послушай, какая история приключилась! Ебать мои старые костыли, я тут в одном приложении для туристов на Flutter такую штуку впилил, что до сих пор сам от себя охуеваю. Представь: офлайн-карта с маршрутизацией. То есть чел в горах, где связи ноль ебать, открывает приложение — а ему тропинку от точки А до точки Б строит. Вообще ништяк.

Как это всё под капотом устроено, ёпта:

  1. Карты: Взял flutter_map с vector_tiles. Карты регионов качаются в приложение одним файликом .mbtiles и лежат себе спокойно в памяти телефона. Без этих плясок с онлайн-тайлами.
  2. Самое мясо — маршрутизация: Вот тут была жесть, чувак. Нужен был движок, который граф дорог жуёт. Выбрал Valhalla. И его, блядь, пришлось в натив загнать! Сделал отдельные библиотеки под Android и iOS, а из Flutter через dart:ffi к ним обращаюсь. Граф дорог тоже предзагружаемый, весит, конечно, овердохуища, но что поделать.
    // Ну тут вроде всё понятно, дергаем нативку
    final route = await OfflineRouter.instance.calculateRoute(
      start: LatLng(55.7558, 37.6173),
      end: LatLng(55.7601, 37.6245),
      profile: RoutingProfile.walking,
    );
  3. Рисовка: Получил список точек — отрисовал линию поверх карты через CustomPainter. Хочешь синюю, хочешь пунктирную, хочешь с анимацией — полная власть.
  4. Загрузка: Сделал систему, чтобы карты в фоне качались, с прогресс-баром и проверкой, что файл не битый. А то скачает пользователь три гига, а там хуй с винтом.

Чем особенно доволен, бля:

  • Чистота: Всю эту банду — карты, маршрутизатор, логику — запихнул в отдельный feature-модуль. Состояние на riverpod. Тестировать — одно удовольствие, ничего нигде не ползает.
  • Скорость: На среднестатистическом телефоне маршрут на 10 километров считает за секунду-две. Никаких тормозов, всё летает.
  • Польза: Это ж, бля, главное! Туристы в лесах и горах без сети как сыр в масле катаются. Аналитика показала, что те, кто карты качал, в приложении на 40% дольше торчали. Вот она, победа.

В общем, эта фича меня конкретно прокачала: и в нативные интеграции нырнул с головой, и с памятью через FFI разобрался, и научился тяжелые вычисления на мобилке оптимизировать, чтобы не жрала батарею как не в себя. Ёперный театр, хорошая задача была.