dataStore method
Implementation
Future<bool> dataStore(String key, dynamic value) async {
//get shared prefs
SharedPreferences prefs = await SharedPreferences.getInstance();
String type = value.runtimeType.toString();
String initialType = type;
bool saved = false;
//type minified
if (type.length > 11 ? type.substring(0, 8) == "minified" : false)
type = "List<${type.substring(11, type.length - 1)}>";
if (debug) print("store - key $key value type $type");
if (debug) print("store - value $value");
//set pref based on type
if (type == "String")
saved = await prefs.setString(key, value.toString());
else if (type == "int")
saved = await prefs.setInt(key, value);
else if (type == "double")
saved = await prefs.setDouble(key, value);
else if (type == "bool")
saved = await prefs.setBool(key, value);
else if (type.length > 4 ? type.substring(0, 4) == "List" : false) {
if (value.length >= 0) {
type = value[0].runtimeType.toString();
if (type == "String")
saved = await prefs.setStringList(key, value);
else {
//cast
if (initialType.length > 8
? initialType.substring(0, 8) == "minified"
: false) {
value = List<dynamic>.from(value);
}
//type = value[0][0].runtimeType.toString();
saved = true;
for (int i = 0; i < value.length; i++) {
saved &= await dataStore("$key-$i", value[i]);
}
saved &= await prefs.setInt("$key+", value.length);
}
}
} else if ((type.length > 22
? type.substring(0, 22) == "_InternalLinkedHashMap"
: false) ||
(type.length > 13 ? type.substring(0, 13) == "_ImmutableMap" : false)) {
int i = 0;
saved = true;
for (var k in value.keys) {
saved &= await dataStore("$key-key$i", k);
saved &= await dataStore("$key-value$i", value[k]);
i++;
}
saved &= await prefs.setInt("$key+", value.length);
} else {
throw new ArgumentError.value(type, "type", "Type not supported");
}
return saved;
}