Новая библиотека DRTDI для управления зависимостями в Dart и Flutter!
В мире разработки на Dart и Flutter появилась новая библиотека под названием DRTDI, которая обещает революционизировать управление зависимостями в приложениях 🚀. Авторы библиотеки отметили, что существующие решения либо слишком сложные, либо слишком простые, и не удовлетворяют типичным сценариям, поэтому они создали DRTDI с учетом требований прозрачности, производительности, гибкости и универсальности 💡.
DRTDI предлагает ряд интересных концепций, таких как жизненные циклы (Lifetimes), которые позволяют гибко управлять временем жизни объектов, иерархия контейнеров, которая позволяет разделять зависимости для разных модулей или экранов, keyed registrations, которые поддерживают ключи при регистрации, и декораторы (Decorators / Middlewares), которые позволяют добавлять дополнительный слой для логирования, кэширования и т. д. 🤩.
Одним из ключевых преимуществ DRTDI является ее реализация без использования runtime-рефлексии, автоматического сканирования классов, code-generation и dynamic proxy, что обеспечивает детерминированность и минимальные накладные расходы 📊. Вместо этого контейнер хранит маппинг типов и ключей на фабрики и выполняет соответствующую фабрику при запросе.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #DRTDI #dependencyinjection
В мире разработки на Dart и Flutter появилась новая библиотека под названием DRTDI, которая обещает революционизировать управление зависимостями в приложениях 🚀. Авторы библиотеки отметили, что существующие решения либо слишком сложные, либо слишком простые, и не удовлетворяют типичным сценариям, поэтому они создали DRTDI с учетом требований прозрачности, производительности, гибкости и универсальности 💡.
DRTDI предлагает ряд интересных концепций, таких как жизненные циклы (Lifetimes), которые позволяют гибко управлять временем жизни объектов, иерархия контейнеров, которая позволяет разделять зависимости для разных модулей или экранов, keyed registrations, которые поддерживают ключи при регистрации, и декораторы (Decorators / Middlewares), которые позволяют добавлять дополнительный слой для логирования, кэширования и т. д. 🤩.
Одним из ключевых преимуществ DRTDI является ее реализация без использования runtime-рефлексии, автоматического сканирования классов, code-generation и dynamic proxy, что обеспечивает детерминированность и минимальные накладные расходы 📊. Вместо этого контейнер хранит маппинг типов и ключей на фабрики и выполняет соответствующую фабрику при запросе.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #DRTDI #dependencyinjection
❤1👎1
Перенос камеры на карте: как сделать поведение идентичным 2ГИС
🗺 Вы когда-нибудь задумывались, как картографические приложения, такие как 2ГИС, Яндекс.Карты и Google Maps, реализуют перенос камеры на карте? 🤔 Это интересный вопрос, и сегодня мы поговорим об этом.
Когда вы нажимаете на карте в зону, которая закрывается элементами управления или другими виджетами, маркер на карте должен появиться и переместиться в "безопасную" зону, где с ним легче работать 📈. Для решения этой задачи необходимо определить, в какой зоне находится точка, и переместить камеру при необходимости. Точка может находиться в одной из трех зон: внутри сцены, вне сцены, но внутри области просмотра, или вне области просмотра 📍.
Для реализации этого алгоритма необходимо собрать вводные данные, такие как размер экрана, паддинги, которые формируют сцену, и позицию камеры 📊. Затем необходимо выполнить последовательность действий для определения координат видимой области и сцены, и перемещения точки при необходимости 🔄. Статья описывает процесс определения, находится ли точка внутри определенного прямоугольника на карте, используя векторные произведения для понимания, с какой стороны прямоугольника находится точка 📝.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #карты #камера #переноскамеры #2ГИС #ЯндексКарты #GoogleMaps
🗺 Вы когда-нибудь задумывались, как картографические приложения, такие как 2ГИС, Яндекс.Карты и Google Maps, реализуют перенос камеры на карте? 🤔 Это интересный вопрос, и сегодня мы поговорим об этом.
Когда вы нажимаете на карте в зону, которая закрывается элементами управления или другими виджетами, маркер на карте должен появиться и переместиться в "безопасную" зону, где с ним легче работать 📈. Для решения этой задачи необходимо определить, в какой зоне находится точка, и переместить камеру при необходимости. Точка может находиться в одной из трех зон: внутри сцены, вне сцены, но внутри области просмотра, или вне области просмотра 📍.
Для реализации этого алгоритма необходимо собрать вводные данные, такие как размер экрана, паддинги, которые формируют сцену, и позицию камеры 📊. Затем необходимо выполнить последовательность действий для определения координат видимой области и сцены, и перемещения точки при необходимости 🔄. Статья описывает процесс определения, находится ли точка внутри определенного прямоугольника на карте, используя векторные произведения для понимания, с какой стороны прямоугольника находится точка 📝.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #карты #камера #переноскамеры #2ГИС #ЯндексКарты #GoogleMaps
👍3
Новое издание книги "Основы Dart: Community edition" уже доступно!
Ура, друзья! 🎉 Станислав Чернышев завершил обновление предыдущей версии книги "Основы Dart" и выпустил второе издание "Основы Dart: Community edition". В этой версии отсутствует глава по разработке телеграм-ботов на Dart и сквозной проект "Крестики-нолики". Автор внес значительные изменения в книгу, включая выделение задач в отдельный лабораторный практикум, переработку некоторых глав и адаптацию кода под Dart 3.10+.
В новом издании были добавлены новые главы, такие как "Работа с СУБД SQLite" и "Сетевое программирование". Следующее издание книги ожидается в 2027 году. Автор также выпустил другие книги по Dart и Flutter, включая "Dart Concurrency" и "Алгоритмы и структуры данных на Dart". В статье рассказывается об авторских проектах и курсах по разработке на Dart и Flutter.
Автор является идейным вдохновителем и соавтором книги "Основы Flutter", а также создателем курсов на Stepik, таких как "Основы разработки на Dart" и "Основы Flutter". Автор выражает благодарность всем, кто поддержал его проекты, и приглашает читателей распространять информацию о своих работах. Кроме того, автор отмечает, что его книга "Основы Dart: Community edition" распространяется бесплатно, но только через определенные каналы.
Книга доступна в двух версиях: PDF и EPUB. Существует также бесплатная и платная версия, бесплатную можно скачать с Яндекс Диска или Google Drive. Ссылки на скачивание:
- pdf: https://vk.cc/cSpsqh
- epub: https://vk.cc/cSpst8
- pdf: https://vk.cc/cSpt5X
- epub: https://vk.cc/cSpt7y
. Кроме того, книга доступна в репозитории на GitHub. Читать здесь: ссылка
Автор книги Станислав Чернышев
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #DartConcurency #Stepik #ЯндексДиск #GoogleDrive #GitHub
Ура, друзья! 🎉 Станислав Чернышев завершил обновление предыдущей версии книги "Основы Dart" и выпустил второе издание "Основы Dart: Community edition". В этой версии отсутствует глава по разработке телеграм-ботов на Dart и сквозной проект "Крестики-нолики". Автор внес значительные изменения в книгу, включая выделение задач в отдельный лабораторный практикум, переработку некоторых глав и адаптацию кода под Dart 3.10+.
В новом издании были добавлены новые главы, такие как "Работа с СУБД SQLite" и "Сетевое программирование". Следующее издание книги ожидается в 2027 году. Автор также выпустил другие книги по Dart и Flutter, включая "Dart Concurrency" и "Алгоритмы и структуры данных на Dart". В статье рассказывается об авторских проектах и курсах по разработке на Dart и Flutter.
Автор является идейным вдохновителем и соавтором книги "Основы Flutter", а также создателем курсов на Stepik, таких как "Основы разработки на Dart" и "Основы Flutter". Автор выражает благодарность всем, кто поддержал его проекты, и приглашает читателей распространять информацию о своих работах. Кроме того, автор отмечает, что его книга "Основы Dart: Community edition" распространяется бесплатно, но только через определенные каналы.
Книга доступна в двух версиях: PDF и EPUB. Существует также бесплатная и платная версия, бесплатную можно скачать с Яндекс Диска или Google Drive. Ссылки на скачивание:
- pdf: https://vk.cc/cSpsqh
- epub: https://vk.cc/cSpst8
- pdf: https://vk.cc/cSpt5X
- epub: https://vk.cc/cSpt7y
. Кроме того, книга доступна в репозитории на GitHub. Читать здесь: ссылка
Автор книги Станислав Чернышев
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #DartConcurency #Stepik #ЯндексДиск #GoogleDrive #GitHub
🔥2
Эволюция Fuchsia: Как Google меняет подход к операционным системам
В последнее время компания Google активно работает над операционной системой Fuchsia, которая изначально позиционировалась как потенциальная замена Android. Однако, как выяснилось, Fuchsia прошла через значительные изменения и теперь представляет собой микроядро Zircon, написанное на C++. Это решение позволило решить фундаментальные проблемы ядра Linux, такие как отсутствие изоляции драйверов и уязвимости в драйверах, вынося их в пользовательское пространство и используя механизм обмена сообщениями между процессами 📱.
Одним из ключевых компонентов Fuchsia является FIDL (Fuchsia Interface Definition Language), который обеспечивает стабильный ABI для драйверов, позволяя обновлять ядро независимо от производителей железа. Кроме того, в Fuchsia есть компонент Starnix, который позволяет запускать приложения Android на Fuchsia без необходимости переписывать их под нативный Zircon. Это открывает новые возможности для разработчиков и пользователей 🚀.
За последние два года в Starnix были внесены критические изменения, включая режим ограниченного доступа и улучшенное управление памятью, что позволило приблизить производительность к нативной. Кроме того, была добавлена поддержка 32-битных приложений, что расширило возможности запуска легаси-софта. Для обеспечения аппаратного ускорения графики в Fuchsia была разработана драйверная архитектура Magma, которая позволяет использовать стандартные драйверы Vulkan для доступа к GPU 🎮.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #fuchsia #zircon #starnix
В последнее время компания Google активно работает над операционной системой Fuchsia, которая изначально позиционировалась как потенциальная замена Android. Однако, как выяснилось, Fuchsia прошла через значительные изменения и теперь представляет собой микроядро Zircon, написанное на C++. Это решение позволило решить фундаментальные проблемы ядра Linux, такие как отсутствие изоляции драйверов и уязвимости в драйверах, вынося их в пользовательское пространство и используя механизм обмена сообщениями между процессами 📱.
Одним из ключевых компонентов Fuchsia является FIDL (Fuchsia Interface Definition Language), который обеспечивает стабильный ABI для драйверов, позволяя обновлять ядро независимо от производителей железа. Кроме того, в Fuchsia есть компонент Starnix, который позволяет запускать приложения Android на Fuchsia без необходимости переписывать их под нативный Zircon. Это открывает новые возможности для разработчиков и пользователей 🚀.
За последние два года в Starnix были внесены критические изменения, включая режим ограниченного доступа и улучшенное управление памятью, что позволило приблизить производительность к нативной. Кроме того, была добавлена поддержка 32-битных приложений, что расширило возможности запуска легаси-софта. Для обеспечения аппаратного ускорения графики в Fuchsia была разработана драйверная архитектура Magma, которая позволяет использовать стандартные драйверы Vulkan для доступа к GPU 🎮.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #fuchsia #zircon #starnix
👏2
Google разрабатывает новую операционную систему Fuchsia и кроссплатформенный фреймворк Flutter
Google разрабатывает новую операционную систему Fuchsia и кроссплатформенный фреймворк Flutter, которые позволят создавать приложения, работающие на любом устройстве, от смартфонов до ноутбуков и телевизоров. Это позволит разработчикам писать код один раз и запускать его на разных платформах без компромиссов в производительности. Для пользователей это означает конец фрагментации и начало долголетия устройств, которые будут получать обновления десятилетиями, а приложения будут работать на всех устройствах без дополнительных настроек.
Одним из ключевых компонентов Fuchsia является микроядро Zircon, которое обеспечивает высокую безопасность и производительность. Кроме того, Google использует технологию WGPU для создания единой графической платформы для всех своих проектов, включая Fuchsia, Chrome и Flutter. Это позволяет разработчикам создавать приложения, которые могут работать на разных платформах без изменений.
Google также разрабатывает новый рендерер Flutter, называемый Impeller, который позволяет предварительно компилировать шейдеры, что улучшает производительность и безопасность приложений. Кроме того, компания работает над проектом Aluminium, который позволяет запускать Android-приложения на десктопе, что открывает новые возможности для разработчиков и может сделать Kotlin Multiplatform более популярным на десктопе.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #Fuchsia #Aluminium #Impeller #WGPU #Zircon
Google разрабатывает новую операционную систему Fuchsia и кроссплатформенный фреймворк Flutter, которые позволят создавать приложения, работающие на любом устройстве, от смартфонов до ноутбуков и телевизоров. Это позволит разработчикам писать код один раз и запускать его на разных платформах без компромиссов в производительности. Для пользователей это означает конец фрагментации и начало долголетия устройств, которые будут получать обновления десятилетиями, а приложения будут работать на всех устройствах без дополнительных настроек.
Одним из ключевых компонентов Fuchsia является микроядро Zircon, которое обеспечивает высокую безопасность и производительность. Кроме того, Google использует технологию WGPU для создания единой графической платформы для всех своих проектов, включая Fuchsia, Chrome и Flutter. Это позволяет разработчикам создавать приложения, которые могут работать на разных платформах без изменений.
Google также разрабатывает новый рендерер Flutter, называемый Impeller, который позволяет предварительно компилировать шейдеры, что улучшает производительность и безопасность приложений. Кроме того, компания работает над проектом Aluminium, который позволяет запускать Android-приложения на десктопе, что открывает новые возможности для разработчиков и может сделать Kotlin Multiplatform более популярным на десктопе.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #Fuchsia #Aluminium #Impeller #WGPU #Zircon
🤔3
Реализация поддержки deeplink-ов и универсальных ссылок в мобильных приложениях на Flutter
📱💻
Вы когда-нибудь задумывались, как сделать так, чтобы ваше мобильное приложение открывалось по определенной ссылке? 🤔 Это возможно благодаря технологиям deeplink-ов и универсальных ссылок. В этой статье мы расскажем, как реализовать поддержку этих технологий в ваших мобильных приложениях на Flutter.
Deeplink-и - это ссылки с кастомной схемой, которые позволяют открыть приложение и перейти на вложенные маршруты внутри него 📈. Universal links - это универсальные ссылки iOS приложений, которые открывают приложение, если оно установлено, или веб-сайт, если нет 📊. App Links - это ссылки для Android, которые работают аналогично Universal links на iOS 📈.
Для обработки ссылок внутри приложения можно использовать библиотеку app_links 📚. Эта библиотека позволяет отслеживать, с какой ссылки запустилось приложение, и получать ссылки, которые поступают в приложение из платформы 📊.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #deeplinks #universallinks #applinks
📱💻
Вы когда-нибудь задумывались, как сделать так, чтобы ваше мобильное приложение открывалось по определенной ссылке? 🤔 Это возможно благодаря технологиям deeplink-ов и универсальных ссылок. В этой статье мы расскажем, как реализовать поддержку этих технологий в ваших мобильных приложениях на Flutter.
Deeplink-и - это ссылки с кастомной схемой, которые позволяют открыть приложение и перейти на вложенные маршруты внутри него 📈. Universal links - это универсальные ссылки iOS приложений, которые открывают приложение, если оно установлено, или веб-сайт, если нет 📊. App Links - это ссылки для Android, которые работают аналогично Universal links на iOS 📈.
Для обработки ссылок внутри приложения можно использовать библиотеку app_links 📚. Эта библиотека позволяет отслеживать, с какой ссылки запустилось приложение, и получать ссылки, которые поступают в приложение из платформы 📊.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #deeplinks #universallinks #applinks
👍1
Проблемы кроссплатформенной разработки: как найти идеальное название для приложения
При создании кроссплатформенных приложений разработчики часто сталкиваются с проблемами, связанными с требованиями различных платформ 🤔. Предприниматели, увлеченные своей идеей, могут не учитывать технические ограничения и требовать, чтобы их приложение выглядело идентично на всех устройствах 📱. Однако это может привести к проблемам с публикацией в магазинах приложений или ошибкам сборки на разных платформах 🚨.
Разработчикам приходится найти компромисс, удовлетворяющий взаимоисключающие требования IT-гигантов 🤝. Статья обсуждает требования, которые выдвигают каждый из "пяти парней" (WEB, Android, iOS, Windows и Linux) к единственному идентификатору приложения, и как найти подходящее название для проекта, которое будет работать на всех платформах 📈.
Для Apple Bundle Identifier (Bundle ID) является фундаментальным идентификатором приложения 📊. Это уникальная строка, определяющая приложение в системе, используемая для связывания с сервисами iCloud, Push Notifications и Game Center, а также служащая ключом для проверки обновлений в App Store 📱. Согласно официальной документации, строка идентификатора должна соответствовать строгим правилам форматирования Uniform Type Identifier (UTI), содержа только буквенно-цифровые символы, точку и дефис 📝.
Для Android ключевым идентификатором является Application ID, который должен соответствовать спецификации языка Java 📊. Идентификатор приложения в Android должен состоять как минимум из двух сегментов, разделенных точкой, и каждый сегмент должен начинаться с буквы 📝. Допустимыми символами являются латинские буквы, цифры и нижнее подчеркивание 📝.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #кроссплатформенная_разработка #мобильные_приложения #ит_разработка
При создании кроссплатформенных приложений разработчики часто сталкиваются с проблемами, связанными с требованиями различных платформ 🤔. Предприниматели, увлеченные своей идеей, могут не учитывать технические ограничения и требовать, чтобы их приложение выглядело идентично на всех устройствах 📱. Однако это может привести к проблемам с публикацией в магазинах приложений или ошибкам сборки на разных платформах 🚨.
Разработчикам приходится найти компромисс, удовлетворяющий взаимоисключающие требования IT-гигантов 🤝. Статья обсуждает требования, которые выдвигают каждый из "пяти парней" (WEB, Android, iOS, Windows и Linux) к единственному идентификатору приложения, и как найти подходящее название для проекта, которое будет работать на всех платформах 📈.
Для Apple Bundle Identifier (Bundle ID) является фундаментальным идентификатором приложения 📊. Это уникальная строка, определяющая приложение в системе, используемая для связывания с сервисами iCloud, Push Notifications и Game Center, а также служащая ключом для проверки обновлений в App Store 📱. Согласно официальной документации, строка идентификатора должна соответствовать строгим правилам форматирования Uniform Type Identifier (UTI), содержа только буквенно-цифровые символы, точку и дефис 📝.
Для Android ключевым идентификатором является Application ID, который должен соответствовать спецификации языка Java 📊. Идентификатор приложения в Android должен состоять как минимум из двух сегментов, разделенных точкой, и каждый сегмент должен начинаться с буквы 📝. Допустимыми символами являются латинские буквы, цифры и нижнее подчеркивание 📝.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #кроссплатформенная_разработка #мобильные_приложения #ит_разработка
Новости из мира Flutter: адаптация Impeller для Авроры!
В последнее время команда разработки Flutter для ОС Аврора активно работает над адаптацией компонента Impeller для повышения производительности приложений 🚀. Impeller - это библиотека в составе Flutter Engine, разработанная для решения проблемы зависания анимаций 📈. Ранее анимации зависали из-за компиляции шейдеров в рантайме, но с включением Impeller эта проблема уходит 👍.
Тимлид команды разработки Flutter для ОС Аврора, Никита Красавин, рассказывает об адаптации Impeller и ее преимуществах 🤔. Для Авроры Impeller включен начиная с Flutter 3.32, и его можно включить в экспериментальном режиме с помощью параметра --enable-impeller 📊. Однако, поддержка Impeller для Авроры еще не идеальна и имеет ограничения, такие как отсутствие поддержки альбомной ориентации и некорректная отрисовка некоторых UI-сценариев 📝.
В статье описывается тестирование производительности приложений на операционной системе Аврора с использованием движка Impeller 📊. Автор проводит сравнительные тесты с движком Skia, чтобы оценить преимущества Impeller 📈. Результаты показывают, что Impeller может улучшить производительность приложений на Авроре, особенно в сценариях с интенсивной отрисовкой графики 📈.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #Impeller #Skia #Аврора #ПроизводительностьПриложений
В последнее время команда разработки Flutter для ОС Аврора активно работает над адаптацией компонента Impeller для повышения производительности приложений 🚀. Impeller - это библиотека в составе Flutter Engine, разработанная для решения проблемы зависания анимаций 📈. Ранее анимации зависали из-за компиляции шейдеров в рантайме, но с включением Impeller эта проблема уходит 👍.
Тимлид команды разработки Flutter для ОС Аврора, Никита Красавин, рассказывает об адаптации Impeller и ее преимуществах 🤔. Для Авроры Impeller включен начиная с Flutter 3.32, и его можно включить в экспериментальном режиме с помощью параметра --enable-impeller 📊. Однако, поддержка Impeller для Авроры еще не идеальна и имеет ограничения, такие как отсутствие поддержки альбомной ориентации и некорректная отрисовка некоторых UI-сценариев 📝.
В статье описывается тестирование производительности приложений на операционной системе Аврора с использованием движка Impeller 📊. Автор проводит сравнительные тесты с движком Skia, чтобы оценить преимущества Impeller 📈. Результаты показывают, что Impeller может улучшить производительность приложений на Авроре, особенно в сценариях с интенсивной отрисовкой графики 📈.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #Impeller #Skia #Аврора #ПроизводительностьПриложений
Откройте для себя Jaspr: фреймворк для создания веб-приложений на Dart
🌐 В мире веб-разработки появился новый игрок - Jaspr, фреймворк, который позволяет использовать язык Dart для создания веб-приложений. Jaspr отличается от других фреймворков, таких как Flutter Web, тем, что он не использует канвас и пиксельную магию, а вместо этого работает с обычным HTML и CSS. Это позволяет получить лучшую производительность и SEO, а также использовать существующие CSS-библиотеки и JavaScript-библиотеки.
📈 Jaspr поддерживает различные режимы работы, включая статическую генерацию сайтов (SSG), рендеринг на стороне сервера (SSR) и клиент-сайд рендеринг (SPA). Фреймворк также предоставляет автоматическую гидратацию, которая позволяет превратить статический сайт в интерактивное SPA без перезагрузки. Синтаксис Jaspr похож на синтаксис Flutter, поэтому разработчикам, знакомым с Flutter, не потребуется значительного переобучения.
🔍 Jaspr имеет несколько ключевых особенностей, таких как возвращаемый тип Iterable<Component>, который позволяет вернуть несколько компонентов на одном уровне, использование HTML-тегов вместо виджетов и стилизация через CSS. Jaspr также поддерживает управление состоянием с помощью знакомых пакетов, таких как Riverpod и BLoC. Это позволяет разработчикам использовать привычные инструменты и не учить новые.
📚 Читать здесь: ссылка
👉 FlutterPulse — канал о мире Flutter!
🔥 #flutter #dart #flutterpulse #flutterpulsehabr #jaspr #webdevelopment #dartlang
🌐 В мире веб-разработки появился новый игрок - Jaspr, фреймворк, который позволяет использовать язык Dart для создания веб-приложений. Jaspr отличается от других фреймворков, таких как Flutter Web, тем, что он не использует канвас и пиксельную магию, а вместо этого работает с обычным HTML и CSS. Это позволяет получить лучшую производительность и SEO, а также использовать существующие CSS-библиотеки и JavaScript-библиотеки.
📈 Jaspr поддерживает различные режимы работы, включая статическую генерацию сайтов (SSG), рендеринг на стороне сервера (SSR) и клиент-сайд рендеринг (SPA). Фреймворк также предоставляет автоматическую гидратацию, которая позволяет превратить статический сайт в интерактивное SPA без перезагрузки. Синтаксис Jaspr похож на синтаксис Flutter, поэтому разработчикам, знакомым с Flutter, не потребуется значительного переобучения.
🔍 Jaspr имеет несколько ключевых особенностей, таких как возвращаемый тип Iterable<Component>, который позволяет вернуть несколько компонентов на одном уровне, использование HTML-тегов вместо виджетов и стилизация через CSS. Jaspr также поддерживает управление состоянием с помощью знакомых пакетов, таких как Riverpod и BLoC. Это позволяет разработчикам использовать привычные инструменты и не учить новые.
📚 Читать здесь: ссылка
👉 FlutterPulse — канал о мире Flutter!
🔥 #flutter #dart #flutterpulse #flutterpulsehabr #jaspr #webdevelopment #dartlang
Создание выделения текста с помощью Flutter
📄 Статья описывает процесс создания выделения текста в приложении, используя Flutter. Целью является создание выделения, которое идет по контуру текста, без ломаных "ступенек" на стыках строк и с скругленными углами.
Для этого сначала получают геометрию выделяемого фрагмента, превращая массив сегментов в единый TextSpan и вычисляя диапазон символов для нужного сегмента. Затем используются формулы для определения индексов начала и конца сегмента в общей строке. Дальше используется метод getBoxesForSelection для получения геометрии выделения.
Статья описывает процесс создания контура выделенного текста в приложении. Процесс состоит из нескольких шагов: получение боксов выделенного текста и их конвертация в объекты HighlightBounds, нормализация особых случаев, построение матрицы и обход ее по периметру, очистку дубликатов и коллинеарных точек, скругление углов и определение направления дуги.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #mobiledevelopment #uiuxdesign
📄 Статья описывает процесс создания выделения текста в приложении, используя Flutter. Целью является создание выделения, которое идет по контуру текста, без ломаных "ступенек" на стыках строк и с скругленными углами.
Для этого сначала получают геометрию выделяемого фрагмента, превращая массив сегментов в единый TextSpan и вычисляя диапазон символов для нужного сегмента. Затем используются формулы для определения индексов начала и конца сегмента в общей строке. Дальше используется метод getBoxesForSelection для получения геометрии выделения.
Статья описывает процесс создания контура выделенного текста в приложении. Процесс состоит из нескольких шагов: получение боксов выделенного текста и их конвертация в объекты HighlightBounds, нормализация особых случаев, построение матрицы и обход ее по периметру, очистку дубликатов и коллинеарных точек, скругление углов и определение направления дуги.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #mobiledevelopment #uiuxdesign