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

9

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

Проблемы

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

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

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

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

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

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

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

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

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

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

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

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

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

На мой взгляд получилось удобно. Сейчас буду преносить этот код в финальный проект. Наверняка что-то не будет работать, как всегда что-то не учел 😂

Ранее обещал продемонстрировать как работает прием/отправка сообщений. Собственно вот видео, где видно что сообщения отправляются, доставляются. Статус "прочтено" отправляю в консоли через команду 'read' и номер сообщения:

Слева в видео пользователь 333 использует консоль, справа другой пользователь пишет через приложение.


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


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

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

Сообщения с которыми экспериментировал налачи пропадать, началась кровавая бойня из багов в окне переписки. Но если выйти из чата и войти, то косяки пропадают до момента пока не пытаешься их создать повторно.

Продолжаю работу над приложением, работаю над взаимодействием с сообщениями.

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

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

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

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

На прошлой неделе доработал отображение неотправленных сообщений. Ранее неотправленные сообщения отображались с восклицательным знаком в кружке:

Но этот вариант мне не понравился по ряду причин:
1) иконка рисуется отдельно от сообщения
2) подозрительно напоминает другие мессенджеры 😂

Да, и баги нашел в системе отображения таймстемпов:

Система отображения таймстемпов в очередной раз пошла под нож... Исправил ошибки.

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

Недоставленное сообщение залито красным, а справа восклицательный знак.

Но этот вариант мне не понравился и переделал иконку с восклицательным знаком вот так:

Финальный вариант:

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

Обмен сообщениями реализовал, но о нем напишу чуть позже в следующем посте. Сделаю видео, где показано как работает отправка и доставка сообщений.

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

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

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

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

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

Что забросил? Например Map (O1) заменил на списки и поиск элемента делаю через indexOf (O(n)). В геймдеве я бы очень быстро посадил производительность на 0, но а тут вроде как терпимо для самой сырой версии. Даже вроде и с O(n^2) работает 😂

Баги

Куда без них? Единственное утешает, что не только у меня. Открыл на днях Youtube на яблоке и вижу:

Уже не удивляет когда у мегакорпораций интерфейс временами работает криво. Расслабились наверно 😂


Написал код отображения таймстемпа в сообщениях и думал что больше никогда к нему не вернусь 😂 Слишком уж мудреная там логика получилась. Ага, на этой неделе занимался правками багов в таймстемпе. То дата не там встанет, то статус куда-то улетает 😂 Исправил. Красными стрелками показал баг таймстемпа, а зелеными исправления:

А вот тут видно обновленные статусы сообщений:

VisualCode, Flutter, СУБД, crone, всякие NATS и серверная часть - что-то эти ребята достаточно сильно грузят мне комп. Потому второго клиента запускаю в консоли и имитирую общение через нее:

Буду продолжать работу над обменом сообщениями, командами (удалить, редактировать и проч) и интерфейсом приложения. Да, не особо быстро движется дело, но что сделаешь, как есть. Фигак-фигак и в продакшен за 1 месяц не получается 😂, есть в жизни много других очень важных задач 😕

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

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

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

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

Был у меня сервер на Golang и простенький клиент для тестирования:

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

И вот в последнее время работал над отправкой сообщений. Наметил структуру/логику и реализовал отправку сообщений. В ответ на сообщение сервер кидает уведомление о доставке. Это нужно чтобы клиент понял, что нужно остановиться и не отсылать больше сообщения.

Доставкой сообщений на клиенте занимается мой небольшой доставщик. Кидаешь ему сообщение и он пытается его отправить. Сервер в ответ может отправить много чего, но в данный момент мне важно обработать статусы сообщения. А статусов столько (возможно что-то упустил и добавлю, но склоняюсь что этих хватит):
- в процессе отправки ⏳ (анимированные часики)
- ошибка отправки ❗
- доставлено на сервер ☑️
- доставлено до получателя ☑️☑️
- получатель прочел ✅✅

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

Но это еще не все. Не особо писал тесты и в какой-то момент временно сломал серверный код из-за изменения типов данных в серверной базе данных. Дела... 😂

Сейчас у меня сообщения отправляются, ответ сервер используется для обновления состояния сообщения. Кстати, вот скрин сообщений и их состояний:

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

Черновики

Но это еще не все. У нас же есть черновики и как хорошо что с самого начала начал над ними работать. Дело вот в чем. Пользователь может отправить сообщение новому собеседнику или даже будучи не в сети. В нормальном режиме отправка сообщения происходит по ID чата. Персональный чат это или групповой - неважно. Отправляешь сообщение по ID и сервер уже сам разберется нужно его отправить одному собеседнику или рассылать группе.

И вот тут есть небольшая проблема. Если пользователь отправляет сообщение новому пользователю, то происходит следующее: серверу сообщается информация о том какому именно собеседнику (receiverID) нужно доставить сообщение. В результате сервер создает персональный чат (если он не был создан) и отправляет ID чата. После этого отправитель уже шлет сообщение не по receiverID, а по chatID.
Проблема в чем? В том, что chatID не известен до отправки сообщения. После получения ответа от сервера, отправителю нужно найти отправленное сообщение, создать для него чат и закрепить отправленное сообщение за чатом.

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

После добавлю код для обновления статуса сообщения:
- доставлено до получателя ☑️☑️
- получатель прочел ✅✅

На данный момент работает отображение статуса отправки () и доставки до сервера (☑️) .

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

Есть одна давняя и неприятная новость: уведомления о доставке не будут работать без сервисов Apple и Google. Так что чтобы мобильное приложение присылало уведомления, нужно будет плОтить (для Apple около 10к руб в год, для GooglePlay вроде $25 за регистрацию аккаунта, а дальше еще не смотрел).

Голосовые/видео звонки - до них пока не добрался 😅

Сейчас план-минимум - это сделать сервис обмена сообщениями и файлами.

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

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

Перевожу книжку по Flutter

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

Читал как-то книжку по Dart/Flutter на русском и она мне не понравилась: сухо, скучно. А местами ну прям вообще, напомнило адскую черепашку с урока информатики:

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

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

На днях доперевел небольшую часть книжки, которая мне понравилась. Хочу поделиться, вдруг кому-то поможет. Не все же могут перевести? Или могут?

Могут или не могут, вот первая глава без воды, если будет полезно, то с вас как минимум плюсик: ссылка

Позже еще допереведу, если не забуду, то скину остальные главы и всю книжку целиком с автором и названием (еще глав 10, если не ошибаюсь). Можете угадать автора? Может кто читал, хотя именно эту вряд ли.

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

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

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества

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

Теги

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

Сообщества