我正在使用Awesome notifications来显示我的应用程序中的通知。在通知中,我有一个操作按钮,当按下它时,应用程序应该使用共享偏好从手机内存读取和写入一些简单的数据。这应该在后台发生,而不需要在前台打开应用程序。
我尝试了以下代码:
@pragma("vm:entry-point")
static Future<void> onActionReceivedMethod(ReceivedAction action) async {
print('It works');
print(action.toMap());
final SharedPreferences prefs = await SharedPreferences.getInstance();
List<PinnedFolder> pinnedList = [];
try {
final String? pinnedString = prefs.getString('pinnedKey');
if (pinnedString != null) {
pinnedList = PinnedFolder.decode(pinnedString);
print('PinnedList got from memory, length: ${pinnedList.first.pinnedList.length}');
}
} catch (error) {
debugPrint('Error: couldnt get pinned folders: $error');
}
"It works"和'action.toMap()'得到打印,但我无法从共享偏好中获得数据。是这样吗,我不能在@pragma("vm:entry-point"函数中使用添加的包?修复代码的最佳方法是什么?动作不需要在按钮按下后立即发生,它也可以在下次应用程序处于前台时发生,但这样按钮动作信息仍然可用。
我找到了使用flutter_secure_storage包的解决方案。
const storage = FlutterSecureStorage(); await storage.write(key: my_key, value: my_value);
似乎只有几个包在@pragma("vm:entry-point"函数中工作,但这是其中之一。我实现了它,以便每次应用程序打开时,它都会在应用程序启动之前从安全存储中获取并处理数据。