Дневник Flutter разработчика
211 subscribers
32 photos
1 video
2 files
19 links
Собираю полезности и излагаю мысли обо всей этой движухе.

GitHub: https://github.com/GereyTatarkhanov
Download Telegram
ОУУУУУУУ!!!
Надеюсь я не рано радуюсь и все это не временные чудеса - но у меня только что PlayConsole и GooglePlay открылись без VPN🤩
У всех так? Или это уже давно и я проспал...
👍2
Не, ну правда. Довольно распространенный баг. Неужели так трудно обнаружить это на этапе тестирования?🤷‍♂
😁4
Коротко о ситуации на рынке.
😈3
И так, подписочники и подписочницы, представляю вам новейшую разработку Flutter лаборатории, находящейся в Сколково!💥
Хотел бы я так начать, но увы... Однако, кое-что интересное на самом деле есть!

А дело в том, что мне было нужно припаять в своем рабочем проекте "виджет-карусель", нууу тот, что слайдер, который умеет перелистывать виджеты анимированно..
И первым делом, конечно, в голову пришло пойти на pubdev и достать оттуда самый залайканный (все же так делают, правда?).
Вот он: https://pub.dev/packages/carousel_slider
Тем более я его уже юзал в одном из своих старых проектов.

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

Ну и я как уважающий себя (или поверивший в себя) программист решил написать эту шляпу самостоятельно. И пошел в VS Code - подумали вы, но нет. Я пошел на StackOverflow😁 Искать готовые решения. Среди всей кучи различных реализаций, предложенных неравнодушными людьми (откуда они вообще берутся?) я отыскал вариант, что больше всего удовлетворял мои потребности.

И теперь, после доработок, я представляю вам Ferrari среди подобных виджетов - виджет "Carousel"!

P.S: Масштаб эпичности презентации несопоставим с конечным результатом работы, просто настр норм.

Ищи код в моем репозитории на гитхаб, среди других виджетов в галерее виджетов: https://github.com/GereyTatarkhanov/widget_gallery
2
Возвращаясь к теме с каруселью.. Возникла проблема с тем, что PageView требует фиксированного размера и не умеет отображать дочерние виджеты, которые имеют разные размеры. И из-за неадаптивных значений получалось, что на разных устройствах (которые соответственно имеют разные диагонали экрана) возникали траблы. Где-то pixel overflow, где-то наоборот пустое пространство. И это при том, что размеры были заданы посредством MediaQuery.👾

Конечно, это надо было решать. Первое что я пошел делать - гуглить. На StackOverflow с возможными вариантами решения долго не стал сидеть, решил пойти на pubdev, чтобы узнать может кто-то уже выложил лучший вариант? (Ведь задача довольно типовая). И действительно, нашел пакет с PageView, где необязательно указывать размеры, он адаптивен. Однако указывать dependency в pubspec.yaml не очень хотелось (Ведь он обновлялся в последний раз 22 месяца назад) - поэтому просто открыл репозиторий с этим проектом, вырезал нужный код, обновил устаревшие участки и добавил к себе в проект.

Ссылка на оригинальный проект: https://pub.dev/packages/expandable_page_view
Гитхаб автора: https://github.com/Limbou
Автор проделал хорошую работу.👏👏

Ссылка на мой гитхаб с вырезанным кодом: https://github.com/GereyTatarkhanov/widget_gallery

Теперь нет проблемы с тем, что содержимое может не поместиться в скроллящийся item (ведь фиксированные значения не задаются), а также все items могут иметь абсолютно разные размеры - PageView, а соответственно Carousel будет подстраиваться (Да, я добавил ExpandablePageView в Carousel тоже).
2
14 мая на Google I/O команда Flutter обещает инновации!
Я где-то слышал, что основной упор будет на Flutter Web (надеюсь это не просто слухи).
Ну что, ждём?
🔥2
Вместе веселее)
😁1
Такс, я тут прошелся по документации к Firebase Cloud Messaging. И сделал краткую выдержку из наиболее интересных пунктов. Если я ошибся где-то или упустил что-то важное - исправьте в комментариях!

Начнем с определения - Firebase Cloud Messaging (FCM) - это кроссплатформенное решение для отправки сообщений и уведомлений на мобильные устройства. Т.е. с помощью него мы можем настроить отправку push или in-app сообщений на устройства пользователей.

Какие есть фичи:

1. Развертываемые сообщения (Collapsible Messages): FCM позволяет отправлять развертываемые сообщения, которые представляют собой последнее отправленное уведомление. Если устройство не может моментально обработать уведомление (выключен, нет интернета), оно будет обновлено с новым содержанием.

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

2. Ограниченные по времени сообщения (Time-to-Live Messages): Разработчики могут настроить время жизни для уведомления, которое определяет, сколько времени уведомление останется активным, прежде чем будет автоматически удалено.

3. Общие для всех платформ сообщения (Cross-platform Messages): С помощью FCM можно отправлять уведомления, которые будут отображаться на всех поддерживаемых платформах (Android, iOS, Web).

4. Уникальные для всех платформ сообщения (Platform-specific Messages): Разработчики могут отправлять уведомления, которые определены только для конкретной платформы (Android, iOS, Web).

5. Аналитика (Analytics): FCM предоставляет различные инструменты аналитики, позволяющие отслеживать успешность отправленных уведомлений, количество устройств, на которые были отправлены уведомления, статистику открытий уведомлений и многое другое.

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

6. Отправка уведомлений при включенном VPN: FCM поддерживает отправку уведомлений даже при включенном VPN у пользователя. VPN не должен блокировать доставку уведомлений через FCM.

7. In-App сообщения: FCM позволяет отправлять уведомления не только на устройства (Push notifications), но и внутри приложений (In-App Messages). Это удобный способ взаимодействия с пользователями и повышения их вовлеченности.

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

Подводя итог, можно сказать, что данный сервис очень мощный и при грамотном использовании можно даже создать классный и быстрый мессенджер!
🔥1
Народ. Кто ждал новости с Google IO о Flutter.
Если коротко: по словам спикера Flutter Web стал быстрее в 2 раза благодаря wasm.
Все.

И как отступление от темы. Используйте Project IDX, чтобы ios на windows дебажить
👍1
Как уже известно, ProjectIDX стал для всех доступен. Для тех, кто в танке: это такой облачный IDE, который работает из браузера, с собственными эмуляторами/симуляторами и прочими виртуальными устройствами, включительно Web(Ага, пишем Web в Web'е), который был разработан компанией Google.🫡

И, конечно, он включает в себя интеграцию со всеми актуальными сервисами Google, с такими как Firebase и его Crashlytics, а также AI Gemini (Это конкурент сына маминой подруги в мире ИИ - GPT от OpenAI). Кстати, как можете наблюдать на скриншотах - в РФ его нельзя юзать: санкции там, все дела. We are illegal! 🚫

Я решил его затестить, ну ведь очень интересно было с винды запустить симулятор ios устройства (и не надо мне говорить, что по факту запускается все на удаленном железе, я и сам знаю. Вас проверял..). Так, вот.. Не получилось. Хах!😁 Обо всем по порядку.

Как только зарегистрировался на сайте и создал виртуальное пространство, предварительно указав, что буду разрабатывать проект на фреймворке Flutter (к слову, там стоит самая актуальная версия на момент публикации этого поста: Flutter 3.22 и Dart 3.4.0) - меня встретил VSCode прямо в браузере (Неожиданно очень шустро работающий как для ide внутри браузера). Это тот же самый VSCode, который у тебя прямо сейчас стоит на ПК, т.е. ты можешь его кастомизировать, менять темы, устанавливать extensions (ну плагины...учи английский) и т.д.

Сразу запустились превью с Web и Android, где я затестил дефолтное приложение с текстом "Hello World". Компилируется не долго, я бы даже сказал быстро (опять таки, учитываем, что это все в облаке). Отмечу, что Android эмулятор сильно лагал, а Web вообще заработал только после перезапуска виртуального пространства (пришлось перезапустить idx). Но все работает!

И тут, я пошел переключать устройство, с которого буду запускать код на ios симулятор и вот незадача: Его нет! И в документации тоже ничего об этом не нашел, там инфа только про Web и Android. Тут два варианта: либо ios симуляторы еще не завезли, либо просто я не нашел инфу о том, как его включить (Хотя я искал не только в доках).

Android эмуляторов среди доступных устройств - два. Планшет и смартфон. Также можно по желанию добавить линукс проект (ага, это я нашел).

Еще, как видно на скриншоте, я и со своего смартфона запустил ProjectIDX и заметил интересную штуку: если взаимодействовать с эмулятором (ну дёргать его если.. тыкать там куда-то), то в режиме реального времени это все происходит и на другом устройстве (в моем случае на ноуте), где открыт тот же проект с тем же эмулятором. Похоже оно работает как трансляция 📹, я сильно не вникал.

Итог: ProjectIDX очень крутая и перспективная технология, но пока ещё сыровата. Оно и понятно, ведь ide совсем недавно стало доступно для массового пользователя.🤷‍♂️

Такие дела...Если кто знает что там с ios, то пишите в комментах.
2
Никогда не понимал, в чем удобство вертикальных мониторов (может потому, что я не пользовался таким)😄
Часто, когда вижу, что у кого-то в офисе стоит вертикальный моник - там чаще всего бывает открыт чат в телеге.
Может и мне купить такой, чтоб shorts на YouTube было удобно смотреть😁
😁2
Как и ожидалось, после появления макросов в Dart - data class себя долго ждать не заставил (Но правда пока не от самой команды Flutter).

Автор библиотеки Bloc уже успел выложить свое решение на pubdev и github:

https://pub.dev/packages/data_class_macro
https://github.com/felangel/data_class
👍2
На типовой вопрос существует типовой ответ😁

Но думается мне, автор вопроса не то имел ввиду..

https://youtu.be/9x_z-AWK7P0?si=9_t9v0gCSykSQtQE
😁2
Копался в файле framework.dart и случайно наткнулся на комментарий, где было написано, что:

Объекты BuildContext на самом деле являются объектами Element. Интерфейс BuildContext используется для предотвращения прямого манипулирования объектами Element.

Документация это подтверждает слово в слово.
Ссылка: https://api.flutter.dev/flutter/widgets/BuildContext-class.html

Я почему-то думал, что это разные, но взаимосвязанные вещи, а не, что одно интерфейс для другого.
👍2
Очень часто вижу, что люди БОЯТСЯ показывать свой код другим. У всех сомнения: а можно ли так писать? а это правильно? не будет ли никто надо мной смеяться?

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

Да, есть определенные шаблоны программирования, которых желательно придерживаться. Да, принципы SOLID, DRY, KISS, YAGNI (etc) надо соблюдать насколько это возможно. Да, есть правила и негласные договоренности, которые надо учитывать. Но это НЕ ЗНАЧИТ, ЧТО У ВСЕХ ДОЛЖЕН БЫТЬ ОДИНАКОВЫЙ КОД.

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

Если ты написал плохой код - ты поймешь, что ты написал плохой код позже. Ты либо сам споткнешься об него; либо прочитаешь статью (документацию) и поймешь как сделать лучше чем есть; либо тебе объяснят более опытные люди (объяснят, а не закидают камнями). Если кто-то скинул тебе стикер с человечком, который бьет себя по лицу, показывая "какой треш" и не аргументирует, то скорее всего он сам не понимает, как делать "правильно".

Изучай паттерны, учи архитектуру, ПОНИМАЙ для чего тебе та или иная архитектура и перестань наконец бояться, что ты неправильно обычный print в коде написал и кто-то тебе об этом скажет.
🔥3
Народ, копался в Kotlin docs (не, не перехожу на native, просто его тоже знать полезно для Flutter разработчика, кстати) и заметил, что
там есть раздел Kotlin Wasm. Не знаю давно ли они его готовят, но то, что готовят - это факт. Правда пока что Alpha версия.

Даже пример сайта есть на Compose Multiplatform + Kotlin Wasm (по мне так очень корявый пока что). Кликни сюда, чтоб посмотреть.

Если ты не знаешь, что такое WebAssembly (wasm) - можешь прочитать в этой статье.

Напомню, что на прошедшей конференции Google IO команда Flutter тоже представила Flutter wasm (и пока в этой гонке находится впереди), на которую возлагает большие надежды.

В целом, данная технология должна сильно улучшить производительность Flutter Web и помочь сделать выбор в пользу Flutter тем, кто собирается писать web-приложения, а команда Kotlin хотят помешать и забрать себе этот кусок пирога! Ну а как мы знаем, конкуренция это хорошо, это заставит каждую из команд сделать свой продукт лучше!
👍1
Настраивал FCM и как же меня выбесила политика Apple в плане отправки push-уведомлений🤬

Сделай разрешение такое, дай разрешение в Xcode, добавь сертификат в developer acc, получи ключ с разрешением на отправку push-уведомлений, дай разрешение на разрешение, покажи справку о несудимости и т.п. ЧТО ЭТО ТАКОЕ???
Будто я не пуши собираюсь кидать, а оружием торгую. Почему на Android это можно сделать за 5 минут, а Apple ведет себя как обиженный кондуктор?
2