Интернет радио, продолжение 📻💻
В этой статье автор расскажет о том, как можно дать новую жизнь старому смартфону, превратив его в интернет-радио с веб-интерфейсом 🌐. Вы узнаете, как создать простое и функциональное решение для прослушивания интернет-радио на базе бюджетного смартфона Android 📱.
Но это не всё! 🤔 Мы также расскажем о новом приложении для прослушивания радио на основе Flutter 📈, которое поддерживает MP3/AAC потоки, имеет тёмную тему и полноэкранный режим 🌃. Это приложение, называемое "Flutter Radio", доступно на GitHub 📊.
А если вы хотите создать свой собственный пульт дистанционного управления для интернет-радио? 🤔 Мы расскажем о том, как сделать это на основе ESP32 📈, с аналоговым интерфейсом и веб-API 🌐. Читайте нашу статью и создавайте свой собственный пульт! 📚
Кроме того, мы подготовили для вас статью о "Вайбкодинге в действии: создании пульта для радио с помощью LLM" 🤖. Вы узнаете, как автор реализовал функции, такие как тройное нажатие энкодера, двойное нажатие, инверсия энкодера и многое другое 📝.
И, наконец, мы расскажем о разработке проекта под ESP32 и опыте доработки кода для улучшения быстродействия и поиска ошибок 📊.
Читать статью можно здесь 📄
#flutter #dart #FlutterPulseHabr #flutterpulse 📈💻📻
В этой статье автор расскажет о том, как можно дать новую жизнь старому смартфону, превратив его в интернет-радио с веб-интерфейсом 🌐. Вы узнаете, как создать простое и функциональное решение для прослушивания интернет-радио на базе бюджетного смартфона Android 📱.
Но это не всё! 🤔 Мы также расскажем о новом приложении для прослушивания радио на основе Flutter 📈, которое поддерживает MP3/AAC потоки, имеет тёмную тему и полноэкранный режим 🌃. Это приложение, называемое "Flutter Radio", доступно на GitHub 📊.
А если вы хотите создать свой собственный пульт дистанционного управления для интернет-радио? 🤔 Мы расскажем о том, как сделать это на основе ESP32 📈, с аналоговым интерфейсом и веб-API 🌐. Читайте нашу статью и создавайте свой собственный пульт! 📚
Кроме того, мы подготовили для вас статью о "Вайбкодинге в действии: создании пульта для радио с помощью LLM" 🤖. Вы узнаете, как автор реализовал функции, такие как тройное нажатие энкодера, двойное нажатие, инверсия энкодера и многое другое 📝.
И, наконец, мы расскажем о разработке проекта под ESP32 и опыте доработки кода для улучшения быстродействия и поиска ошибок 📊.
Читать статью можно здесь 📄
#flutter #dart #FlutterPulseHabr #flutterpulse 📈💻📻
👍1
Как я сделал аудиогид с ИИ без опыта мобильной разработки 🤩
Вы когда-нибудь задумывались, как создать мобильное приложение без опыта программирования? 🤔 Оказывается, это вполне возможно! 🎉 Разработчик создал аудиогид для Санкт-Петербурга с помощью Flutter и ИИ, используя данные из Википедии и генерируя аудиорассказы с помощью OpenAI API и Yandex SpeechKit. 📚
Приложение GeoTalk было создано с помощью ИИ, но разработчик столкнулся с проблемами кодовой лапши и отсутствием фонового режима 🤦♂️. После рефакторинга и оптимизации приложение было опубликовано в RuStore 📈.
Разработчик планирует добавить полное покрытие России, бэкенд и многоязычность в будущих версиях 📊. Что вы думаете, стоит ли развивать проект дальше? 🤔 Поделитесь своими мыслями в комментариях! 💬
Читать подробную статью можно здесь 📄
#flutter #dart #flutterpulse #flutterpulsehabr #аудиогид #ИИ #мобильная_разработка #GeoTalk #OpenAI #YandexSpeechKit 🚀
Вы когда-нибудь задумывались, как создать мобильное приложение без опыта программирования? 🤔 Оказывается, это вполне возможно! 🎉 Разработчик создал аудиогид для Санкт-Петербурга с помощью Flutter и ИИ, используя данные из Википедии и генерируя аудиорассказы с помощью OpenAI API и Yandex SpeechKit. 📚
Приложение GeoTalk было создано с помощью ИИ, но разработчик столкнулся с проблемами кодовой лапши и отсутствием фонового режима 🤦♂️. После рефакторинга и оптимизации приложение было опубликовано в RuStore 📈.
Разработчик планирует добавить полное покрытие России, бэкенд и многоязычность в будущих версиях 📊. Что вы думаете, стоит ли развивать проект дальше? 🤔 Поделитесь своими мыслями в комментариях! 💬
Читать подробную статью можно здесь 📄
#flutter #dart #flutterpulse #flutterpulsehabr #аудиогид #ИИ #мобильная_разработка #GeoTalk #OpenAI #YandexSpeechKit 🚀
Два года с Duit — история взросления фреймворка 🎉📈
Фреймворк Duit: два года развития 📊. Как проект перерос сам себя и стал экосистемой 🌐!
В новой версии Duit v4 произошел отказ от классов атрибутов в пользу модели данных на основе Map и extension types для повышения производительности и гибкости 🚀.
Новая версия фреймворка Duit: улучшена производительность, добавлены фрагменты и Remote Command API 📈. Подробности в нашей статье! 📄
Новая версия фреймворка Duit: улучшенная производительность, модульность и читаемый код 📊. Узнайте, что нового в фреймворке и как он эволюционирует 🤔.
Читать здесь
#flutter #dart #flutterpulse #flutterpulsehabr 🚀💻📈
Фреймворк Duit: два года развития 📊. Как проект перерос сам себя и стал экосистемой 🌐!
В новой версии Duit v4 произошел отказ от классов атрибутов в пользу модели данных на основе Map и extension types для повышения производительности и гибкости 🚀.
Новая версия фреймворка Duit: улучшена производительность, добавлены фрагменты и Remote Command API 📈. Подробности в нашей статье! 📄
Новая версия фреймворка Duit: улучшенная производительность, модульность и читаемый код 📊. Узнайте, что нового в фреймворке и как он эволюционирует 🤔.
Читать здесь
#flutter #dart #flutterpulse #flutterpulsehabr 🚀💻📈
Flutter Pulse
Flutter везде и даже в чайнике: доклад Юрия Петрова на CrossConf 🤖💻 Представляем вам интересное видео с конференции CrossConf, где Юрий Петров, руководитель отдела разработки в компании Friflex, рассказывает о возможностях Flutter и его применении на различных…
Flutter — везде (и даже в чайнике) 🍵📱. Часть 1.
Статья на хабре в текстовом виде 🚀
Появился форк Flutter для Sony и Yocto, а также новые порты для Авроры и Huawei 📈.
Узнайте больше о возможностях Flutter и его портах на разных платформах 🤔.
Flutter помогает создавать кроссплатформенные приложения и его архитектура обеспечивает легкий порт на новые системы 📊.
Читайте первую часть статьи в нашем журнале и узнайте все секреты Flutter! 📚
Читать здесь 📖
#flutter #dart #flutterpulse #flutterpulsehabr 🚀💻
Статья на хабре в текстовом виде 🚀
Появился форк Flutter для Sony и Yocto, а также новые порты для Авроры и Huawei 📈.
Узнайте больше о возможностях Flutter и его портах на разных платформах 🤔.
Flutter помогает создавать кроссплатформенные приложения и его архитектура обеспечивает легкий порт на новые системы 📊.
Читайте первую часть статьи в нашем журнале и узнайте все секреты Flutter! 📚
Читать здесь 📖
#flutter #dart #flutterpulse #flutterpulsehabr 🚀💻
👍1
Воспроизведение RTSP-потоков во Flutter: проблемы и решения
Вы когда-нибудь сталкивались с проблемой воспроизведения RTSP-потоков во Flutter? 🤔 Это может быть настоящей головной болью, поскольку штатные средства фреймворка не могут справиться с этой задачей. 😩 Но не волнуйтесь, есть решения! 🎉 Для этого необходимо использовать сторонние библиотеки, такие как flutter_vlc_player, fijkplayer и media_kit. Эти библиотеки позволяют работать с потоковым видео в реальном времени и дают возможность тонко настраивать параметры воспроизведения. 📹
Каждая из этих библиотек имеет свои особенности и достоинства. flutter_vlc_player основан на VLC и обеспечивает широкую поддержку сетевых форматов, но может иметь более высокую задержку и увеличивать вес приложения. 📊 fijkplayer использует FFmpeg и позволяет гибко настраивать параметры буферизации и декодирования, что особенно полезно при работе с низкой задержкой. 📈 media_kit - более современная кроссплатформенная библиотека, построенная на базе FFmpeg, с удобным API и хорошей поддержкой различных протоколов, включая RTSP. 📱
Для минимизации задержки воспроизведения можно использовать различные настройки, такие как настройки буферизации и декодирования, а также выбор транспортного протокола. 📊 Правильный выбор библиотеки и настройка параметров могут обеспечить быстрый старт потока, минимальную задержку и стабильную работу в практических сценариях. 📈 Статья описывает настройки плеера для оптимизации воспроизведения видео по протоколу RTSP. Для снижения задержки используется протокол UDP, который позволяет передавать данные без ожидания подтверждений, но может привести к небольшим потерям пакетов. 📊
Читать здесь: ссылка
#flutter #dart #flutterpulse #flutterpulsehabr #rtsp #videostreaming #flutterdevelopmentp
Вы когда-нибудь сталкивались с проблемой воспроизведения RTSP-потоков во Flutter? 🤔 Это может быть настоящей головной болью, поскольку штатные средства фреймворка не могут справиться с этой задачей. 😩 Но не волнуйтесь, есть решения! 🎉 Для этого необходимо использовать сторонние библиотеки, такие как flutter_vlc_player, fijkplayer и media_kit. Эти библиотеки позволяют работать с потоковым видео в реальном времени и дают возможность тонко настраивать параметры воспроизведения. 📹
Каждая из этих библиотек имеет свои особенности и достоинства. flutter_vlc_player основан на VLC и обеспечивает широкую поддержку сетевых форматов, но может иметь более высокую задержку и увеличивать вес приложения. 📊 fijkplayer использует FFmpeg и позволяет гибко настраивать параметры буферизации и декодирования, что особенно полезно при работе с низкой задержкой. 📈 media_kit - более современная кроссплатформенная библиотека, построенная на базе FFmpeg, с удобным API и хорошей поддержкой различных протоколов, включая RTSP. 📱
Для минимизации задержки воспроизведения можно использовать различные настройки, такие как настройки буферизации и декодирования, а также выбор транспортного протокола. 📊 Правильный выбор библиотеки и настройка параметров могут обеспечить быстрый старт потока, минимальную задержку и стабильную работу в практических сценариях. 📈 Статья описывает настройки плеера для оптимизации воспроизведения видео по протоколу RTSP. Для снижения задержки используется протокол UDP, который позволяет передавать данные без ожидания подтверждений, но может привести к небольшим потерям пакетов. 📊
Читать здесь: ссылка
#flutter #dart #flutterpulse #flutterpulsehabr #rtsp #videostreaming #flutterdevelopmentp
Управление Состоянием в Flutter: Простой и Эффективный Подход
При разработке приложений на Flutter одно из ключевых вопросов, с которыми сталкиваются разработчики, — это управление состоянием. Состояние приложения может включать в себя широкий спектр данных, от простых переменных до сложных объектов, и его изменение должно корректно отражаться в интерфейсе пользователя. Для решения этой задачи часто используются сторонние фреймворки, такие как BLoC, Riverpod или GetX, но во многих случаях они могут быть избыточными 🤔.
Вместо этого можно использовать встроенные инструменты Flutter, такие как ValueNotifier и Provider, для реализации надежного и предсказуемого управления состоянием 📈. ValueNotifier позволяет хранить одно значение и уведомлять подписчиков при его изменении, а ValueListenableProvider подписывается на ValueNotifier и перестраивает зависимые виджеты при каждом изменении значения. Это позволяет поддерживать интерфейс в актуальном состоянии без дополнительного кода 💻.
Статья также упоминает другие встроенные механизмы Flutter для управления состоянием, такие как setState() для управления локальным состоянием одного виджета, InheritedWidget для передачи данных вниз по дереву виджетов, и ChangeNotifier для управления сложным состоянием целого объекта с множеством полей 📊. Каждый из этих механизмов имеет свои преимущества и недостатки, и выбор того или иного подхода зависит от конкретных потребностей проекта 📝.
Читать здесь
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #мобильнаяразработка #управлениесостоянием
При разработке приложений на Flutter одно из ключевых вопросов, с которыми сталкиваются разработчики, — это управление состоянием. Состояние приложения может включать в себя широкий спектр данных, от простых переменных до сложных объектов, и его изменение должно корректно отражаться в интерфейсе пользователя. Для решения этой задачи часто используются сторонние фреймворки, такие как BLoC, Riverpod или GetX, но во многих случаях они могут быть избыточными 🤔.
Вместо этого можно использовать встроенные инструменты Flutter, такие как ValueNotifier и Provider, для реализации надежного и предсказуемого управления состоянием 📈. ValueNotifier позволяет хранить одно значение и уведомлять подписчиков при его изменении, а ValueListenableProvider подписывается на ValueNotifier и перестраивает зависимые виджеты при каждом изменении значения. Это позволяет поддерживать интерфейс в актуальном состоянии без дополнительного кода 💻.
Статья также упоминает другие встроенные механизмы Flutter для управления состоянием, такие как setState() для управления локальным состоянием одного виджета, InheritedWidget для передачи данных вниз по дереву виджетов, и ChangeNotifier для управления сложным состоянием целого объекта с множеством полей 📊. Каждый из этих механизмов имеет свои преимущества и недостатки, и выбор того или иного подхода зависит от конкретных потребностей проекта 📝.
Читать здесь
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #мобильнаяразработка #управлениесостоянием
Мой опыт перехода от React Native к Flutter: история успеха
🌟 Автор статьи, талантливый программист, решил создать мобильное приложение во время двухнедельного отпуска. Он выбрал между React Native и Flutter, двумя популярными фреймворками для разработки кроссплатформенных приложений. После изучения плюсов и минусов каждого фреймворка, автор первоначально выбрал React Native, но столкнулся с проблемами при установке последних версий всех зависимостей.
🤔 Из-за конфликтов между библиотеками он был вынужден удалить всё и начать сначала. В конце концов, он решил попробовать Flutter. Автор статьи делится своим опытом перехода от React Native к Flutter. Он отмечает, что хотя ему пришлось потратить время на изучение языка Dart, оно было быстро принято благодаря сходству с JavaScript.
📊 Автор сравнивает примеры кода для создания кнопки в React Native и Flutter, подчеркивая разницу в синтаксисе. Он также упоминает, что для Flutter существует меньше библиотек для линтинга, форматирования и поиска мертвого кода по сравнению с React Native. Несмотря на это, автор интересуется дальнейшим изучением Flutter и приглашает к обсуждению и советам.
📄 Читать здесь: ссылка
👉 FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #mobiledvelopment
🌟 Автор статьи, талантливый программист, решил создать мобильное приложение во время двухнедельного отпуска. Он выбрал между React Native и Flutter, двумя популярными фреймворками для разработки кроссплатформенных приложений. После изучения плюсов и минусов каждого фреймворка, автор первоначально выбрал React Native, но столкнулся с проблемами при установке последних версий всех зависимостей.
🤔 Из-за конфликтов между библиотеками он был вынужден удалить всё и начать сначала. В конце концов, он решил попробовать Flutter. Автор статьи делится своим опытом перехода от React Native к Flutter. Он отмечает, что хотя ему пришлось потратить время на изучение языка Dart, оно было быстро принято благодаря сходству с JavaScript.
📊 Автор сравнивает примеры кода для создания кнопки в React Native и Flutter, подчеркивая разницу в синтаксисе. Он также упоминает, что для Flutter существует меньше библиотек для линтинга, форматирования и поиска мертвого кода по сравнению с React Native. Несмотря на это, автор интересуется дальнейшим изучением Flutter и приглашает к обсуждению и советам.
📄 Читать здесь: ссылка
👉 FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #mobiledvelopment
❤2
Создание собственного RenderObject в Flutter: RenderBox
🌟 В мире Flutter создание кастомных виджетов может быть настоящим искусством. Иногда стандартные виджеты не могут удовлетворить все наши потребности, и нам приходится создавать что-то новое и уникальное. В этой статье мы поговорим о создании собственного RenderObject, в частности, RenderBox. 📦
🔍 Автор статьи объясняет, зачем может понадобиться создание собственного RenderObject, и описывает случаи, когда это может быть необходимо. Например, нестандартные раскладки, особая отрисовка и производительность могут быть причинами для создания кастомного RenderObject. Кроме того, автор кратко описывает Rendering Pipeline Flutter, который включает в себя виджеты, элементы и рендер-объекты. 📈
📝 Фокусируясь на создании собственного RenderBox, автор описывает методы, которые необходимо переопределить, такие как performLayout, paint и hitTest. Затем он создает пример простого прогресс-бара, который будет рисоваться в виде цветной заполненной полоски, и демонстрирует, как можно создать собственный RenderBox с необходимыми полями и методами. 🎨
📊 В статье обсуждается создание кастомных виджетов в Flutter с помощью RenderObject. Приведен пример создания прогресс-бара, который реагирует на изменения значения прогресса. Также обсуждаются способы расширения возможностей кастомных виджетов, такие как обработка кликов, добавление нескольких детей, оптимизация и дебаг. 🚀
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #renderobject #customwidgets
🌟 В мире Flutter создание кастомных виджетов может быть настоящим искусством. Иногда стандартные виджеты не могут удовлетворить все наши потребности, и нам приходится создавать что-то новое и уникальное. В этой статье мы поговорим о создании собственного RenderObject, в частности, RenderBox. 📦
🔍 Автор статьи объясняет, зачем может понадобиться создание собственного RenderObject, и описывает случаи, когда это может быть необходимо. Например, нестандартные раскладки, особая отрисовка и производительность могут быть причинами для создания кастомного RenderObject. Кроме того, автор кратко описывает Rendering Pipeline Flutter, который включает в себя виджеты, элементы и рендер-объекты. 📈
📝 Фокусируясь на создании собственного RenderBox, автор описывает методы, которые необходимо переопределить, такие как performLayout, paint и hitTest. Затем он создает пример простого прогресс-бара, который будет рисоваться в виде цветной заполненной полоски, и демонстрирует, как можно создать собственный RenderBox с необходимыми полями и методами. 🎨
📊 В статье обсуждается создание кастомных виджетов в Flutter с помощью RenderObject. Приведен пример создания прогресс-бара, который реагирует на изменения значения прогресса. Также обсуждаются способы расширения возможностей кастомных виджетов, такие как обработка кликов, добавление нескольких детей, оптимизация и дебаг. 🚀
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #renderobject #customwidgets
👍2
Асинхронное программирование в Dart и его применение во Flutter-приложениях
Асинхронное программирование - это мощный инструмент, который позволяет выполнять долгие операции без блокировки основного потока и "замораживания" интерфейса 📊. В статье мы рассмотрим ключевые инструменты асинхронности Dart: Future, async/await и Stream 🌟.
Future представляет собой отложенное вычисление, которое завершится либо успешным результатом, либо ошибкой 🤔. Async/await - это синтаксический сахар, который делает асинхронный код более читаемым и "линейным" 📈. Stream предоставляет последовательность значений (событий), поступающих со временем 📊.
Также статья затрагивает тему многопоточности с помощью Isolates 🌐. Isolates - это механизм многопоточности в Dart, который позволяет выполнять код параллельно в разных потоках 🔄. Изоляты не разделяют память, а взаимодействие происходит только через передачу сообщений 📝.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #асинхронноепрограммирование #многопоточность #Isolates #Future #asyncawait #Stream
Асинхронное программирование - это мощный инструмент, который позволяет выполнять долгие операции без блокировки основного потока и "замораживания" интерфейса 📊. В статье мы рассмотрим ключевые инструменты асинхронности Dart: Future, async/await и Stream 🌟.
Future представляет собой отложенное вычисление, которое завершится либо успешным результатом, либо ошибкой 🤔. Async/await - это синтаксический сахар, который делает асинхронный код более читаемым и "линейным" 📈. Stream предоставляет последовательность значений (событий), поступающих со временем 📊.
Также статья затрагивает тему многопоточности с помощью Isolates 🌐. Isolates - это механизм многопоточности в Dart, который позволяет выполнять код параллельно в разных потоках 🔄. Изоляты не разделяют память, а взаимодействие происходит только через передачу сообщений 📝.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #асинхронноепрограммирование #многопоточность #Isolates #Future #asyncawait #Stream
👍1
Использование 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
Вы когда-нибудь задумывались, как вызвать родные 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
Разработка проектов на Flutter с возможностью легкого портирования на другие платформы
🌟 В статье Юра Петров, руководитель отдела разработки компании Friflex, делится своим опытом и рекомендациями по созданию проектов на Flutter, которые можно легко адаптировать для различных платформ, включая Android, iOS, Linux, MacOS, Web, Windows и другие.
Для достижения этой цели автор предлагает выполнить несколько шагов:
1. Анализ подключаемых пакетов: перед началом проекта необходимо проанализировать используемые пакеты и плагины, чтобы убедиться, что они поддерживают все необходимые платформы 📦.
2. Создание папки app_service: создать глобальную папку
3. Создание реализаций для Base: создать базовые реализации плагинов, которые будут использоваться на всех платформах 💻.
Автор также подчеркивает важность создания интерфейсов для плагинов, чтобы можно было легко заменить одну реализацию на другую, не меняя основной код проекта 🔄. В качестве примера автор использует плагин flutter_secure_storage и показывает, как создать интерфейс и реализацию для него 🔒.
В целом, статья предоставляет полезные рекомендации и советы по созданию проектов на Flutter, которые можно легко портировать на другие платформы, и подчеркивает важность тщательного планирования и анализа на этапе начала проекта 📊.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #mobiledevelopment #crossplatformdevelopment
🌟 В статье Юра Петров, руководитель отдела разработки компании 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
В последнее время разработка мобильных приложений стала еще более сложной и требовательной 📈. Одним из способов упростить этот процесс является использование 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 на macOS
При создании приложения Quickgif для macOS с помощью Flutter, автор столкнулся с серьезной проблемой - резким увеличением потребления памяти при прокрутке списка GIF-картинок 📈. Это было вызвано тем, что изображения не выгружались из памяти после того, как они были пролистаны. Автор попытался решить эту проблему, используя режим профилирования Flutter и ограничив кэширование изображений, но проблема осталась 🤔.
Автор также использовал виджет CachedNetworkImage, но он не помог решить проблему полностью. Тогда он обратился к виджету ExtendedImage.network, который поддерживает кэширование и освобождение памяти. Это помогло уменьшить потребление памяти, но оно всё равно было слишком высоким 📊. Автор также обнаружил, что стандартные виджеты ListView и Image в Flutter могут вызывать проблемы с памятью.
Для решения проблемы автор решил использовать принудительное завершение движка Flutter и его плагинов, когда приложение находится в фоне. Он изучил, как работает запуск приложений Flutter на macOS, и обнаружил, что можно создать новый NSWindow и добавить FlutterViewController только после того, как пользователь нажмёт на иконку в строке меню. Автор также использовал пример проекта на GitHub, который показывает, как создать приложение для строки меню с Flutter.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #macOS #проблемыспамятью
При создании приложения Quickgif для macOS с помощью Flutter, автор столкнулся с серьезной проблемой - резким увеличением потребления памяти при прокрутке списка GIF-картинок 📈. Это было вызвано тем, что изображения не выгружались из памяти после того, как они были пролистаны. Автор попытался решить эту проблему, используя режим профилирования Flutter и ограничив кэширование изображений, но проблема осталась 🤔.
Автор также использовал виджет CachedNetworkImage, но он не помог решить проблему полностью. Тогда он обратился к виджету ExtendedImage.network, который поддерживает кэширование и освобождение памяти. Это помогло уменьшить потребление памяти, но оно всё равно было слишком высоким 📊. Автор также обнаружил, что стандартные виджеты ListView и Image в Flutter могут вызывать проблемы с памятью.
Для решения проблемы автор решил использовать принудительное завершение движка Flutter и его плагинов, когда приложение находится в фоне. Он изучил, как работает запуск приложений Flutter на macOS, и обнаружил, что можно создать новый NSWindow и добавить FlutterViewController только после того, как пользователь нажмёт на иконку в строке меню. Автор также использовал пример проекта на GitHub, который показывает, как создать приложение для строки меню с Flutter.
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #macOS #проблемыспамятью
👍1
Улучшение читаемости кода: советы по выбору имен
📚 Статья, которую я прочитал, посвящена очень важному аспекту программирования - читаемости кода. Автор предлагает несколько ценных советов, как улучшить читаемость кода за счет правильного выбора имен для переменных, функций и классов. Это действительно интересно! 🤔
📝 Первый совет - ставить самое описывающее результат существительное в конец имени, чтобы оно наиболее точно описывало, чем является объект. Например, вместо name использовать userName. Это действительно помогает сделать код более понятным! 💡
📊 Другие советы включают в себя написание имен так, чтобы код читался как предложение, избегание аббревиатур и неясных названий, использование "положительных" имен для булевых свойств и избегание get префикса в функциях с возвращаемыми значениями. Все эти советы направлены на то, чтобы сделать код более читаемым и понятным для других разработчиков. 📈
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #читаемостькода #программирование
📚 Статья, которую я прочитал, посвящена очень важному аспекту программирования - читаемости кода. Автор предлагает несколько ценных советов, как улучшить читаемость кода за счет правильного выбора имен для переменных, функций и классов. Это действительно интересно! 🤔
📝 Первый совет - ставить самое описывающее результат существительное в конец имени, чтобы оно наиболее точно описывало, чем является объект. Например, вместо name использовать userName. Это действительно помогает сделать код более понятным! 💡
📊 Другие советы включают в себя написание имен так, чтобы код читался как предложение, избегание аббревиатур и неясных названий, использование "положительных" имен для булевых свойств и избегание get префикса в функциях с возвращаемыми значениями. Все эти советы направлены на то, чтобы сделать код более читаемым и понятным для других разработчиков. 📈
Читать здесь: ссылка
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #flutterpulsehabr #читаемостькода #программирование
👍1
Новая библиотека 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