Приложение Маяки Эстонии
9 Января

Биг дэй, мазафака!

Чуть более трёх недель назад я писал, что "весь функционал приложения готов". Да, оставались мелочи, которые, как это часто бывает, отъели времени больше, чем основная часть разработки. Начну с того, что я "допилил" считанные минуты назад - карта. Я уже писал, что Google.Карты оставили не самое лучшее впечатление. Фиг бы с ним, но они ещё и платные и цена совершенно конская. Ещё в декабре я поискал альтернативы, достойного ничего не нашёл и решил выпускать приложение в релиз вообще без карт. Но на этой неделе мне попалась адаптация Leaflet под Flutter. Подключилась на ура и, что наиболее приятно, маркеров не закрысила. Карты подключил от MapBox. Что немаловажно в моём случае, есть возможность использования оффлайн-карт. Единственный досадный баг, который присутствовал: карта загружалась, но маркера начинали отображаться только когда тронешь экран. Простое понимание того, как всё работает, быстро дало решение. Надо сначала грузить данные о маркерах из файла, а потом инициализировать карту. Теперь всё работает просто сказочно.

Маяки Эстонии

В выходные, когда подготавливал фотки, всплыла ещё одна проблема: для некоторых маяков хотелось добавить не два снимка, а больше. Старый лэйаут имел по одной квадратной фотке во всю ширину сверху и снизу страницы с информацией о маяке. При повороте устройства в горизонтальное положение, нижняя картинка уходила вверх и обе фотки занимали половину ширины. Что делать, если фоток больше двух? Думал пару дней и нашёл решение в виде слайдера. Теперь, вместо верхней фотки, слайдер с автопрокруткой и наплевать пять там изображений или одно.

Маяки Эстонии

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

Маяки Эстонии

Из мелких переделок изменил общую палитру, чтобы избежать сходства с "синими соцсетями" - Фэйсбук, ВКонтос и Твиттер.

Ну и теперь главное: программная часть приложения готова. А вот контент ещё добавлять и добавлять: сделано лишь 30 маяков из 68. Потом будет тестирование и, если ничто не помешает, релиз.

18 Декабря

Бог управился за шесть дней и на седьмой отдыхал, я в его сроки не уложился. Хотя... Я о своём приложении. Подробнее о нём я расскажу позднее, когда выпущу, а сейчас непосредственно о разработке.
Итак, я начал писать приложение, чтобы освоить Flutter. То, что мне с своё время крайне бы пригодилось - энциклопедия маяков Эстонии с некоторой заточенностью под туриста. Первые полдня разработки я разбирался, что такое Flutter, устанавливал его и потом игрался с писькой примерами. После этого, вечером, я продумал структуру и особенности приложения. Так как оно рассчитано на туриста, у него может не быть интернета, значит все данные должны быть доступны и без него. Сами данные я для удобства решил хранить в JSON. Второй день я делал routing, главное меню и иконку, отображаемую при загрузке приложения. Иконка была такая:

На третий день выводил список всех маяков из JSON-файла и делал его фильтрацию. Для этого пришлось разбираться со StatefulWidget, их состояниями и переменными. На четвёртый день делал иконку приложения и переделывал иконку загрузки (творческий поиск, мать его), разбирался с передачей данных из виджета в виджет. Пятый день начался хорошо, я за пару часов запилил показ маркеров всех маяков на карте Гугла. Но дальше случился софтварный коллапс. Это нормально, что периодически что-то подвисает и приходится перезапускать Android Studio, но в этот раз, вероятно, повредился какой-то файл и всё в миг перестало работать. Перезапускал, перезагружался, а потом и переустанавливал. Flutter заработал, моё приложение - нет. Пришлось начинать новый проект, куда по файлику, по строчечке переносить всё из старого. В итоге, через 4 часа всё заработало, но уже с некоторой тормознёй и подвисаниями. Честно скажу, облегчения не испытал, скорее злость и раздражение.

На следующий день продолжил с картой. Заменил стандартные маркера на свои и выяснил два момента. Во-первых, из 68 объектов, Гугл показал лишь 59 маркеров, нагло проигнорировав очень близкие друг к другу. Во-вторых, свои маркера нормально выглядят на Android, но при этом раза в три крупнее на iOS. Короче, пришлось оставить стандартные маркера. Google Maps API для Flutter очень печалит, а альтернативу пока нашёл лишь одну. Также в этот день начал оформлять страницу информации о выбранном маяке. Никакого дизайна или хоть какого-то представления о нём не было, так что тыкался-мыкался. К концу дня удалось получить некий вектор от дизайнера, что я и реализовывал вчера вечером и сегодня утром. В настоящий момент (седьмой день) весь функционал приложения готов. Честно скажу, увлекло меня это дело не на шутку, забыл про всё на свете, занимался всё свободное время на работе и дома, до 11 часов в день. Да, я прекрасно понимаю, что сделано оно по выдранным из чужих примеров кускам кода. Оптимизировать буду, но позднее. Есть ещё пара декоративных "хотелок", которые бы тоже не помешало реализовать. Ну а первым делом надо добавить фотографии и данные по оставшимся 67 маякам, после этого можно будет выпускать бету приложения.

13 Декабря

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

Жизнь слишком коротка, чтобы кончать на простыню просто коротка. Я решил сразу писать полезное приложение, а какую тематику выбрать? Ну конечно, маяки. Продвинулся достаточно, чтобы собой гордиться. Подробности будут на следующей неделе.

2 Декабря

Почти день рождения...

... и почти сегодня. На самом деле, вчера исполнилось ровно 17 лет, как я придумал название newKAMiKAZE. По всем меркам, это очень старый блог, правда, тут есть две оговорки. Во-первых, была пауза в шесть с половиной лет, с 2004 по 2011. Ну и во-вторых, нынешний newKAMiKAZE совершенно не такой, каким он был на старте. И, положа руку на сердце, я часто думаю о том, чтобы скрыть все публикации до 2004 года. Там много личного, что совершенно неинтересно людям вне той, уже давно несуществующей тусовки.

Ну а пока, с праздником тебя, любимый сайт!

28 Ноября

Как обновлялись карты

Эпичная сага о том, как я интерактивную карту на странице маяков обновлял. Началось всё с добавления подсказок (info bubble) к маркерам. Добавил, поэкспериментировал с выводимой информацией, решил оставить самый минимум - название маяка и подсказку, что надо кликнуть на сам маркер. Всё круто, всё работает, но обратил внимание, что UI карты на русском, а названия посёлков - нет. Честно сказать, не смог вспомнить, были ли они раньше на русском. В любом случае, решил исправить. Начал читать документацию и выяснилось, что в версии карт 3.1 (а у меня использовалась 3.0) разделили растровые и векторные карты и перевод доступен только для вторых. Обновился - ляпота, хотя не всё пока переведено. Потестил на телефоне - печаль, скрипт вылетает. Вероятно, новая векторная отрисовка, плюс почти 80 маркеров на карте кладут процессор смартфона на лопатки. Пришлось "разделять и властвовать": на смартфонах показывется растровая карта с названиями на английском, на других платформах - переведённая векторная. Так мы стали на шаг ближе к идеалу.

Цитировать
в комментарии