dart - 本地存储:将Map <String,String>添加到存储的列表中

标签 dart local-storage

我正在尝试使用本地存储来存储任务。

这是我的功能:

void saveTask(_) {
    String sum = querySelector('#tsummary').value;
    String con = querySelector('#tcontent').value;
    String sched = querySelector('#dateinp').value;
    String timestamp = new DateTime.now().millisecondsSinceEpoch.toString();
    Storage localStorage = window.localStorage;
    var dt = localStorage['darttasks'];

    if (dt == null) {
    localStorage['darttasks'] = JSON.encode([]);
    }
    var task = {"summary":sum, "content" :con,"scheduled":sched, "id":timestamp};
    localStorage['darttasks'] = JSON.encode(JSON.decode(localStorage['darttasks']).add(task));
}

但是,此操作失败,并显示以下错误消息:

异常(exception):空对象没有方法'add'。

NoSuchMethodError: method not found: 'add' Receiver: null Arguments: [Instance of '_LinkedHashMap']



我究竟做错了什么?

提前致谢。

最佳答案

问题是您的最后几行编码void。列表的.add函数返回void。这是更新的版本:

final String STORAGE_KEY = 'darttasks';
List tasks = [];
if(window.localStorage.containsKey(STORAGE_KEY)) {
  tasks = JSON.decode(window.localStorage[STORAGE_KEY]);

  // Decoding Error, should not happen
  if(tasks == null) {
    tasks = [];
  }
}

var task = {
  "summary": sum,
  "content": con,
  "scheduled": sched,
  "id": timestamp
};
tasks.add(task);
window.localStorage[STORAGE_KEY] = JSON.encode(tasks);

关于dart - 本地存储:将Map <String,String>添加到存储的列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27675481/

相关文章:

dart - 将 Action 分配给按钮时的“NoSuchCapabilityError: no capability to invoke the method”

javascript - 如何显示我的 JavaScript 计数器?

javascript - 如何正确创建新的Producer?

javascript - 从远程服务器清除本地存储数据

html - localStorage.prototype 为空

android - 带代理的 Flutter WebView

flutter - _CastError(类型 'Null' 在类型转换中不是类型 'List<int>' 的子类型)当在 Listview 中有网络图像时

flutter - 如何防止 ListView 在底部导航栏下溢出?

通过 map 函数将 Dart 映射到另一个 map

javascript - 尝试在更新页面后动态更改所选属性