调用 WorkManager 后 Flutter 应用程序崩溃

问题描述 投票:0回答:2

当我在 Flutter 应用程序中初始化工作管理器时,它崩溃了。

ERROR BEING SHOWN

工作管理器代码

Workmanager().initialize(
                        callbackDispatcher, 
                        isInDebugMode: true 
                      );

                     Workmanager().registerPeriodicTask(
                        "2", 
                        "simplePeriodicTask", 
                        frequency: Duration(minutes: 15),
                      );

                      //callbackDispatcher
                       void callbackDispatcher() {
                        Workmanager().executeTask((task, inputData) {
                          log("Native called background task"); //simpleTask will be emitted here.
                          return Future.value(true);
                        });
                      }

       
flutter background localnotification flutter-workmanager
2个回答
1
投票

您需要等待workmanager初始化。应该是;

    void main() async {
  WidgetsFlutterBinding.ensureInitialized();
     await Workmanager().initialize(callbackDispatcher, isInDebugMode: true);
    await Workmanager().registerPeriodicTask("5",
     simplePeriodicTask,
        existingWorkPolicy: ExistingWorkPolicy.replace,
        frequency: Duration(minutes: 15), //when should it check the link
        initialDelay:
            Duration(seconds: 10), //duration before showing the notification
        constraints: Constraints(
          networkType: NetworkType.connected,
        ));
  }

void callbackDispatcher() {
    Workmanager().executeTask((task, inputData) async {
        log("Native called background task"); 
       return Future.value(true);
                        });

0
投票

我知道可能有很多原因,包括 Kotlin 版本兼容性和 Flutter 版本兼容性,但这对我有用。

在应用程序的另一个区域,我调用了

await Workmanager().cancelByUniqueName('uniqueName');

出于某种原因,只需从应用程序中删除该行即可解决问题。我尝试将其作为操作按钮重新定位到不同的页面,甚至从 onDispose 覆盖函数进行调用,但由于某种原因,只要代码中存在此行,它就会不断崩溃。

所以我只是将其完全删除,并使用服务器 API 调用来确保在每个打开的应用程序上初始化 WorkManager 时不会创建新的周期性实例。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.