Ausgabe
Nach dem Aktualisieren von Flutter auf Nullsicherheit habe ich einen Wert vom Typ „Map<String, Object>“ erwartet, aber einen vom Typ „Fehler“ erhalten.
Future<bool> tryAutoLogin() async {
final prefs = await SharedPreferences.getInstance();
if (!prefs.containsKey('userData')) {
return false;
}
try {
final extractedUserData =
json.decode(prefs.getString('userData')as String) as Map<String, Object>;
print(extractedUserData);
} catch (error) {
print(error);
}
return true;
}
Weiß jemand, warum es passiert? Danke im Voraus.
Lösung
Bei Dart gibt es einen Unterschied zwischen dem Typ Object
und dem Schlüsselwort dynamic
. Was ist der Unterschied? Schauen Sie sich das an . Wenn nun jsonDecode eine Map empfängt, gibt es a zurück Map<String, dynamic>
, um das Aufrufen von Methoden zu ermöglichen, die nicht für Object definiert sind.
Lösung: Ersetzen Sie Map<String, Object
> durch Map<String, dynamic>
.
Hier ist auch ein Code-Stil-Hinweis: Casten Sie nicht a String?
mit as String
, verwenden !
Sie nach dem Nullable-Wert, um anzunehmen, dass er nicht null ist.
Beantwortet von – Lasslos05
Antwort geprüft von – Dawn Plyler (FixError Volunteer)