【问题标题】:Not getting updated value from SharedPreferences未从 SharedPreferences 获取更新值
【发布时间】:2022-01-23 10:54:40
【问题描述】:

我的颤振应用程序正在使用电话包在前台和后台收听短信。在注册接收消息时,我使用了两种方法(一种用于前台,一种用于后台,根据电话包的要求,如下所示:

telephony.listenIncomingSms(onNewMessage: onMessage, onBackgroundMessage: onBackgroundMessage);

但是在这两个方法内部都调用了一个通用方法,该方法将最近收到的 SMS 保存到共享首选项中,如下所示:

onMessage(SmsMessage message) async {
 ...
 saveLastMsg(message);
}
onBackgroundMessage(SmsMessage message) async {
 ...
 saveLastMsg(message);
}
saveLastMsg(SmsMessage message) async{
  SharedPreferences sp = await SharedPreferences.getInstance();
  sp.setString("lastsmsbody", message.body??'');
}

在 App UI 中,我像这样获取 lastsmsbody:

SharedPreferences sp = await SharedPreferences.getInstance();
String body = sp.getString("lastsmsbody")??'';

我在 UI 中显示这个值。当应用程序在前台运行时,这工作正常。屏幕上的数据会在收到消息时更新。

问题是当应用程序在后台推送时。从日志中,我看到它仍然收到消息,并且仍然将其保存在首选项中。但是当我将应用程序带回前台时,它无法获取应用程序在 bg 中时保存的最新消息。 sp.getString("lastsmsbody") 获取应用在前台时保存的旧消息。

我认为当应用程序处于 fg 和 bg 时,偏好可能会有所不同。但是,如果我终止应用程序并重新启动,sp.getString("lastsmsbody") 会返回应用程序在 bg 中时保存的最新消息正确。

谁能告诉我这是怎么回事?

【问题讨论】:

  • 你需要等待设置的字符串await sp.setString("lastsmsbody", message.body??'');
  • 不幸的是,这没有帮助。

标签: flutter sharedpreferences flutter-sharedpreference


【解决方案1】:

您可能需要SharedPreferences.reload

final prefs = await SharedPreferences.getInstance();
await prefs.reload(); 

【讨论】:

  • 添加 await prefs.reload();把它搞砸了。添加后,即使应用程序在前台运行,它也会获得旧值!
  • 对我来说有效!
猜你喜欢
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多