1/Путь к первому мобильному приложению. Часть 0 - Вступление и цель

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

В плане проведения спортивных мероприятий также необходимы улучшения... Есть множество аспектов которые могли бы значительно упростить мобильные решения.

Одно из таких это фиксация участников судьями на контрольных пунктах в соревнованиях по радиоспорту. Это просто самый тривиальный пример.

Несмотря на то что электронная отметка участников уже повсеместна все равно судьи на контрольных пунктах обязаны вести резервную фиксацию "от руки". Подобная фиксация в конце соревновательного дня бывает очень полезной когда на дистанции остаётся несколько или вовсе один участник и опросив судей они могут сообщить был ли он у них или нет.

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

Приложение

Итак, что же должно уметь наше приложение:

  1. Работа в оффлайн-режиме. Несмотря на то что мобильные сети покрывают большие площади в нашей стране, соревнования могут проходить там где их нет... И в таком случае приложение просто должно заменять бумагу и ручку.
  2. Для работы в онлайн-режиме должна быть авторизация по ID и секретному ключу.
  3. Должна быть отдельная вкладка "История" в которой будут фиксироваться все подтверждённые записи, а при работе в онлайн-режиме такая информация должна дублироваться на сайте, т.е. необходим признак "синхронизирована" для каждой из записей.
  4. При работе в онлайн-режиме после успешной авторизации приложение должно получить информацию по старту: название, время в центре соревнований, стартовый протокол (номер участника - время).
  5. При работе в онлайн-режиме в верхней части рабочей области приложения должна быть область быстрого выбора номера участника. В данной области в ряд должны быть размещены номера участников в порядке старта (только в видимой области), т.е. первым в списке будет номер участника дольше всех находящийся на дистанции.
  6. Быстрый выбор номер участника должен быть всегда актуальным и не предлагать номера участников которые финишировали или вовсе не вышли на старт, т.е. необходимо регулярно проводить синхронизацию на предмет новой информации. Также в данной области не должны быть номера зафиксированные ранее судьёй.
  7. В нижней рабочей области приложения должно находиться поле ввода номера участника, которое должно принимать целочисленное неотрицательное значение, либо быть пустым. Также должна быть кнопка добавления. При активации поля появляющаяся клавиатура ввода на мобильном устройстве не должна его перекрывать.
  8. В средней рабочей области приложения должен находиться буфер временных фиксаций которые ещё не подтверждены. Сюда должны попадать записи при нажатии кнопки добавления в нижней рабочей области и при выборе номера из списка быстрого доступа в онлайн-режиме. При этом на момент попадания записи фиксируется текущее время.
  9. Записи в средней рабочей области должны содержать поле ввода номера участника, чтобы его можно было уточнить, время фиксации, кнопку обновления времени фиксации (на текущее в момент нажатия), кнопку подтверждения (перевода записи в историю с предварительной валидацией номера) и удаления (с подтверждением, желательно реализовать через свайп).
  10. Желательно реализовать возможность восстановления работы приложения в случае его закрытия по каким-либо причинам.
  11. В онлайн-режиме все номера попадающие в историю должны быть сразу синхронизированы. На случай нестабильного соединения должен быть установлен тайм-аут ожидания ответа и производится повторная отправка в виде массива данных всех несинхронизированных номеров в момент регулярного запроса новых данных.

Возможно, какие то функциональные особенности сейчас не учтены, например для будущих релизов я считаю было бы важным сделать авторизацию по QR-Code, но на текущий момент у меня стоит задача в принципе понять как писать приложения для мобильных устройств.

Цели

Итоговая цель: написать своё первое мобильное приложение.

Для разработки я принял решение выбрать фреймворк Flutter, с которым мне предстоит очень тесно познакомиться... но... ещё раньше мне потребуется разобраться в языке программирования Dart, который используется во Flutter.

Дополнительные цели:

  1. Изучение языка программирования Dart
  2. Изучение фреймворка Flutter