Добавить объявление

Создаем виджеты для Android и iOS во Flutter-приложении

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

Что такое виджеты:


Виджеты - это компонент интерфейса на главном экране устройства. Он показывает информацию или предоставляет доступ к действиям без запуска приложения.

Виджеты бывают разных типов:

    • Информационные виджеты показывают актуальные данные - погоду, курс валют, количество шагов. Они обновляются по расписанию или при изменении данных.

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

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

  • Гибридные виджеты комбинируют функции разных типов. Например, музыкальный виджет одновременно показывает текущий трек (информационная часть) и предоставляет кнопки управления (управляющая часть).

Нативные инструменты:


Для каждой платформы используется свой набор инструментов.

На Android виджеты можно создавать двумя способами: через XML или с помощью Jetpack Glance. Glance - более современное решение на основе Compose. Оно позволяет писать декларативный код, не заморачиваясь с XML-макетами и управлением состояниями. Glance поддерживает большинство компонентов Compose: текст, кнопки, контейнеры.

На iOS виджеты реализуются через WidgetKit, доступный с iOS 14. Они создаются на SwiftUI и хорошо интегрируются в экосистему Apple. WidgetKit работает с TimelineProvider, который отвечает за данные и расписание обновлений и Entry - моделью данных для виджета.

Библиотека home_widget:


Для связи Flutter-приложения с нативными виджетами используется библиотека home_widget. Она предоставляет удобные методы для сохранения данных и обновления виджетов.

Основные методы:

  • saveWidgetData - сохраняет данные в хранилище виджета.

  • updateWidget - обновляет виджет на экране.

  • getWidgetData - читает данные из виджета обратно в Flutter.


Пример использования:

Future _sendAndUpdate(int? value) async {
await HomeWidget.saveWidgetData(_countKey, value);
await HomeWidget.updateWidget(
androidName: 'CounterGlanceWidgetReceiver',
iOSName: 'CounterWidget'
);
}


Сначала данные сохраняются через saveWidgetData, затем вызывается updateWidget с указанием имени виджета для каждой платформы.

Как это работает на практике:


Процесс выглядит так. Пользователь совершает действие в приложении. Вы сохраняете данные через saveWidgetData. Затем вызываете updateWidget. Система обновляет виджеты на домашнем экране.

Для чтения данных обратно в приложение используется getWidgetData. Это полезно, когда виджет изменил состояние, и приложение должно об этом узнать.

Важный нюанс: на Android и iOS механизмы обновления отличаются. На Android обновление происходит через вызов updateWidget. На iOS - через TimelineProvider, который определяет расписание обновлений. Библиотека home_widget абстрагирует эти различия, но понимание нативных механизмов помогает избежать ошибок.

Вывод:


Виджеты - это полезный способ повысить вовлеченность пользователей. Во Flutter нет встроенной поддержки виджетов, но есть надежный путь через нативные инструменты. На Android - Glance (или классические XML-виджеты). На iOS - WidgetKit.

Библиотека home_widget связывает Flutter-код с нативной реализацией, позволяя сохранять данные и обновлять виджеты из Dart. Это не самый простой путь, но он рабочий и хорошо документированный.

Если вы хотите добавить виджеты в свое Flutter-приложение, начните с изучения Glance для Android и WidgetKit для iOS. А библиотека home_widget поможет соединить все воедино.
14.07.2026 67 603