2014-12-28 45 views
0

我試圖使用本地存儲來存儲任務。本地存儲:添加地圖<String,String>到存儲列表

這是我的函數:

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)); 
} 

然而這失敗,並出現以下錯誤信息:

例外:空對象沒有一個方法「添加」。

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

我在做什麼錯?

在此先感謝。

回答

3

問題是您的最後一行編碼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); 
+0

謝謝你,我是個白癡。不幸的是,這不是我第一次偶然發現這樣的事情。 – martin

+0

如果這能解決您的問題,您能接受答案嗎? –