Пишу сервис для общения: перелопачиваю клиентскую часть
Добрался до работы над чатами и все еще работаю над созданием персональных чатов между пользователями. Параллельно пробрасываю логику груповых чатов и каналов. Но это не все, еще и интерфейсом занимаюсь:
На вырвиглазные сочетания цветов пока не обращайте внимания. Подбираю специально контрастные цвета, чтобы можно было легко заметить просчеты. Иконки тоже почти случайно раскидал, взял первое попавшееся что было в "стандартном наборе разработчика".
Странное дело, на экране монитора интерфейс воспринимается иначе, не так как на мобильном устройстве (расположение и размер элементов). Из-за этого в последнее время смотрю как выглядит сборка прямо на устройстве.
В окно поиска контактов/создания чата внизу добавил размытие и пару кнопочек:
Размытие экрана унифицировал немного, теперь его можно подключать к каждому окну отдельно. Работает хорошо, но насколько понимаю, неоптимально. Потом может быть вернусь еще к нему.
Сверху сделал заготовку с областью для сторис (красная область), снизу меню с кнопками для быстрого доступа к функциям приложения. Над звонками еще не работал, но планы под это дело имеются.
Над размытием пришлось много возиться. Очень много. Если хочешь сделать что-то не похожее на интерфейс 2000-х, то для этого нужно использовать передовые технологии 😂😂😂 Например размытие по градиенту 😂😂😂
Не знаю в чем проблема сделать эффективное размытие в Flutter, но проблема у них есть. Есть и куча костыльных плагинов и куча заплаток для Flutter. Для Flutter есть куча всего созданного разными разработчиками и подключается каждый пакет отдельно. А вот на Unity3D размытие можно было бы добавить в пару кликов: кидаешь Canvas, пишешь шейдер какой хочешь, позиционируешь слой размытия где хочешь, настраиваешь очередность рендера, ползунками настраиваешь парамтеры размытия. Учитываешь в шейдере особенности железа и вуаля, все замечательно работает. Знаю о чем говорю, в Total Reload работал над графикой:
Разработчики Flutter мне, наверно, бы сказали: нравится Unity? Ну и катись:
В Unity3D как хочешь, так и делаешь. Хотя вру. В Unity3D работает немного иначе: ты не делаешь баги (если не делаешь), но за тебя делает баги Unity3D 😂 Опыт работы в ней лет 10, так что, наверно, знаю о чем говорю. Да и правка и репорт на баги в Unity3D выглядят примерно так:
В ощем не соскучишься
Есть интересный момент. Минимальный вес приложения на Unity - около 15 мб. Это связано с тем, что в проект добавляется физ. движок. Это все же инструмент разработки для игр.
В том числе и из-за веса решил создавать проект не на Unity, а на Flutter. На днях узнал что минимальный вес приложения на Flutter тоже около 15 мб 😂😂😂
Структура клиента
Ранее в посте сетовал что я сам себе злобный буратино и мне не нравится то, как организовал структуру проекта. В итоге сегодня мои руки были по локоть в крови от усиленного рефакторинга кода. В какой-то момент решил проиндексировать каталоги проекта, чтобы они располагались в том порядке в котором проиндексированы а не по алфавиту:
Не знаю можно создавать имена каталогов начинающиеся с цифр или нельзя. Вообще у программистов нельяз. Но если очень хочется, то, наверно, все же льзя.
Системные вызовы в приложении
Приложению очень важно быть в курсе того, что сейчас с ним происходит: свернуто оно или пользователь его закрывает.
Ранее писал код под настольные компьютеры, веб и мобильные устройства. Так вот, у всех свой набор методов, которые вызываются при наступлении того или иного события. На телефонах за эти события отвечает WidgetsBindingObserver, на компьютерах WindowListener, на web-версии уже не вспомню что, но я вовремя психанул и сделал общий интерфейс на все и вынес его в отдельный файл чтобы не сойти с ума от поисков где что вызывается:
Теперь в одном месте все события. Не знаю почему в Flutter не унифицировали все это дело. В Unity3D, вроде как, было проще. OnApplicationQuit прописываешь и понимаешь что если он вызвался, то приложение закрывается и не имеет значения на чем работает приложение: планшет, мобильный телефон или еще что-то.
Работа над чатами
Вообще все эта работа проходила на фоне работы над созданием чатов. Я промахнулся, не рассчитал 😂 В общем как-то так получилось, что в процессе работы меня переклинило и решил что нормальная тема когда человек нажимает кнопку типа "Создать чат" и создает чат с человеком.
Чат должен создаваться просто: нажал на пользователя и отправил сообщение. Если отправил сообщение, то чат создался. Не отправил - не создался. А вот каналы и групповые чаты можно создавать через нажатие на кнопку "Создать ***".
В итоге переписывал немного серверную логику с учетом замечаний, клиента немного переписал, познакомился с парой людей на улице (которые недовольны мессенджерами), скинул им ссылку на группы чтобы подписались на меня. На данный момент добавляю в клиентское приложение вебсокеты, работаю над созданием чатов, обменом сообщениями, откладываю копейку на серверное железо 😁.
Пожалуй все на сегодня, отпишусь как появятся новости 😁.
--
Кому интересно, можете поддержать (лайком) или подписаться куда-нибудь на меня, попробуете сервис в числе первых.
Постепенно буду продолжать делиться успехами разработки.















