![](/img/trans.png)
[英]Flutter - how to store lists of Strings: (GetStorage or Shared Preferences). using android
[英]How can I store and safe a List of Maps in Flutter using Shared Preferences? (Flutter, SharedPreferences)
我正在嘗試在我的 Flutter 應用程序中安全並加載對話。 為此,我將每條消息推送到地圖列表:
List<Map> messages = [];
[...]
messages.insert(0, {"data": 1, "message": "Hello, how are you?"}); //Message from user 1
messages.insert(0, {"data": 2, "message": "I am fine."}); //Message from user 2
現在,如何在本地設備上保護這些數據(消息列表)並在啟動應用程序時加載它?
我已經嘗試過共享首選項,但它只允許我存儲字符串類型的列表,而不是 Map。
我可以將 Map 類型的列表轉換為字符串類型的列表然后使用它嗎?
編輯 ! SharedPreferences僅存儲以下類型的數據:
在這種典型情況下,您將使用 SharedPreferences 來存儲 String 類型。 要實現這一點,您需要從您的數據中生成一個字符串類型。因此您將轉換一個列表 => 字符串。 為此,您需要添加一段非常短的代碼來生成字符串。
List<Map> myData = [map2,map1];
jsonEncode(myData);
這個想法是將您的列表轉換為 Json 數據,以便您可以將其存儲為字符串並在需要時對其進行解碼。
我找到了這篇文章: 如何將 map 轉換為字符串?
這是我的解決方案:我有一個 class 和我的所有共享首選項功能。 現在,當有一條消息添加到地圖列表中時,我會調用 setMessages function,它將此列表中的每個 Map 轉換為字符串。 這個字符串被添加到一個新的字符串列表中。 然后這個字符串列表與共享首選項一起存儲。
在 initState 上,我調用 function 來獲取具有共享首選項的字符串列表。 對於此列表中的每個元素,我將字符串轉換為 Map。 將此 Map 添加到地圖列表中,然后在最后返回,以便列表視圖可以使用它。
這是我的代碼:
static Future setMessages(List<Map> messages) async {
List<String> messagesString = [];
messages.forEach((element) {
messagesString.add(json.encode(element));
});
await _preferences.setStringList(_keyUsername, messagesString);
}
static List<Map> getMessages() {
List<String> messagesString =
_preferences.getStringList(_keyUsername) ?? [];
List<Map> messages = [];
if (messagesString.isNotEmpty) {
messagesString.forEach((element) {
messages.add(json.decode(element));
});
}
return messages;
}
json.encode 和 json.decode 解決了我的問題。 我還考慮過使用 sqflite 並設置一個像 @Mol0ko 建議的本地數據庫,但在我的情況下,只有這個小數據使這個解決方案更容易保存和加載聊天消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.