Flutter Pulse
785 subscribers
482 photos
1.19K links
На канале будут новости про flutter с сайтов, информация об обновлении пакетов, а также авторский контент.
Download Telegram
Создание динамических форм в Flutter с помощью Stac
🚀 Хотите создать формы, которые адаптируются к потребностям пользователей в режиме реального времени? 🤔

В этой статье вы узнаете, как использовать Stac, мощный фреймворк для создания гибкого, управляемого сервером UI, чтобы построить динамические формы в Flutter. 📱 Вы научитесь создавать формы, которые меняются на лету без необходимости обновления приложения, валидировать поля формы и обрабатывать ответы API. 📈

В статье описаны приёмы и советы по созданию динамических форм, валидации полей, обработке API-запросов и ответов. Вы узнаете, как использовать Stac для создания форм, которые адаптируются к потребностям пользователей. 🤝

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Original article

Все подобные новости ищите по хэштегу #FlutterPulseMedium Оцените новую рубрику! 👍

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appdevelopment #stac #dynamicforms
1👎1
Управление переменными окружения в Flutter Web: секреты и лайфхаки
Flutter-разработчики, внимание! Хотите узнать, как эффективно управлять переменными окружения в своих Flutter Web-приложениях?

В этой статье вы найдёте подробное руководство по использованию переменных окружения в Flutter Web. Автор делится гибридной стратегией, которая включает использование flutter_dotenv для локальной разработки и dart-define для деплоя. Вы узнаете, как настроить VS Code для лёгкого переключения между окружениями, как создать отдельные файлы для переменных окружения и как интегрировать их в свой проект.

В статье описаны следующие приёмы:
Использование flutter_dotenv для локальной разработки и dart-define для деплоя;
Создание отдельных файлов для переменных окружения (.env.dev, .env.uat, .env.prod);
Настройка VS Code для лёгкого переключения между окружениями;
Использование dart-define для передачи значений переменных окружения при деплое.

🇷🇺Читать статью на русском
🇬🇧Читать статью на английском
🌐Оригинальная статья

Все подобные новости ищите по хэштегу #FlutterPulseMedium Оцените новую рубрику!

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #webdevelopment #environmentvariables #devops #mobiledevelopment
👍1
💎 Выбор аккаунта разработчика: индивидуальный или корпоративный?
Привет, друзья! 💬 Сегодня мы поговорим о важном этапе перед публикацией приложения в Google Play и AppStore - создании аккаунта разработчика. 📈 Этот аккаунт может быть двух видов: индивидуальный и корпоративный. 🤔

Индивидуальный аккаунт - это аккаунт физического лица, который регистрируется на конкретного человека. 📝 Преимущества такого аккаунта включают быстрый процесс регистрации, минимальное количество документов и проверок, отсутствие необходимости наличия официально зарегистрированного юридического лица, меньше бюрократии и более низкие затраты на содержание. 💸 Однако, есть и недостатки: ограничения в доступах, даже для администраторов, указание имени владельца аккаунта в карточке приложения, что может повлиять на репутацию продукта, доход поступает как доход физического лица и требуются особые условия для публикации. 📊

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

Итак, какой аккаунт выбрать? 🤔 Если вы работаете над pet-проектом, стартапом или экспериментальным продуктом, индивидуальный аккаунт может быть оптимальным вариантом. 🌟 Однако, если ваше приложение является частью полноценного бизнеса или у вас большая команда разработчиков, лучше выбрать аккаунт юридического лица. 📈

Полную новость читайте здесь.

FlutterPulse — канал о мире Flutter!

#flutter #dart #FlutterPulse #FlutterPulseNews #flutterfriendly #mobiledevelopment #appdevelopment
Интегрируйте Google Sign-In в Flutter-приложение за 15 минут!

Хотите добавить в своё Flutter-приложение удобную и безопасную авторизацию через Google? В новой статье вы найдёте подробное руководство по интеграции Google Sign-In для Android и iOS.

В статье описаны все необходимые шаги для успешной интеграции: от установки необходимых пакетов и настройки Firebase до реализации авторизации и управления состоянием аутентификации. Вы узнаете, как настроить Google Sign-In для обеих платформ, как создать чистый и удобный интерфейс, а также получите готовый пример кода, который можно использовать в вашем приложении.

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Оцените рубрику!

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #google #signin #firebase #mobiledevelopment #appdevelopment
1
Flutter: Архитектура Приложений и Лучшие Практики
🚀 Хотите создать масштабируемое и поддерживаемое приложение на Flutter? 🤔

В этой статье рассматривается архитектурный подход к созданию приложения Flutter с использованием Clean Architecture, принципов SOLID и Riverpod для управления состоянием. На примере функции Crypto Watch-list показано, как реализовать эти принципы на практике. Кроме того, рассматриваются ключевые нефункциональные требования (NFR) как лучшие практики для обеспечения надежности, масштабируемости и поддерживаемости приложения.

Статья охватывает такие темы, как:
Разделение приложения на слои (Presentation, Domain, Data) в соответствии с Clean Architecture
Использование Riverpod для управления состоянием и реализации принципов SOLID
Реализация функций, таких как кэширование данных, отмена запросов API и автоматический повтор при восстановлении сети
Оптимизация обновлений списка для минимизации перестроений UI

Ознакомьтесь с полной статьей, чтобы узнать больше о создании надежных и масштабируемых приложений на Flutter:
🇷🇺 Статья на русском языке
🇬🇧 Статья на английском языке
🌐 Оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, понравилась ли вам новая рубрика!

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #apparchitecture #cleanarchitecture #riverpod #statemanagement #softwareengineering
1
Мастерство пагинации во Flutter: от простого ListView до бесконечной прокрутки с API!

Хотите улучшить производительность и отзывчивость вашего Flutter-приложения при работе с большими данными? Пагинация - ключ к успеху! 🔑

В этой статье мы погрузимся в мир пагинации во Flutter и рассмотрим различные методы и приёмы, которые помогут вам оптимизировать использование ресурсов и повысить удовлетворенность пользователей. Вы узнаете о ручной пагинации с помощью ListView.builder и ScrollController, использовании пакетов типа infinite_scroll_pagination, а также о применении GetX для управления состоянием пагинации. Кроме того, мы обсудим разницу между cursor-based и offset-based пагинацией, и как объединить бесконечную прокрутку с функцией "pull-to-refresh" для улучшения пользовательского опыта. 💡

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

🇷🇺Читать статью на русском
🇬🇧Read the article in English
🌐Original article

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, понравилась ли вам новая рубрика!

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appperformance #pagination #infiniteScroll
👍1
Как проверить реальное подключение к интернету в Flutter?
Вы когда-нибудь сталкивались с ситуацией, когда приложение зависает на экране загрузки, хотя Wi-Fi подключен? 🤔

В этой статье рассматривается проблема проверки подключения к интернету в Flutter-приложениях и предлагается решение с использованием BLoC. Автор делится своим опытом, когда обнаружилось, что стандартный пакет connectivity_plus не дает полной картины — он показывает только тип подключения (Wi-Fi, мобильная сеть или отсутствие связи), но не проверяет, работает ли интернет на самом деле.

Основная часть статьи посвящена реализации интеллектуального мониторинга статуса интернета с помощью BLoC. Автор поэтапно объясняет, как:
- добавить необходимые пакеты (`flutter_bloc, equatable, connectivity_plus, http`) в проект;
- создать события (`InternetConnectedEvent, InternetDisconnectedEvent, InternetNoSpeedEvent) и состояния (InternetLoading, InternetConnected, InternetDisconnected, InternetNoSpeed`) для BLoC;
- реализовать логику BLoC (`internet_bloc.dart`), которая проверяет подключение к интернету каждые несколько секунд, отправляя HTTP-запрос на Google;
- настроить `main.dart и home_screen.dart`, чтобы UI реагировал на изменения статуса интернета.

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

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Поделитесь, насколько вам понравилась эта рубрика! 😊

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appdevelopment #bloc #internetconnection #flutterdev #programming #coding #softwaredevelopment
👍3
🚫 Перестаньте использовать MediaQuery для адаптивности в Flutter
В 2025 году пора пересмотреть подход к созданию адаптивных интерфейсов во Flutter! Если вы всё ещё используете MediaQuery для responsive design, то пришло время изменить свой подход.

В статье рассматривается, почему использование MediaQuery для адаптивности является устаревшим и неэффективным подходом, особенно при разработке для различных устройств, таких как мобильные телефоны, веб, планшеты и складные устройства. Вы узнаете о новых инструментах и приёмах, которые предлагает Flutter для создания по-настоящему адаптивных интерфейсов.

В частности, в статье обсуждаются такие темы, как:
- Почему дробное масштабирование (fractional sizing) не подходит для создания адаптивных интерфейсов.
- Как использовать LayoutBuilder для создания адаптивных интерфейсов, основанных на доступном пространстве.
- Как использовать встроенные точки останова (breakpoints) во Flutter и пакеты, такие как flutter_responsive_framework.
- Как создавать адаптивные интерфейсы, которые не только масштабируются, но и меняют свою структуру в зависимости от устройства.

Читайте полную статью по ссылкам ниже:
🇷🇺Читать на русском языке
🇬🇧Читать на английском языке
🌐Оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Оцените новую рубрику!

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #responsiveDesign #adaptiveUI #mobileDevelopment #webDevelopment #FlutterDev #programmingTips
👍2💩1
Освойте навигацию и маршрутизацию в Flutter: полное руководство 🚀

Хотите улучшить свои навыки разработки на Flutter? 🤔 В новой статье мы подробно рассмотрим основы навигации и маршрутизации в Flutter, а также поделимся лучшими практиками и советами по реализации сложных сценариев навигации.

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

Вы узнаете:
- Разницу между навигацией и маршрутизацией
- Как использовать императивную навигацию для простых сценариев
- Как декларативная навигация может упростить сложные сценарии навигации
- Как использовать популярные библиотеки для реализации декларативной навигации

🇷🇺 Читать на русском
🇬🇧 Read in English
🌐 Original article

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, понравилась ли вам новая рубрика!

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appdevelopment #navigation #routing
Использование MethodChannel в Flutter для вызова родных API

Вы когда-нибудь задумывались, как вызвать родные API Android или iOS напрямую из своего Flutter-приложения? 🤔 Это возможно благодаря MethodChannel, механизму, который позволяет Flutter-коду и нативному коду общаться между собой. 💻 Он позволяет Dart-коду вызвать метод на стороне платформы и получить от него результат. 📈

MethodChannel позволяет создать плагин, который использует этот механизм для вызова родных API. Для этого необходимо создать Dart-класс, который использует MethodChannel для вызова нативного метода на Android-устройстве или iOS-устройстве. 📱 На стороне платформы необходимо зарегистрировать MethodChannel и его обработчик, который обрабатывает вызовы из Flutter. Если метод вызова совпадает с ожидаемым, то вызывается функция, которая возвращает результат. 📊

В статье описывается процесс создания плагина для Flutter, который позволяет получить уровень заряда батареи на устройствах Android и iOS. Для этого используется MethodChannel, который позволяет вызывать нативные методы из Dart-кода. 📈 Обработчик методов вызова (MethodCallHandler) устанавливается для обоих платформ, чтобы обрабатывать вызовы из Dart-кода. Если метод не поддерживается, вызывается ошибка. 🚫

Читать здесь: ссылка


FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #flutterpulsehabr #mobiledevelopment #flutterplugins
👍1
Разблокируйте мощь Dual-SIM в Flutter: умные Android-приложения для глобальных рынков

Вы знали, что более 85% Android-устройств в Азии и Африке оснащены двумя слотами для SIM-карт? А что, если ваши Flutter-приложения смогут динамически использовать обе SIM-карты для более умной маршрутизации звонков или управления клиентами?

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

Вы получите практические знания о том, как использовать dual-SIM устройства для создания более умных и функциональных приложений для электронной коммерции, поддержки клиентов и других сфер, где важна связь с клиентами.

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Original article

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, понравилась ли вам новая рубрика!

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #android #dualsim #telecom #telephony #appdevelopment
👍1
Ускорьте своё приложение Flutter: проверенные советы от разработчика!
Хотите сделать своё приложение Flutter быстрее и эффективнее? В этой статье вы найдёте реальные советы от опытного разработчика!

В статье рассматриваются практические стратегии улучшения скорости, памяти и пользовательского опыта в проектах Flutter. Автор делится своим опытом и рассказывает о том, как использовать инструменты профилирования, оптимизировать сетевые запросы и данные, избегать распространённых анти-паттернов производительности и балансировать функциональность с эффективностью ресурсов.

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

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, понравилась ли вам эта рубрика!

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #performanceoptimization #appdevelopment
👍1
Интеграционное тестирование Flutter на реальных устройствах: примеры и автоматизация CI

Выпустили сборку, всё протестировали, но пользователи столкнулись с ошибками? 🤔 Интеграционное тестирование — ваш спасательный круг! Оно имитирует реальное поведение пользователей на реальных устройствах, проверяя функциональность приложения от начала до конца.

В этой статье вы узнаете, как настроить интеграционное тестирование в Flutter, какие приёмы и фишки использовать для тестирования различных сценариев, таких как авторизация, навигация, взаимодействие с API и обработка ошибок. Вы также узнаете, как автоматизировать тестирование с помощью GitHub Actions и других инструментов CI.

Читайте подробнее в статье:
🇷🇺На русском
🇬🇧In English
🌐Original article

Все подобные новости ищите по хэштегу #FlutterPulseMedium Оцените новую рубрику! 👍

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #integrationtesting #mobiledevelopment #testing #CI #automation
👍1
Разработка проектов на Flutter с возможностью легкого портирования на другие платформы
🌟 В статье Юра Петров, руководитель отдела разработки компании Friflex, делится своим опытом и рекомендациями по созданию проектов на Flutter, которые можно легко адаптировать для различных платформ, включая Android, iOS, Linux, MacOS, Web, Windows и другие.

Для достижения этой цели автор предлагает выполнить несколько шагов:
1. Анализ подключаемых пакетов: перед началом проекта необходимо проанализировать используемые пакеты и плагины, чтобы убедиться, что они поддерживают все необходимые платформы 📦.
2. Создание папки app_service: создать глобальную папку app_service в корне проекта, в которой будут храниться интерфейсы и реализации плагинов 📁.
3. Создание реализаций для Base: создать базовые реализации плагинов, которые будут использоваться на всех платформах 💻.

Автор также подчеркивает важность создания интерфейсов для плагинов, чтобы можно было легко заменить одну реализацию на другую, не меняя основной код проекта 🔄. В качестве примера автор использует плагин flutter_secure_storage и показывает, как создать интерфейс и реализацию для него 🔒.

В целом, статья предоставляет полезные рекомендации и советы по созданию проектов на Flutter, которые можно легко портировать на другие платформы, и подчеркивает важность тщательного планирования и анализа на этапе начала проекта 📊.

Читать здесь: ссылка


FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #flutterpulsehabr #mobiledevelopment #crossplatformdevelopment
👍2
Создание платформы с использованием WebView и Flutter
В последнее время разработка мобильных приложений стала еще более сложной и требовательной 📈. Одним из способов упростить этот процесс является использование WebView как контентного слота, обернутого в полноценный нативный UI на Flutter 📊. В этой статье мы рассмотрим подход к созданию такой платформы и ее архитектуре, а также различные аспекты разработки мобильных приложений с использованием Flutter и Server-Driven UI 📈.

Одним из ключевых аспектов создания платформы является ее архитектура 📁. Автор статьи выбрал Flutter в качестве основы для своей платформы из-за его производительности, мультиплатформенности и контроля над пикселями 📊. Архитектура платформы состоит из трех слоев: нативной оболочки (Flutter), моста (JS Bridge) и WebView 🌉. Нативная оболочка обеспечивает мгновенную навигацию и нативные элементы управления, мост позволяет сайту и приложению общаться, а WebView отображает сайт 📄.

Реализация Server-Driven UI (SDUI) является еще одним важным аспектом разработки мобильных приложений 📈. Эта технология позволяет изменять внешний вид и функциональность приложения без необходимости пересборки и повторного выпуска в магазины приложений 📊. Это достигается за счет загрузки конфигурационных данных с сервера при запуске приложения 📁. Кроме того, статья затрагивает тему монетизации и вовлечения пользователей с помощью инструментов Firebase и AdMob, включая push-уведомления и поддержку тем и сегментации аудитории 📈.

Читать здесь: ссылка


FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #flutterpulsehabr #mobiledevelopment #webview
Обнаружение лица и анализ эмоций в Flutter с Google ML Kit
🚀 Хотите добавить в своё Flutter-приложение возможность обнаружения лиц и анализа эмоций? 🤔 Теперь это проще, чем когда-либо, благодаря Google ML Kit!

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

В статье описаны приёмы и советы, которые помогут вам:
- обнаруживать лица в реальном времени;
- анализировать ключевые точки лица;
- определять вероятность улыбки и открытости глаз;
- создавать забавные фильтры и приложения, реагирующие на эмоции;
- использовать TensorFlow Lite для более глубокого анализа эмоций.

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Оцените рубрику! 👍

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appdevelopment #machinelearning #GoogleMLKit
👍1
Flutterfire с flavors: решение проблемы конфигурации
Вы используете Flutter и Firebase в своём приложении? Тогда вы, скорее всего, сталкивались с проблемой конфигурации при работе с flavors! 🤔

В этой статье автор делится своим опытом решения проблемы конфигурации Firebase при использовании flavors в приложении Flutter. Вы узнаете, как правильно настроить flutterfire_cli, чтобы он корректно работал с разными средами (dev, staging, prod) и как избежать ошибок при сборке приложения. 📱💻

Автор подробно описывает процесс настройки конфигурации Firebase для разных flavors, используя команду flutterfire config с различными опциями. Вы узнаете, как обновить файл firebase.json, чтобы он содержал правильные настройки для каждой среды. 🔧

Кроме того, в статье описывается решение проблемы, связанной с отсутствием конфигурации "GoogleService-Info.plist" для конфигурации сборки "Release-dev". 🤔

🇷🇺Читать статью на русском
🇬🇧Читать статью на английском
🌐Оригинальная статья

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, понравилась ли вам новая рубрика! 👍

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #Firebase #Flutterfire #flavors #mobiledevelopment #appdevelopment
1👍1
Добавьте вибрацию в ваше Flutter-приложение: пошаговое руководство
Повысьте уровень взаимодействия с пользователем в вашем приложении, добавив функцию вибрации с помощью Native Haptics! Flutter-разработчики, эта статья для вас!

В этой статье вы узнаете, как добавить вибрацию в ваше Flutter-приложение, используя встроенный класс HapticFeedback и платформу каналов для нативной коммуникации. Вы научитесь использовать различные стили вибрации, такие как легкие, средние и тяжелые воздействия, и узнаете, как реализовать вибрацию на устройствах Android и iOS.

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

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, чтобы подписчики оценили рубрику.

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #hapticfeedback #nativeintegration #vibration #mobiledevelopment #appdevelopment #userexperience #accessibility
👍2