【问题标题】:Workmanager and get_it for notification purposesWorkmanager 和 get_it 用于通知目的
【发布时间】:2021-08-15 07:13:57
【问题描述】:

我们正在使用 get_it^7.2.0 和 workmanager^0.4.1 进行依赖注入 (get_it) 和后台任务 (workmanager) 的调度。

想要在workmanager.executeTask()函数中注册类后出现问题。

final sl = GetIt.instance;
...
sl.registerLazySingleton<BackgroundRunner>(() => BackgroundRunnerImpl(tasks: sl()));
...

注册后,这一切都发生在异步函数中,我想要通过调用对象:

void initializeBackgroundTask() {
     Workmanager().initialize(callbackDispatcher, isInDebugMode: false);
     Workmanager().registerPeriodicTask("1", "simplePeriodicTask",
         frequency: Duration(minutes: 45), initialDelay: Duration(seconds: 10));
}

void callbackDispatcher() {
     BackgroundRunner backgroundRunner = di.sl.get<BackgroundRunner>();
     Workmanager().executeTask((task, inputData) {
     // Does Workload
     backgroundRunner.runBackground();
     return Future.value(true);
     });
}

每当 Workmanager 调用 callbackDispatcher 时,我都会收到以下异常。

E/flutter ( 6388): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: 'package:get_it/get_it_impl.dart': Failed assertion: line 372 pos 7: 'instanceFactory != null': Object/factory with type BackgroundRunner is not registered inside GetIt. E/flutter ( 6388): (Did you accidentally do GetIt sl=GetIt.instance(); instead of GetIt sl=GetIt.instance; E/flutter ( 6388): Did you forget to register it?)

我在哪里犯错了?

【问题讨论】:

    标签: flutter


    【解决方案1】:

    您必须在后台重新注册它们才能使用它们!

    void callbackDispatcher() {
      Workmanager().executeTask((task, inputData) async {
        // Does Workload
        await Firebase.initializeApp();
        await di.init();
        BackgroundRunner backgroundRunner = di.sl.get<BackgroundRunner>();
        backgroundRunner.runBackground();
        return Future.value(true);
      });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 2020-10-16
      相关资源
      最近更新 更多