Серия «Проект с сервисом для общения»

8

Пишу сервис для общения: работа над контекстным меню⁠⁠

Серия Проект с сервисом для общения

Удалось выкроить время и вернуться к проекту. Доработал исчезновение дат, которые перекрывают сообщения. Тут можно видеть как даты исчезают и появляются:

Но даты, на самом деле, были доработаны давно. На днях исправлял ошибки (или по-заморски "баги") с анимациями:

1) Обработал разные ситуации промотки к сообщению. Теперь анимаци промотки остановится, если во время промотки к сообщению нажать на экран.
2) Доработал контекстное меню: убрал плашку с эмоджи для сообщений, которые не были отправлены. Учел отсутствие этой плашки при позиционировании контекстного меню.
3) Встретился со старым знакомым, пару лет его не видел 🙂 Показал приложение на телефоне (без серверной части, то есть по сути нерабочее), он потыкался и ему стало интересно помочь с обратной связью. На данный момент набралось более 250 человек, которым данный проект кажется интересным 🙂

Тут скрины разного позиционирования контекстного меню (с плашкой выбора эмоджи и без):

В процессе работы над отправкой эмоджи, пришлось вернуться к серверной части и поправить код обработки эмоджи. Исправил ситуацию, которая положила бы сервер полностью 😂 Да-да, глянул незамыленным глазом и заметил 😂

Сейчас работаю над механизмом отправки эмоджи. Если быть точнее, унифицирую/дорабатываю систему отправки событий на сервер. А эмоджи будет частным случаем работы данной системы доставки и синхронизации событий.

Пока вроде бы это все новости о сервисе для общения.

--

По вечерам разрабатываю сервис для общения на Go & Flutter. Кому интересно, можете подписаться куда-нибудь на меня, попробуете его в числе первых. Постепенно буду продолжать делиться успехами разработки сервиса.

Показать полностью 3
20

Выбирай ник "мудро"⁠⁠

Серия Проект с сервисом для общения

Вчера закончил переписывать код (Мое основное занятие: сперва делаешь, потом переделываешь. И так по кругу). Наконец добил систему обновления аватарок, никнеймов.

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

Серьезно задумался о необходимости ввода ограничений на редактирование ника. Говорят, что многие злоупотребялют это возможностью. По этой причине в первое время будет действовать ограничениена частоту его редактирования. Так что ник нужно выбирать мудро :)

Скрин окон сервиса в режиме тестов

Скрин окон сервиса в режиме тестов

--

Кому интересно, можете подписаться куда-нибудь на меня, попробуете сервис в числе первых.
Постепенно буду продолжать делиться успехами разработки :)

Показать полностью 1
7

Пишу сервис для общения: оптимизация⁠⁠

Серия Проект с сервисом для общения

На днях решил проверить как приложение будет работать на iPhone 16 и древненьком Huawei P30 Lite. На айфоне более-менее, проблем с производительностью замечено не было (в релизной/продакшен сборке). А вот Huawei P30 Lite начал агитировать в пользу проведения основательной (ну или хотябы какой-то) работы по оптимизации приложения.

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

В Total Reload занимался программной частью и оптимизация по рендеру сводилась к GPU Instancing, Dynamic/Static Batching, LOD (моделе и шейдеры), render pipeline, настройка количества пост-эффектов и их группировка в одном шейдере. Это основные моменты по оптимизации. В итоге частота кадров 30-60 fps в зависимости от видеокарты:

В flutter не обнаружил почти ничего из того, что использовал в игровой разработке. Во всяком случае из всего вышеперечисленного "напрямую" ничего не использовал. Потому в первое время делал setState() (обновление состояния/внешнего вида виджета на экране) максимально часто. В итоге получил довольно тормознутый интерфейс.

Мощнейшая оптимизация

1) setState теперь стараюсь не вызывать, пытаюсь всюду использовать notifier.
2) обновляю только то, что нужно обновить.

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

Сегодня добавил кнопку промотки истории переписки к самому началу:

Кнопка исчезает/появляется в нужный момент. Промотку можно остановить, если каснуться экрана в процессе промотки. Но это все из области "само собой разумеющееся".

Уже не первый раз спрашивают когда выложу в публичный доступ. Затрудняюсь сказать. Работаю, результаты видите. Можете по постам предположить дату выпуска первой версии 😅 Не могу озвучивать точные сроки тк могу их нарушить.

Еще иногда спрашивают примерно такие вопросы:

Мне неважно сколько человек им будет пользоваться. На данный момент делаю проект для себя, друзей и подписчиков. Не думаю, что оно как-то коммерциализируется, тем более само собой. В любом случае в этом году у меня совершенно нет времени заниматься раскруткой сервиса для общения. А вот работу забрасывать не буду. Скажу больше, во что бы то ни стало в свободные вечера буду заниматься доработкой и улучшением сервиса до выпуска, а после выпуска его поддержкой :)

Продолжаю работу над контекстым меню и взаимодействием с сервером :)

--

По вечерам разрабатываю сервис для общения на Go & Flutter. Кому интересно, можете подписаться куда-нибудь на меня, попробуете его в числе первых. Постепенно буду продолжать делиться успехами разработки сервиса.

Показать полностью 3
5

Пишу сервис для общения: прокрутка к сообщению⁠⁠

Серия Проект с сервисом для общения

Наконец добил механику прокрутки к заданному сообщению. Система несложная, но не было времени основательно сесть и придумать как прокручивать историю переписки.

Один из ранних вариантов прокрутки истории:

Плюсы:

  • как-то оно прокручивает к нужному сообщению

Минусы:

  • на обе ноги хромает производительность

  • проблемы с визуализацией сообщений (они пропадают в процессе прокрутки)

  • сломалась механика дат истории переписки (даты не прилипают к верхней части экрана)

  • сломалась анимация аватарок (тут они перестали корректно реагировать на поле ввода).

Сделано было так: в памяти создается второй массив сообщений и с ним производится поисковая работа параллельно работе интерфейса. Если скролить нужно недалеко, то по производительности терпимо. Если далеко - появляются тормоза.

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

Также добавил простенькую анимацию: найденное сообщение подсвечивается

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

Надеюсь сильно не застряну с контекстным меню 😅

--

По вечерам разрабатываю сервис для общения на Go & Flutter. Кому интересно, можете подписаться куда-нибудь на меня, попробуете его в числе первых. Постепенно буду продолжать делиться успехами разработки сервиса.

Показать полностью 1
8

Пишу сервис для общения: взаимодействие с сообщениями⁠⁠

Серия Проект с сервисом для общения

Добавил контекстное меню в сервис для общения 🙂
В первую очередь хотелось бы поблагодарить спонсора контекстного меню, а если точнее, то этого разработчика: Dexterfury. Его проект был взят в качестве основы: https://github.com/dexterfury/flutter_chat_reactions

Болванка с гитхаба немного доработана: переделаны анимации, доработаны кнопки, немного изменена механика взаимодействия с сообщениями и вот что получилось:

Думаю получилось неплохо, пока кажется "работает удобно" 🙂

Кстати, исправил выделение сообщений. Ранее при клике на сообщение на который был дан ответ оно выделялось вот такой серой полосой:

Пишу сервис для общения: взаимодействие с сообщениями

Полосу убрал, сейчас сам "бабл" вспыхивает и меняет цвет (на видео выше видно).

Контекстное меню и выбор действий с сообщениями добавил. Осталось (😂, да, осталось) нужно подключить сетевое взаимодействие. Напомню, севрер уже все поддерживает, нужно чтобы клиент корректно отправлял команды на сервер и обрабатывал его ответы. Буду работать над этим 🙂

--

По вечерам разрабатываю сервис для общения на Go & Flutter. Кому интересно, можете подписаться куда-нибудь на меня, попробуете его в числе первых. Постепенно буду продолжать делиться успехами разработки сервиса.

Показать полностью 5 1
12

Пишу сервис для общения: несколько моментов по сообщениям-ответам⁠⁠

Серия Проект с сервисом для общения

Планировал за вечер доделать систему ответов. Но не справился. Работал над системой ответов и внезапно всплыл неприятный момент:
1) История сообщений грузятся динамически пачками по Х сообщений. Каждое соообщение может ссылаться на какое-то сообщение из истории переписки.
2) Сообщение на которое ссылается текущее сообщение может не быть загружено. В этом случае его нужно подгрузить. Иначе приложение будет думать, что сообщение удалено:

И тут самый сок. За что я не люблю Flutter/мобильную разработку - это за то, что нельзя просто взять и загрузить то, что недостает:

Начались пляски с бубном на тему того как же оптимальней подгрузить эти недостающие сообщения. Перепробовал разные методы, самый оптимальный (на мой взгляд) - загружать допсообщения в момент, когда грузятся основные сообщения.

Ничего умнее и оптимальнее придумать не смог. Другие вариант подгрузки приводят к ожиданиям из-за обращения к БД в следующем кадре; А еще они приводят к хитровымудренным схемам перестройки интерфейска, что мне совсем не понравилось (работы там и без этого хватает).

Ранее писал что буду переделывать систему вывода таймстемпов т.к. в ней были выявлены ошибки. Переделал:

Таймстемпы теперь всегда в правом нижнем углу

Также состояние доставки перенес в самый правый угол сообщения.

Сейчас сообщения-ответы на сообщения отправляются, приходят и нормально выводятся. Проблем не должно быть.

Далее берусь за работу над контекстым меню сообщений (это когда жмешь на сообщение и возникает меню с вариантами действий). Вот его нужно добить и можно будет редактировать сообщения :)

После контекстного меню буду думать над загрузкой медиа на сервер (для обмена файлами). По идее серверная часть уже реализована, нужно бы научить приложение загружать медиа на сервер и обрабатывать ошибки загрузки :)

Вроде интерфейс получается. Вспомнил первые наброски интерфейса:

Примерно так он выглядит сейчас:

--
По вечерам разрабатываю сервис для общения на Go & Flutter. Кому интересно, можете подписаться куда-нибудь на меня, попробуете его в числе первых.
Постепенно буду продолжать делиться успехами разработки сервиса.

Показать полностью 6
4

Сервис для общения: немного о результатах работы над интерфейсом⁠⁠

Серия Проект с сервисом для общения

Ранее писал о том как делал механику ответа на сообщения (свайп). Была проблема: любое свайпнутое сообщение сдвигало аватарку пользователя. Исправил этот момент:

Тут на видео видно как работает:

Но это не все успехи :)

Еще добавил в поле ввода отображение сообщения на которое пишется ответ. Вот первая попытка добавить:

А это последняя версия на сегодня. Вроде выглядит неплохо для ранней версии. Во всяком случае полагаю что располагать ответ на сообщение над полем ввода - это удобно и функционально:

Работает так: свайпаем любое сообщение (1) и в поле ввода оно появляется (2). Вроде все просто, у всех примерно так и сделано:

Заметил что сообщения у меня сделаны не лучшим образом: много места занимают отступы (3), медиа небольшого размера, текст сообщения (если есть) находится над медиа (1), зачем-то добавил скругления углов медиа (2) (ну и цвета очень пестрые, яркие):

Исправлял эти моменты сегодня, теперь медиа пытается занять всю ширину сообщений:

Тут нужно дату отправки бы отобразить под медиа

Тут нужно дату отправки бы отобразить под медиа

Если сообщение содержит ответ или заголовок, то медиа выглядит так:

Видите таймстемп съехах? Да-да, снова под нож пойдет, придется дорабатывать.

Конечно есть много недочетов и мелочей, но в целом дело движется :)


Читаю некоторые ответы под своими постами на тему разработки, интересные реакции на посты. Некоторые люди тут все же раздражают. Наверно они и ставят иконки рвотных масс, каках и тп 😂

Во-первых у кого-то навязчивое желание научить меня тому, что мне не следует писать сервис для общения 😂 Потому что сервисов очень много 😂 Ну что с того что много, я же учусь. Недавно паяльник за 300 руб разобрал и починил, давайте, сойдите с ума 😂😂😂 Могу рассказать как наушники за 50 руб починил, чтобы вообще до бешенства довести :)

А что мне делать по вашему мнению? Ходить баки пинать? Шататься по городу в поисках острых ощущений? Может путешествовать? А может алкогольчиком баловаться? А может зарабатывать тк время=деньги?

Давайте, начинайте учить кому и что в жизни делать. Все только сидят и ждут кто бы научил. В общем, советуйте свои советы себе сами 😂 А мы продолжим постепенно работать.

Возможно опубликую тут что-то интересное по работе, историй с работы у меня не то чтобы много, а очень много. Да еще и такие, что здоровенного кота с здоровенной лампой придется притащить 😂😂😂


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

--
По вечерам разрабатываю сервис для общения на Go & Flutter. Кому интересно, можете подписаться куда-нибудь на меня, попробуете его в числе первых.
Постепенно буду продолжать делиться успехами разработки сервиса.

Показать полностью 8 2
4

Пишу сервис для общения: интегрировал механику свайпов в проект⁠⁠

Серия Проект с сервисом для общения

Подозревал, что нельзя просто так взять и интегрировать разработанную ранее механику свайпов в свой проект. Да, угадал. Из-за моей неопытности и неполного понимания принципа работы Flutter, проблемы начали сыпаться как из рога изобилия. Вот что получилось:

Проблемы

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

Помимо этого нашлась еще охапка проблем, но хватит уже о грустном 😂

Что нужно доработать

Аватарки, вернее их горизонтальное смещение. Оно уже неплохо реализовано (в видео видно), но нужно добить их. Сейчас каждое сообщение группы смещает аватарку, а нужно чтобы только "нужное" сообщение смещало ее:

Пишу сервис для общения: интегрировал механику свайпов в проект

Да вроде это и несложно сделать, нужно просто посмотреть где находится аватарка и решить нужно смещать ее или нет.

После того как добью свайпы перейду к полю ввода сообщения. Нужно будет добавить в поле ввода отображение свайпнутого сообщения (на которое пишется ответ).

--
По вечерам разрабатываю сервис для общения на Go & Flutter. Кому интересно, можете подписаться куда-нибудь на меня, попробуете его в числе первых.
Постепенно буду продолжать делиться успехами разработки сервиса.

Показать полностью 1
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества