Carlos Peñaranda
Carlos Peñaranda

Reputation: 783

Flutter How to save and show List<Object> to SharedPreferences?

I want to save and read a list of elements called coursesfav.

I have the following code where I made the map of the class, but I don't know how to save the elements of the string map inside a List one by one, going through the list and then displaying all the elements in a ListView.

This is what I have

//my class

    class curso {
      final String title;
      final String entidad;
      final String categoria;
      final String emision;
      final String imgcourse;
      final String urlcourse;
      final String idioma;
      final String duracion;
      final String description;
    
      curso({
        required this.title,
        required this.entidad,
        required this.categoria,
        required this.emision,
        required this.imgcourse,
        required this.urlcourse,
        required this.idioma,
        required this.duracion,
        required this.description,
      });
    
      Map<String, dynamic> toMap() {
        return {
          'title': title,
          'entidad': entidad,
          'categoria': categoria,
          'emision': emision,
          'imgcourse': imgcourse,
          'urlcourse': urlcourse,
          'idioma': idioma,
          'duracion': duracion,
          'description': description,
        };
      }
    
      curso.fromMap(Map<String, dynamic> res)
          : title = res["title"],
            entidad = res["entidad"],
            categoria = res["categoria"],
            emision = res["emision"],
            imgcourse = res["imgcourse"],
            urlcourse = res["urlcourse"],
            idioma = res["idioma"],
            duracion = res["duracion"],
            description = res["description"];
    
      @override
      String toString() {
        return 'curso{title: $title, entidad: $entidad, categoria: $categoria, emision: $emision, imgcourse: $imgcourse, urlcourse: $urlcourse, idioma: $idioma, duracion: $duracion, description: $description}';
      }
    }

this is how i call

  void saveCourseFavSP(String title,String entidad,String categoria,String emision,String imgcourse,String urlcourse,String idioma,String duracion,String description) async {
    
   //init sharedpreferences
    SharedPreferences cursosFav = await SharedPreferences.getInstance();

    //object variable to load the info
    final testCursoFav = curso(
        title: title,
        entidad: entidad,
        categoria: categoria,
        emision: emision,
        imgcourse: imgcourse,
        urlcourse: urlcourse,
        idioma: idioma,
        duracion: duracion,
        description: description);

    String json = jsonEncode(testCursoFav);
    print("generating json $json");
    
    //sending all items object to sharedPreferences
    cursosFav.setString('coursesFavorites', json);

   //here i want to insert String to List<Strin>
   //sending String to something like .upperCase 
   //but i dont know how to parse and how to read 

  List<String> lista = jsonDecode(json);

  }

  loadDataCursosFavSP() async {
    SharedPreferences cursosFav = await SharedPreferences.getInstance();

    String? json = cursosFav.getString("coursesFavorites");
    print("datos de curso favorito cargados:\n $json");

    if (json == null) {
      print("Items doesn't exist");
    } else {
      Map<String, dynamic> map = jsonDecode(json);

      final cursofav = curso.fromMap(map);

      print(
        "titulo fav: ${cursofav.title}, ${cursofav.entidad},${cursofav.emision},");
    }
  }

  clearDataCursosFavSP() async {
    SharedPreferences cursosFav = await SharedPreferences.getInstance();
    cursosFav.clear();
    print("ALL ITEMS LIST ARE DELETED");
  }

Upvotes: 0

Views: 59

Answers (1)

MANISH DAYMA
MANISH DAYMA

Reputation: 1242

Your question is not that clear but I assume you want to store the list in shared prefs for that you have to convert your list to JSON and then store the encoded JSON to shared prefs.

var json = jsonEncode(yourlist.map((e) => e. toMap()).toList());

cursosFav.setString('coursesFavorites', json);

Upvotes: 2

Related Questions