【问题标题】:I am trying to save the notification title and body using shared preference but i am unable to我正在尝试使用共享首选项保存通知标题和正文,但我无法
【发布时间】:2022-01-04 07:50:05
【问题描述】:

#我正在尝试在本地保存通知标题和正文并在我的应用程序中获取标题和正文以在列表视图中显示所有发送的通知,但我无法

#这是我在 initstate 内的 main.dart 中运行此代码的代码,而 detail.add 是我手动创建的列表,但我收到错误消息 102:45: Error: This expression has type 'void ' 并且不能使用.prefs.setString('notificationData', setData);当我尝试 setString 这是我得到的错误

List<String?> detail = [];
FirebaseMessaging.onMessage.listen((message) async{
      if(message.notification!=null){
        // print(message.notification!.body);
        // print(message.notification!.title);
        final title = message.notification?.title;
        final body = message.notification?.body;
         SharedPreferences prefs = await SharedPreferences.getInstance();
         final String notificationData = json.encode({"title":title,"body":body});
         final setData =  detail.add(notificationData);
        prefs.setString('notificationData', setData);
        print(notificationData);
        print(setData);
      }

【问题讨论】:

  • 您正在调用 setString 并在参数中提供字符串列表

标签: flutter api dart-null-safety


【解决方案1】:

detail.add(notificationData) 函数不返回任何内容 (void) 并且只添加到现有数组中,因此您的 setData 变量为空,但您可以使用原始更新后的 detail 数组,如下所示:

FirebaseMessaging.onMessage.listen((message) async{
  if(message.notification!=null){
    // print(message.notification!.body);
    // print(message.notification!.title);
    final title = message.notification?.title;
    final body = message.notification?.body;
    SharedPreferences prefs = await SharedPreferences.getInstance();
    final String notificationData = json.encode({"title":title,"body":body});
    detail.add(notificationData);
    prefs.setString('notificationData', detail.toString());
    print(notificationData);
    print(detail);
  }
//...
});

【讨论】:

  • Thnaks 它工作但现在我正在尝试 getString 并将其显示在 listTile 或 listview 中,就像这样 Future getNotification() async { SharedPreferences prefs = await SharedPreferences.getInstance(); if(prefs.containsKey("notificationData")){ prefs.getString('notificationData'); }else{ print("没有通知显示"); }
  • 但我没有得到数据,很抱歉遇到麻烦
  • 但是当我详细保存通知时,新通知会替换旧通知
  • "但是当我详细保存通知时,新通知会替换旧通知" => 您需要先将 detail 数组的值分配给已存储在存储中的通知,然后添加到它。它正在被替换,因为您首先将其初始化为一个空数组
  • 完全没有问题:)。如果您想使用正确的代码格式将新问题添加到问题中,以便我可以添加到我的答案中。
猜你喜欢
  • 2012-11-25
  • 2022-01-06
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
相关资源
最近更新 更多