Senior Flutter Developer
Коротко
Builds two Flutter apps (exchange and driver) from a shared codebase; integrates native Kotlin/Swift modules for background location and geofencing. · Needs: Requires Flutter (Dart) development, native modules in Kotlin and Swift, background location tracking, geofencing, REST API, WebSocket.
Описание от работодателя
О проекте FURGON — биржа грузоперевозок для Центральной Азии. Грузовладельцы публикуют грузы, перевозчики находят их и откликаются, а перевозка ведётся прямо на площадке: статусы рейса, документы, местоположение машины. Первая страна — Казахстан, следом Узбекистан и Кыргызстан.
Сервер и веб-кабинет уже работают. Нужно сделать два мобильных приложения под Android и iOS на Flutter из общей кодовой базы:
приложение биржи: для грузовладельца, экспедитора и логиста перевозчика;
приложение водителя : рейсы, статусы, фото документов, фоновое отслеживание местоположения.
Аккаунт у приложений общий. Дизайн готов, экраны нарисованы.
Формат работы Проект с фиксированным объёмом: разработка приложения по готовому дизайну, публикация в магазинах.
Оплата за проект поэтапно, после приёмки каждого этапа.
Полностью удалённо.
Технология Оба приложения делаются на Flutter (Dart) из одной кодовой базы с общими модулями. Фоновое отслеживание местоположения и геозоны требуют нативной части: модулей на Kotlin для Android и на Swift для iOS внутри Flutter-приложения или проверенной библиотеки фоновой геолокации. Какую библиотеку взять и как устроить нативную часть, обсуждаем с вами на старте.
Стек проекта Мобильные приложения: Flutter (Dart), нативные модули на Kotlin и Swift
Сервер: Go, PostgreSQL, Redis, REST API и WebSocket, Nginx
Веб-кабинет: Vue 3, Pinia, Axios, vue-i18n, Tailwind CSS
Интерфейс на четырёх языках: русский, казахский, узбекский, английский
Уведомления: SMS, WhatsApp, Telegram; мониторинг — Prometheus и Grafana
Объём проекта Общая часть
Архитектура двух приложений в одном хранилище кода: общие Dart-пакеты (вход, связь с сервером, компоненты дизайна, переводы, работа без связи) и отдельные сборки каждого приложения.
Общий аккаунт: вход по коду из SMS, безопасное хранение сессии с короткоживущим токеном доступа и его обновлением.
Push-уведомления (Firebase Cloud Messaging и Apple Push Notification service).
Сбор ошибок и падений (Firebase Crashlytics или Sentry).
Приложение биржи
Лента грузов и машин с фильтрами и обновлением в реальном времени через WebSocket, карточка груза, отклик, мои перевозки, уведомления.
Приложение водителя
Вход по приглашению логиста из SMS, без регистрации компании.
Рейсы и карточка рейса, отметки шагов «Едет на погрузку», «Погрузка», «В пути», «Разгрузка», съёмка и загрузка фото груза и документов со сжатием, карта и маршрут.
Фоновое отслеживание местоположения в рейсе: передача координат при свёрнутом приложении, геозоны погрузки и разгрузки, бережный расход батареи, стабильная работа на устройствах с жёстким энергосбережением (Xiaomi, Samsung, Huawei) и на бюджетных телефонах водителей.
Работа без связи на трассе: приложение копит координаты, отметки и фото и досылает их, когда появляется сеть, без потерь и дублей.
Публикация
Оба приложения в Google Play и App Store, включая проверку Apple и декларацию Google Play о фоновом доступе к геолокации для приложения водителя.
Обязательные требования От 6 лет коммерческой мобильной разработки, из них не меньше 2 лет на Flutter.
Не меньше двух приложений на Flutter, опубликованных в Google Play и App Store.
Умение писать нативные модули на Kotlin и Swift и связывать их с Flutter через платформенные каналы (platform channels).
REST, WebSocket, JSON; авторизация токенами с обновлением; генерация кода обращения к серверу из описания OpenAPI.
Будет плюсом Будет большим плюсом: опыт фоновой геолокации во Flutter-приложении: готовый модуль (например, flutter_background_geolocation) или собственная реализация; службы переднего плана в Android (Foreground Service), режим Doze, разрешения на геолокацию в Android 10–15, режим «Всегда» в iOS.
Опыт в логистике, доставке, такси или других продуктах с трекингом; опыт пары приложений «заказчик — исполнитель».
Прохождение декларации Google Play о фоновой геолокации.
Карты во Flutter: Яндекс Карты или 2ГИС (у обоих есть официальные модули), Google Maps.
Автоматическая сборка и публикация (Codemagic, GitHub Actions, fastlane).
Многоязычный интерфейс, часовые пояса, несколько валют.
Базовое понимание Go и PostgreSQL.