dataStore method

Future<bool> dataStore(
  1. String key,
  2. dynamic value
)

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