ОК, хорошо, я нашел изящную работу, используйте .forEach, чтобы получить поля объектов и их ключи. Похоже, у Дарта пока нет хорошего запроса элементарного типа, поэтому вам просто нужно сделать это длинным ходом с инструкциями if.
saveToPrefs(SharedPreferences prefs, Person user) {
print('attempting to save details');
(user.toMap()).forEach((key, value) {
if(value != null) {
if(value is String) prefs.setString(key, value);
else if(value is List<String>) prefs.setStringList(key, value);
else if(value is double) prefs.setDouble(key, value);
else if(value is int) prefs.setInt(key, value);
else if(value is bool) prefs.setBool(key, value);
}
});
}
Я доволен, надеюсь, это может кому-то помочь.