Flutter Friendly – Telegram
Flutter Friendly
1.04K subscribers
187 photos
71 videos
1 file
149 links
Канал Friflex о разработке на Flutter. Обновления, плагины, полезные материалы — превращаем знания в реальный опыт, доступный каждому разработчику.

🔗 Наш канал для разработчиков: @friflex_dev
🔗 Канал о продуктовой разработке: @friflex_product
Download Telegram
🎅Привет! Это Анна, Friflex Flutter Team Lead

Уже пару раз мы затрагивали вопрос in-app покупок в приложениях. Например, писали о том, как интегрировать плагин in_app_purchase в Flutter-проект. Сегодня же поговорим о том, как в целом по шагам работает процесс покупки и получения информации о них.

Дисклеймер. Эта информация актуальна именно для покупок через App Store, так как они сейчас доступны в России, в отличие от покупок через Google Play.

Для удобства представим — мы создаем Flutter-приложение, которое имеет определенный контент, доступный только пользователям с подпиской. Подписка оформляется через App Store и привязывается к конкретному аккаунту пользователя в базе данных на бэкенде.

Здесь мы четко можем увидеть трех участников процесса — приложение, бэкенд и App Store. Теперь разберем, как же они будут друг с другом взаимодействовать.

1 шаг. Приложение.
Пользователь в приложении знакомится с доступными продуктами для покупки. Затем через определенные элементы интерфейса осуществляет in-app покупку.

Для этого в проект необходимо интегрировать in_app_purchase. Подробнее процесс интеграции я описывала в предыдущем посте на эту тему. Основная задача приложения — вывести информацию об актуальных продуктах и при покупке вызвать нативное окно оплаты App Store.

2 шаг. App Store.
App Store самостоятельно выполняет процесс списания средств с привязанного счета. В случае успеха все данные о транзакции будут переданы дальше. И здесь два варианта развития событий:
✔️Данные о транзакции возвращаются колбэком в приложение. Дальше приложение может делать с ними все, что угодно, например, отправить на сервер
✔️Данные о транзакции получает сам сервер. За это ответственна технология Server-to-Server Notifications, когда App Store отправляет уведомление о покупке с данными на сервер. В этом случае требуется указать эндпоинт в App Store Connect в настройках приложения

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

Второй вариант полностью абстрагирован от пользователя. Общение ведется только между сервером приложения и App Store. Здесь все выше перечисленные факторы не повлияют и не прервут процесс. В нашем примере пойдем именно по этому пути.

3 шаг. Бэкенд
Бэкенд получает колбэк от App Store с данными о транзакции. Эти данные достаточно объемны, они содержат много полезной информации. Например, тут можно найти сведения о купленном продукте, о его цене и времени покупки. Также из приложения можно передавать данные о внутреннем аккаунте приложения через поле applicationUsername. Эта информация также придет с данными транзакции.

Важно — перед выдачей прав пользователю покупку стоит сначала проверить.

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

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

Если остались вопросы, задавайте в комментариях⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥861👍1🤩1🎄1
🎅Всем привет!

Год подходит к концу, и мы, Роза, Катя и Аня, хотим устроить небольшую ретроспективу и поделиться своими открытиями за 2025-ый

🎅Роза, Flutter Dev Friflex:

Этот год был богат на задачи абсолютно разного характера. За это время я сделала пару парсеров, разработала расширение для DevTools, внедрила LLM во Flutter Web-приложение, поработала с Serverpod, узнала, что такое OTA, и в целом писала бэкенд на Dart.

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

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

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


🎅Катя, Flutter Dev Friflex:

Мой главный инсайт: агенты и вайб-кодинг. В этом году у меня было открытие, которое изменило мой подход к разработке. Сейчас начинается эра vibe coding — когда ты не пишешь код построчно, а просто описываешь намерение, и агент превращает его в рабочий (не всегда) код.

Раньше программирование было про «как»: как написать цикл, как обработать исключение, как настроить конфиг. С агентами это стало про «что»: что я хочу получить, какую проблему решаем.

Что изменилось?
✔️Скорость: То, что занимало час, теперь — 15 минут
✔️Креативность: Освободилось время на архитектуру и эксперименты
✔️Рутина: Boilerplate, тесты, документация генерируются автоматически

Но главное — важно понимать, что даже сейчас агенты работают неидельно и их нужно перепроверять. Но с базовыми задачками они справляются хорошо. Конкретно я использую copilot, и в первое время он выдавал чепуху, но тут главное хорошо описывать промпт и потом читать код.

🎅С наступающим Новым годом, коллеги! Пусть ваши билды всегда будут зелеными, а продакшен — стабильным. И помните: лучший коммит в конце декабря — это закрытый ноутбук.

🎅Анна, Flutter Team Lead Friflex

Этот год был супер насыщенным на новые знания и открытия. Но мой самый главный инсайт — коммуникация команды с заказчиком.

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

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

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

И главное, что стоит помнить и заказчикам, и команде — вы не конкуренты, вы партнеры! У вас общая цель, вы идете к стабильному, рабочему продукту. А достичь этой цели возможно только совместными усилиями и обоюдными компромиссами.
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍6🎄6🔥31😁1🎅1
🙂Присоединяетесь, у нас тут Flutter-утренник

А пока вы готовите костюмы, хотим поздравить с Новым годом!

Больше инновационных проектов и вдохновения для их реализации
Больше стабильных релизов и довольных пользователей
И конечно, больше времени на творчество, изучение нового и отдых
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
14😁5🔥4👍1
💡Устроим небольшую проверку изученного за год? На новогодних праздниках вас будет ждать небольшая викторина от Розы, Кати и Анны
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍2
Какие три основных подхода существуют для работы с иконками во Flutter?
Anonymous Quiz
4%
PNG, JPG, GIF
61%
Icon Fonts, SVG, Vector Graphics
33%
Material Icons, Cupertino Icons, Font Awesome
2%
Bitmap, Vector
Какой виджет позволяет дочернему элементу выходить за границы родителя?
Anonymous Quiz
85%
OverflowBox
3%
AspectRatio
11%
Expanded
2%
Align
Какие модификаторы можно комбинировать?
Anonymous Quiz
22%
base и final
26%
abstract и base
13%
sealed и base
39%
abstract и mixin
Какой Sliver позволяет вставить обычный виджет в CustomScrollView?
Anonymous Quiz
15%
SliverList
76%
SliverToBoxAdapter
5%
SliverAppBar
5%
SliverGrid
😎Надеемся, вы отлично отдыхаете!

За этот год во @flutterfriendly вышло 222 публикации, а вы поставили более 3800 реакций. Решили вспомнить посты, которые вы больше всего читали и которыми активно делились за 2025 год:

Аудит безопасности мобильных приложений: виды и этапы

Использование ARB-формата

Обновление Android Studio без ошибок

Как пользоваться режимом выбора виджетов

Пакет meta

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

Виджеты для управления размерами

Работа с иконками

Библиотека dartx

FutureOr в Dart

gRPC во Flutter: эффективная коммуникация между клиентом и сервером

Модификаторы классов в Dart

Тестирование кода: виды и для чего это нужно

Режимы сборки: debug, profile и release

Friflex Flutter Starter

Паттерн Strategy

Запись митапа: способы темизации и кастомизации мобильных приложений

Создание виджетов поверх существующего интерфейса

Определение местоположение пользователя: интеграция в приложение

Как быстро развернуть сайт документации с помощью Docusaurus

Адаптивная верстка: что это такое и как реализовать

Утечки памяти во Flutter-приложениях

Техническое собеседование: как подготовиться начинающим разработчикам

Hot Restart и Hot Reload: в чем отличия и как работают
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥94
Какой принцип SOLID нарушен, если класс UserManager одновременно валидирует данные, сохраняет в БД и отправляет email?
Anonymous Quiz
2%
Принцип открытости/закрытости (O)
96%
Принцип единственной ответственности (S)
1%
Принцип инверсии зависимостей (D)
1%
Принцип подстановки Лисков (L)