Flutter 如何测试多个字段对象的哪些字段为空?
Flutter how to test which fields of a many fielded object are null?
我在我的应用程序的 3 个位置将用户详细信息保存到 SharedPrefs,这将导致大量重复代码。所以我想将一个方法滚动到我的 Person class 中,这样我就可以从任何地方调用它并在那里保存用户详细信息。
我有一个 var: Object Person 的用户,我一直在摆弄 Keys 和 String 来访问它的字段,但总是出现相同的错误:
The getter 'attribute' isn't defined for the type 'Person'. Try
importing the library that defines 'attribute', correcting the name to
the name of an existing getter, or defining a getter or field named
'attribute'.
saveToPrefs(SharedPreferences prefs, Person user) {
print('attempting to save details');
for(String attribute in (user.toMap().keys)) {
var testField = user.attribute;
if(testField != null) {
switch(runtimeType(user.attribute)) {
case String:
{
prefs.setString(attribute, testField);
break;
}
case double: {
prefs.setDouble(attribute, testField);
break;
}
}
}
}
}
如何访问 Person user
字段?
好的,我找到了一个优雅的解决方法,使用 .forEach 获取对象字段及其键。看起来 Dart 还没有一个好的基本类型查询,所以你只需要用 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);
}
});
}
我很满意,希望它能对某人有所帮助。
我在我的应用程序的 3 个位置将用户详细信息保存到 SharedPrefs,这将导致大量重复代码。所以我想将一个方法滚动到我的 Person class 中,这样我就可以从任何地方调用它并在那里保存用户详细信息。
我有一个 var: Object Person 的用户,我一直在摆弄 Keys 和 String 来访问它的字段,但总是出现相同的错误:
The getter 'attribute' isn't defined for the type 'Person'. Try importing the library that defines 'attribute', correcting the name to the name of an existing getter, or defining a getter or field named 'attribute'.
saveToPrefs(SharedPreferences prefs, Person user) {
print('attempting to save details');
for(String attribute in (user.toMap().keys)) {
var testField = user.attribute;
if(testField != null) {
switch(runtimeType(user.attribute)) {
case String:
{
prefs.setString(attribute, testField);
break;
}
case double: {
prefs.setDouble(attribute, testField);
break;
}
}
}
}
}
如何访问 Person user
字段?
好的,我找到了一个优雅的解决方法,使用 .forEach 获取对象字段及其键。看起来 Dart 还没有一个好的基本类型查询,所以你只需要用 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);
}
});
}
我很满意,希望它能对某人有所帮助。