TGViewer
Flutter. Много Flutter. Много @flutter_amiga · 2.96K subscribers
Post #238 3.08K
Home Widget для Android

Hola, Amigos! На связи Вова Зевеке, Flutter dev Amiga. Сегодня расскажем, как сделать виджет HomeScreen с помощью пакета home_widget.

Для приложения на Android создадим макет виджета внутри android/app/src/main/res/layout. Нажимаем правой кнопкой мыши на папку android, выбираем Flutter/Open Android module in Android Studio. В новом окне нажимаем правой кнопкой мыши на app, выбираем New/Widget.

Сгенерируется несколько файлов для редактирования. Один из них — файл конфигурации виджета (расположен в android/app/src/main/res/xml). Ещё один файл – сам макет виджета (расположен в android/app/src/main/res/layout).

Обратите особое внимание в коде ниже на строчку android:id="@+id/firstString". Тут мы выдали тексту id-шник, который нам понадобится позже.

</RelativeLayout
<TextView
android:id="@+id/firstString"
… />
</RelativeLayout>


Также в AndroidManifest.xml у нас появился ресивер.

<receiver
android:name=".HomeWidgetTextTable"…
</receiver>


Нам осталось настроить передачу данных между нашим Flutter-приложением и HomeWidget. Для этого в файле android\app\src\main\java\com\example\sandbox\HomeWidgetTextTable.kt импортируем плагин и пишем код обновления HomeWidget.

class HomeWidgetTextTable : AppWidgetProvider() {
override fun onUpdate(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetIds: IntArray
) {
for (appWidgetId in appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId)
}
}
}

internal fun updateAppWidget(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetId: Int
) {
val widgetData = HomeWidgetPlugin.getData(context)
val firstString = widgetData.getString("firstString", null)
val views = RemoteViews(context.packageName, R.layout.home_widget_text_table)
views.setTextViewText(R.id.firstString, firstString)

appWidgetManager.updateAppWidget(appWidgetId, views)
}


Теперь создаем TextField и набираем текст, отображаемый в HomeWidget.

  @override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
HomeWidget.initiallyLaunchedFromHomeWidget().then((value) async {
updateUI();
});
});
super.initState();
}

void updateUI() {
var text = controller.text;
HomeWidget.saveWidgetData<String>('firstString', text);
HomeWidget.updateWidget(
//name: 'TextTable',
androidName: 'HomeWidgetTextTable',
iOSName: 'HomeWidgetTextTable',
);
}

@override
Widget build(BuildContext context) {
return Column(
children: [
TextField(
controller: controller,
style: const TextStyle(
color: Colors.white,
),
onChanged: (value) {
updateUI();
},
),
const SizedBox(height: 16),
],
);
}
}


Как мы видим, созданный нами метод updateUI отвечает за передачу новых данных HomeWidget.

Ставьте реакцию, если было полезно!
  • 👍 37
  • ❤ 8
  • 💘 3
More from @flutter_amiga
  1. Sep 9, 2026AI BOOST’26: выручка падает — что делают крупные digital-агентства и при чем здесь AI 22–2…
  2. Aug 18, 2026Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Сегодня посмотрим на чек-…
  3. Aug 13, 2026Hola, Amigos! Сегодня вышли Flutter 3.47 и Dart 3.13. Давайте вместе разберемся, что в них…
  4. Jul 31, 2026Дайджест июля Hola, Amigos! Собрали в одну подборку все полезные посты июля, которые вы мо…
  5. Jul 28, 2026Hola, Amigos! Сегодня посмотрим на один пакет, который может быть полезен в разработке - p…
  6. Jul 24, 2026Hola, Amigos! Сегодня мы вводим новую рубрику - обзоры правил для статического анализатора…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →