gpt4 book ai didi

Flutter:无法使用 workmanager 初始化共享首选项

转载 作者:行者123 更新时间:2023-12-05 04:35:05 28 4
gpt4 key购买 nike

正如标题所说,我使用了 2 个插件,workmanagershared preferences . Workmanager 部分按预期工作,但我从共享首选项中收到错误。

这是我的代码的一部分,与 workmanager 插件有关:

void callbackDispatcher() {
Workmanager().executeTask((taskName, inputData) async {
switch (taskName) {
case 'midnight_task':
try {
await SharedPrefsHelper().initSharedPrefsInstance(); //THIS line causes the error
await PedometerService.midnightTask();
print('workmanager_service.dart: looks like midnightTask got successfully executed :D');
} catch (e) {
print('workmanager_service.dart midnightTask error: $e');
}
break;
default:
print('workmanager_service.dart callbackDispatcher(): unhandled taskName: $taskName');
}
return Future.value(true); // "The task is successful"
});
}

这是我处理共享偏好的代码的一部分:

SharedPreferences _prefs;

Future<void> initSharedPrefsInstance() async {
print('initSharedPrefsInstance()');
if (_prefs == null) _prefs = await SharedPreferences.getInstance(); //the error gets thrown here
print('shared prefs initialized()');
}


//this will NOT persist data
Future<void> initSharedPrefsInstanceMock() async {
print('initSharedPrefsInstanceMock()');
SharedPreferences.setMockInitialValues({}); //<- this line: only difference to above method
if (_prefs == null) _prefs = await SharedPreferences.getInstance();
print('initSharedPrefsInstanceMock: shared prefs initialized()');
}

在注释指定的行抛出以下错误:workmanager_service.dart midnightTask 错误:MissingPluginException(未在 channel plugins.flutter.io/shared_preferences 上找到方法 getAll 的实现)

我试过了 this from another stackoverflow question (前面代码示例中的第二种方法)然后它不会抛出错误,但正如那个人所说,它不会持久化数据所以它没用。我还尝试了他建议的其他事情(编辑 /android/app/build.gradle),以及其他人建议的许多其他事情,但对我没有任何帮助。

有谁知道我能做些什么来解决这个问题?

最佳答案

这是由于 shared_preferences 的实现发生了变化,参见 this issue供讨论。

现在你可以 manually run the plugin's Dart registration在隔离中使用它之前:

if (Platform.isAndroid) SharedPreferencesAndroid.registerWith();
if (Platform.isIOS) SharedPreferencesIOS.registerWith();

您需要添加对 shared_preferences_androidshared_preferences_ios 的直接依赖才能使用这些类。

关于Flutter:无法使用 workmanager 初始化共享首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71115025/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com