From 8901532febeb34fec29d9e0a92826024fb27d980 Mon Sep 17 00:00:00 2001 From: Alexander Dischberg Date: Sun, 25 Sep 2022 02:41:13 +0800 Subject: [PATCH] docs: update doc --- app_widget/README.md | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/app_widget/README.md b/app_widget/README.md index 94234eb..fbbb5f4 100644 --- a/app_widget/README.md +++ b/app_widget/README.md @@ -323,8 +323,10 @@ await appWidgetPlugin.getWidgetIds( - To make sure this bug doesn't affect your widget udpate, you'll need to register another task that longer maybe than your update widget task, and then cancel it inside the callback. +- to avoid this use workmanager periodicTask instead ```dart +// Using workmanager chained OneOffTask @pragma('vm:entry-point') void onConfigureWidget(int widgetId) async { final sharedPrefs = await SharedPreferences.getInstance(); @@ -337,7 +339,9 @@ void onConfigureWidget(int widgetId) async { existingWorkPolicy: ExistingWorkPolicy.keep, initialDelay: const Duration(minutes: 5), ); - // register a dumm task + // register a dummy task + // dummy task is required to fix flickering bug + // https://stackoverflow.com/questions/71603702/in-android-glance-widgets-are-flickering-during-every-update-even-if-there-i await Workmanager().registerOneOffTask( 'DUMMY_TASK', 'dummyTask', @@ -347,6 +351,30 @@ void onConfigureWidget(int widgetId) async { ); } +// Using workmanager PeriodicTask +@pragma('vm:entry-point') +void onConfigureWidget(int widgetId) async { + final sharedPrefs = await SharedPreferences.getInstance(); + await sharedPrefs.setInt('widget_id', widgetId); + // register task druing configure event in onConfigure callback + await Workmanager().registerPeriodicTask( + '$kUpdateWidgetTask-$widgetId', + kUpdateWidgetTask, + tag: kUpdateWidgetTag, + frequency: kWidgetUpdateIntervalDuration, + existingWorkPolicy: ExistingWorkPolicy.replace, + backoffPolicy: BackoffPolicy.exponential, + backoffPolicyDelay: const Duration( + seconds: 10, + ), + initialDelay: const Duration(minutes: kWidgetUpdateIntervalInMinutes), + inputData: { + 'widgetId': widgetId, + 'payload': payload, + }, + ); +} + // in callbackDipatcher or some other file final worksMapper = {'updateWidget': updateWidgetWorker};