I have a list of favourites:
List<MetroStation> favouriteData = <MetroStation>[];
And I also have a class of MetroStations with factory constructor to convert it to json and vice versa.
class MetroStation {
final String ukrName;
final String engName;
final double depth;
final String iconImage;
final TransitData? transitData;
final BranchType branchType;
bool isFavourite;
MetroStation({
required this.isFavourite,
required this.branchType,
this.transitData,
required this.depth,
required this.iconImage,
required this.ukrName,
required this.engName,
});
factory MetroStation.fromJson(Map<String, dynamic> json) => MetroStation(
ukrName: json['ukrName'],
engName: json['engName'],
depth: json['depth'],
iconImage: json['iconImage'],
branchType: json['branchType'],
isFavourite: json['isFavourite']);
Map<String, dynamic> toJson() => {
'ukrName': ukrName,
'engName': engName,
'depth': depth,
'iconImage': iconImage,
'branchType': branchType,
'isFavourite': isFavourite
};
I have created a class to Encode and Decode my list of Favourites.
const futureSharedPreference = 'future shared preference';
class SharedPref {
static Future setMap() async {
final prefs = await SharedPreferences.getInstance();
return prefs.setString(futureSharedPreference, jsonEncode(favouriteData));
}
static Future<Map> getMap() async{
final prefs = await SharedPreferences.getInstance();
return jsonDecode(prefs.getString(futureSharedPreference) ?? '') ?? {};
}
}
Here is my code to add and remove elements in favouriteData, where i`m also trying to use json.
setState(() {
if (station.isFavourite) {
favouriteData.remove(station);
station.isFavourite = false;
debugPrint('-----------');
for (var element
in favouriteData) {
debugPrint(element.ukrName);
}
debugPrint('-----------');
} else {
favouriteData.add(station);
station.isFavourite = true;
debugPrint('-----------');
for (var element
in favouriteData) {
debugPrint(element.ukrName);
}
debugPrint('-----------');
}
debugPrint('$favouriteData');
SharedPref.setMap();
});
SharedPref.getMap().then((value) => print(value));}))
I get an this error in emulator. Please, help me. I don`t really know what to do.