Дневник Flutter-разработчика
3.06K subscribers
323 photos
22 videos
10 files
292 links
Описание моего пути мобильного разработчика с нуля до junior, middle, senior
Download Telegram
Хорошая рекомендация🔥
Рекомендую тоже! Хотя сам я еще использовал не все плюсы сообщества)
И классный, простой розыгрыш в конце поста
https://t.me/frontengineer/78

P.S. Канал фронтендера с Авито, 3 года опыта, доход 500к+, как вам?💵
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥4🏆4
📨Благодарственное письмо

С декабря 2022 года я участвовал в разработке одного из крупных приложений с нуля. Было много интересных задач:)

Мы успешно зарелизили приложение, сейчас оно находится на поддержке.
На днях получил такое(скрин) благодарственное письмо от заказчика☺️

"Мы хотели бы выразить глубокую признательность команде ООО "Фрифлекс" за высококвалифицированную и слаженную работу, а также за продолжительное и плодотворное сотрудничество.

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


P.S. Заблюрил заказчика и членов команды(nda)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥50👍12🥰4
An in-depth look at the InheritedWidget _ Flutter Community.pdf
8.3 MB
🧑‍🎓 Заблуждения

Утром увидел в чате такой вопрос:
Доброе утро как получить значение state из bloc без BlocBuilder, просто функция которая фильтрует массив и выводит в консоль


далее ответили:
По контексту можно попробовать
Или через локатор, если используешь


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

https://t.me/mobile_developing_chat/32833



➡️ Я заблуждался насчёт поиска по дереву с InheritedWidget. Этого поиска не происходит.
Когда создаётся элемент, он имеет это поле с мапой и все ссылки родительских InheritedWidget уже будут присутствовать там
Map<Type, InheritedElement> _inheritedWidgets;

пруф код: https://github.com/flutter/flutter/blob/13860a7d23c564ec9ff38a44661d21160c3f7b1e/packages/flutter/lib/src/widgets/framework.dart#L3899


В доке provider так же сказано This operation is O(1). It doesn't involve walking in the widget tree.
https://pub.dev/packages/provider


Так что, если вы думали так же насчет «поиска по дереву» - теперь знаете🧑‍🎓


➡️ Больше информации здесь:
Mad Teacher говорил об этом https://t.me/skills_by_mad/275
Таймкод доклада Яндекса https://www.youtube.com/watch?v=yIkT-5aX898&t=421s
https://pub.dev/packages/provider

Подробно https://medium.com/flutter-community/the-widget-inherited-178ff969c50a
Если нет доступа, прикрепляю pdf статьи
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥51
🎄🎄🎄🎄🎄🎄🎄🎄

С наступающим Новым Годом!🎁


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

Желаю, чтоб в новом году вы чувствовали такое же удовлетворение и умиротворение от своей деятельности, как мой кот на этом видео(только вслушайтесь)😼


PS. На елке нет гирлянды, потому что этот пушистик ее покусал😄
PS 2. Знаю, что коты всем нравятся:)

🎄🎄🎄🎄🎄🎄🎄🎄
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉29👍7🎄75🎅43🙊1
Forwarded from Oh, my Flutter (Mikhail Zotyev)
Flutter приложения, собранные на Xcode 15 и имеющие таргет-версию iOS 11 (минимальная возможная на данный момент) могут падать в рантайме при взаимодействии с Networking. Исправить это можно на данный момент подняв версию до 12, которая в ближайшем будущем все равно станет минимальной поддерживаемой.

📌 Подробности по ссылке.
https://github.com/flutter/flutter/issues/136060

#advice
👍12🤯32🆒1
Flutter и фриланс в школе

Пока одни жалуются на отсутствие опыта, другие уже со школы совмещают работу и учебу😉

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


https://habr.com/ru/articles/784536

P.S. GetX с 11 класса… парень не с того начал😄
(юмор. В целом он молодец)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥5😁5
🟥 Что делать в Сочи в марте? Писать мобильные приложения, конечно же!

С 18 по 29 марта в Сочи пройдёт научно-практический интенсив по мобильной разработке от Young&&Yandex и Университета «Сириус».

На смене будет представлено два направления: нативная разработка на iOS и мультиплатформенная разработка на Flutter.

Что вы успеете в ходе интенсива

🔶 Прокачаетесь в хард-скилах: создадите полноценные мобильные приложения под руководством ведущих разработчиков Яндекса и узнаете о современных инструментах разработки.
🔶 Поработаете над софтами: научитесь организовывать работу и ресурсы в команде, а также получите опыт совместной разработки.
🔶 Классно проведёте время: вас ждёт нетворкинг, природа Сочи — горы и море, а ещё выпускной в офисе Яндекса.

Что вы получите после прохождения интенсива

🔶 Качественный пет-проект в ваше портфолио.
🔶 Грамотное резюме: вы пройдёте мастер-класс по оформлению резюме, что будет полезно на любом этапе вашей карьеры.
🔶 Пробное собеседование в Яндекс: лучших мы пригласим стать сотрудниками.

Кто может принять участие в интенсиве

😀 Мы приглашаем принять участие в отборе студентов всех курсов бакалавриата, магистратуры и аспирантуры, интересующихся современными технологиями создания приложений на iOS или Flutter. Подробнее о необходимых навыках можно узнать здесь.

Обучение, проезд, проживание и питание на время смены предоставит Университет «Сириус».

💫 Успейте подать заявку и решить тестовое до 4 февраля включительно: https://clck.ru/37ESJJ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥64
📲Навигация в приложении

На всех проектах, в разработке которых я участвовал(4 проекта), для навигации использовался auto_route
С ним не было никаких проблем до недавних пор

Сейчас, к примеру, WillPopScope deprecated и необходимо использовать PopScope. Но у auto_route с этим проблемы.
Ишью от 17 ноября: https://github.com/Milad-Akarie/auto_route_library/issues/1799
Плагин не обновлялся 3 мес, ишью не закрываются

Мы активно начали переходить на go_router

Основные причины перехода:
🟢разработан flutter.dev, в отличие от одного разработчика auto_route
🟢рекомендуется гуглом, имеет Flutter Favorite
🟢активная поддержка

Статья коллеги(первая часть) по go_router:
https://habr.com/ru/companies/friflex/articles/787528/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍173🔥31
🍏Apple разрешила установку приложений не из App Store на iOS. Пока только для Евросоюза

В связи с вступлением в силу нового Закона о цифровых рынках в Евросоюзе, техногигаты должны открыть свои услуги и платформы другим компаниям и разработчикам. Изменения должны быть внесены до 6 марта 2024 года включительно.

🟢Все изменения для разработчиков можно посмотреть здесь:
https://developer.apple.com/support/dma-and-apps-in-the-eu/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍41
📱 Новый инструмент Google Play - подсказка обновить приложение при входе

Если пользователи используют устаревшую или неработающую версию вашего приложения, вы можете использовать Play Console, чтобы предложить им обновиться.


Похоже на soft update, который все привыкли видеть, но здесь от Google Play с настройками


➡️ Открывается полноэкранным сообщением при входе пользователя в приложение(скрин примера).
Его можно закрыть, тогда окно будет всплывать после каждого холодного перезапуска


➡️ В Play Console нужно выбрать версию приложения, с которой хотите обновить пользователей, затем настраиваете таргетинг:
🟢все пользователи выбранной версии приложения
🟢по стране/региону
🟢по версии Android


➡️ После предложения пользователям обновиться, в Play Console можно:
🟢изменить конфигурацию обновления
🟢просмотреть ход обновления
🟢отменить действие восстановления

Подробнее:
https://support.google.com/googleplay/android-developer/answer/13812041?hl=en#zippy=%2Cview-recovery-progress
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥5😍1🙈1
Я - team lead крупного проекта☺️
🔥166👍11🗿5🆒5🎉3222🌭1🍾1
🎉 Dart 3.3
https://medium.com/dartlang/dart-3-3-325bf2bf6c13

Что нового:
🟢добавлены Extension types. Представляют собой оболочки для типов, но без дополнительных, связанных с этим накладных расходов. Предназначены прежде всего для оптимизации кода, чувствительного к производительности, особенно при взаимодействии с хост-платформами.
(подробнее в документации: https://dart.dev/language/extension-types)
🟢поддержка WebAssembly во Flutter Web(пока экспериментальная)
🟢представлена новая модель взаимодействия с
JavaScript библиотеками и web - dart:js_interop
🟢улучшение библиотек браузера(в дальнейшем поддержка будет сосредоточена на package:web)
🟢бета-версия Google AI Dart SDK.
Новый пакет google_generative_ai и вспомогательные ресурсы позволяют создавать собственные генеративные функции на основе искусственного интеллекта в вашем приложении через интеграцию Dart с API Gemini.
РФ нет в доступных для использования регионах


🎉 Flutter 3.19
Много изменений:
https://medium.com/flutter/whats-new-in-flutter-3-19-58b1aae242d2


🎉 Так же представлен Roadmap развития Flutter на 2024 год:
https://github.com/flutter/flutter/wiki/Roadmap
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍63🤗2
#полезное

У Алексея вышло 2 хороших видео по темам Жизненный цикл элементов во Flutter и Как работает EventLoop в Dart


1️⃣ В видео:
https://www.youtube.com/watch?v=Lhr8w_wpmFY

🟢как Flutter перестраивает дерево элементов
🟢как работает жизненный цикл элемента на примере State у StatefulWidget
🟢локальные/глобальные ключи при перестройке дерева элементов
🟢способы оптимизации перестроения дерева
🟢const

Советы из видео по оптимизации:

🔜 Старайтесь избегать напрямую вызова метода setState. Если все-таки делаете это, старайтесь делать это как можно ниже к элементам вашего дерева. Лучше всего использовать для этого стейтменеджеры

🔜 Избегайте как можно больше изменений иерархии вашего виджета. Если вы будете делать это без использования глобальных ключей(в примере), то на каждый элемент будет происходить новое создание. То есть иерархия у вас была из 100 виджетов, вы всего-лишь добавили обёртку в виде какого-нибудь Center и иерархия из 100 виджетов у вас просто с нуля пересоздалась, если конечно у вас не было глобальных ключей. И вот представьте, что вы делаете такое изменение иерархии внутри анимации, которая происходит на каждый кадр


2️⃣ В видео:
https://www.youtube.com/watch?v=eoPrGo4ffUA

🟢как работает EventLoop в Dart
🟢за счёт чего достигается асинхронное выполнение
🟢логика EventLoop
🟢подробный разбор задачки с собеседований по EventLoop(в какой последовательности будут распечатаны сообщения на экране?)
🟢общий разбор изолятов
🟢связь между EventLoop - запросы в сеть - чтение с диска


3️⃣ Статья из видео:
Why Flutter? Почему Flutter?
https://habr.com/ru/articles/787174/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥233👍21
🔥 Как я стал TeamLead’ом

Ждём увлекательную история о предложении стать тимлидом), а то совсем пропал

На вопрос решил ответить постом)


В этой истории нет ничего прям необычного😄

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

Меня перевели на другой проект, крупнее предыдущего.
Проект на поддержке, в ожидании слияния с другим приложением этой же компании.
В команде все стандартно - несколько QA тестировщиков, 2 бекендера, дизайнеры и 1 flutter разработчик, 1 flutter TeamLead(Тимлид с моего предыдущего проекта)

До моего повышения я работал на этом проекте около полугода.


🔜 Предысторию рассказал, главные события🙂:

Мне звонит Тимлид и говорит:
- хотел тебе предложить взять проект в свои руки. Как тебе такая идея? Ты уже вырос достаточно. Такую ответственность на себя уже готов брать, как думаешь?


Как думаете, что я ответил? Та да да дам…

- конечно, без проблем

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

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


🔜 Через неделю мне написал Лид и сказал, что завтра мне нужно быть на созвоне, будут решать насчет моего лидерства на проекте)

На следующий день на созвоне нас было 4 - CEO компании, Head of Mobile компании, Лид моего проекта, я. Они втроём сошлись на том, что я сильно вырос и меня давно пора повышать. Дальше обсудили, что от меня требуется на проекте и условия(новая вилка зп). Я согласился, меня поздравили, с созвона вышел новый Тимлид☺️


✔️ Так я стал TeamLead’ом. Ну а дальше понеслось…😅
Ставьте 🔥, если интересно, с какими плюсами и минусами в новой должности я столкнулся и ждете этого поста:)


P.S. Лид моего проекта, которого часто упоминал - @petrovyuri, у него есть свой канал и курсы по разработке на dart/flutter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥86👍822🗿1
Плюсы и минусы должности TeamLead’а


Начнем с плюсов:

🟢Ответственность. По большей части это плюс, так как она хорошо прокачивает тебя как в софт, так и в хард скилах. Об этом ниже

🟢Быстро растешь в софт скилах. Постоянное общение с командой, понимание как что взаимодействует. Обсуждения с аналитиком при постановке задачи, постановка задач, декомпозиция, их распределение - все это отличино тебя прокачивает

🟢Быстро растешь в хард скилах. Ты должен понимать на моменте обсуждения задачи, как должна работать фича, как происходит взаимодействие с бекендом, какие могут возникнуть проблемы. Ты быстро фиксишь критические баги, решаешь проблемы. Все это делаешь, обсуждая с бекендом, благодаря чему намного лучше понимаешь, как что работает

🟢Ты пишешь код лучше, так как теперь ты отвечаешь за проект и при реализации фичи/фиксе бага задумываешься, на что твоё решение может ещё повлиять в рамках проекта

🟢Построчное Code Review, так как теперь ты отвечаешь за качество кода на проекте) Code review и насмотренность хорошо прокачивают хард скилы. Знаю, что во многих компаниях несерьёзно подходят к этому процессу(плохое решение).
Это так же отличный способ лучше понимать проект, так как ты видишь, какой новый код/фичу добавили

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

🟢Предложения по улучшениям от команды приходят к тебе:) Чаще всего это интересные предложения по улучшению


Минусы:

🟠Ответственность - как плюс, так и минус)

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

🟠Созвоны. Их много и как раньше - быть на созвоне и параллельно работать - не получится. Почему? 1 пункт - ответственность) Ты должен быть в курсе, что на беке происходит и тд., чтоб не было проблем в мобильном приложении

🟠Часто бывает, что занимаешься фичой/багом, погружён в процесс и созвон или обсуждение выбивает тебя из колеи. Запланированное время на фичу увеличивается
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🔥8👏1
#достижение

Финансово помогаю родителям. Теперь они могут не работать, а отдыхать на пенсии, заниматься хобби☺️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥102❤‍🔥5👍4🆒3👏2
Привет хочу поделиться папками с чатами и каналами по Flutter.
Каналы.
Чаты.
Если что-то пропустил, то добавляйте в комментарии.
Так же хочу попросить вас проголосовать за канал, так-как хочется дальше его развивать.
https://t.me/boost/FlutterForDev
🔥21👍43❤‍🔥1
Оплата SberPay

Если вам нужно будет внедрить оплату SberPay в ваше мобильное приложение, у вас есть 2 основных варианта:

1️⃣ Интегрировать нативный плагин sdk SberPay в ваше flutter приложение.
Процесс подробно расписан коллегами в этой статье:
https://habr.com/ru/companies/friflex/articles/771354/

В конце статьи есть пример плагина на github. Можно легко переиспользовать этот пример и в короткие сроки у вас готовое решение оплаты.


Плюсы:

🔜 Очень удобно для пользователя. Все происходит внутри вашего приложения. Вызывается нативная модалка, пользователь оплачивает со своих карт
🔜 Вам не нужно ничего отрисовывать, sdk Сбера сам все рисует. Нужна только нативная кнопка с методом оплаты
🔜 SDK позволяет сохранить авторизацию из SDK в Сбер на 90 дней. Это позволяет платить нативным виджетом без необходимости открывать приложение Сбера
🔜 Модальное окно показывает все доступные карты у пользователя сразу и через него удобно платить нужной картой


Минусы:

🔜 Сбер может в любой момент выпустить обновление, которое нужно установить. Старые версии при этом в любой момент могут стать неподдерживаемыми. Так случилось с версией минимального API Android и версии iOS.

Пример - я сделал интеграцию и после успешного тестирования задача была отложена в беклог на пару месяцев.
Через пару месяцев внедряем фичу, тестирую - метод некорректно отдаёт булевое. На устройстве установлено приложение сбера, метод sdk отдаёт false(сбер не установлен)😄
Пишу в поддержку, ответ -
возможно старая версия выведена из эксплуатации, обновитесь


🔜 Иду в документацию, обновляться на новую версию - они повысили версию api и для ios и для android😄
Остаётся только повышать версию приложения из-за Сбера)

На вопрос поддержке - Что делать с пользователями меньшей версии? Ответ -
Большинство поднимают версию без проблем, как правило это аудитория с низким уровнем платежеспособности

😁😁😁


P.S. Избавление от пользователей на старой api - не лучший вариант и я решил пойти по второму пути.

P.S.2. Позже они согласились выпустить версию с поддержкой старых версий api(для android), которая будет работать до конца года.


2️⃣ Вы можете использовать диплинк на оплату в приложение Сбера.
Бекенд формирует ссылку на оплату и вы открываете приложение сбера с предзаполненной оплатой.
Работает примерно как открытие из веба - тапаете на кнопку оплаты SberPay - переходите на оплату в приложение Сбера.

Плюсы:

🔜 Нет проблем с обновлениями sdk SberPay и неподдержкой старых версий
🔜 Не нужно избавляться от пользователей, если Сбер вдруг снова решит увеличить минимальные версии для android/ios.
🔜 Минимум сложностей при интеграции sdk SberPay. Здесь вы по диплинку открываете приложение Сбера


Минусы:

🔜 Не так удобно для пользователя, так как он перейдёт в другое приложение на оплату
🔜 Необходимость каждый раз для оплаты переходить в приложение Сбер, чего лишен sdk
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28👍522
deeplink_select_mWeb2app_3 (1).pdf
43.1 KB
🟢Нюанс второго варианта

Если будете реализовывать оплату SberPay по диплинку в Сбер, то:

для android схема должна быть sberpay:
пример - sberpay://invoicing/v2?bankInvoiceId=e948fbdc1e1121&operationType=app2app

для ios схема должна быть btripsexpenses:
пример - btripsexpenses://sbolpay/invoicing/v2?bankInvoiceId=e948fbdc1e1121&operationType=app2app

Дока по диплинку от Сбера(файл)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥731