Dart null-safety 破坏 Future<bool> 匿名方法?
Dart null-safety breaks Future<bool> anonymous method?
在迁移到空安全之前,这是可行的。这是一种用户登录验证方式。
Future<bool> loginValidate() async {
final String dir = await getDocDir(); //getting documents directory
try {
await File('$dir/$_userLoginString.json')
.readAsString()
.then((String contents) {
final json = jsonDecode(contents) as Map<String, dynamic>;
final user = PersonLoginJson.fromJson(json);
if (_userPasswordString != user.password) {
//invalid password
return Future<bool>.value(false);
}
});
} on FileSystemException {
//invalid username
return Future<bool>.value(false);
} catch (e) {
return Future<bool>.value(false);
}
//success
return Future<bool>.value(true);
}
此 error 在构建应用程序时发生。
我认为这与 .then() 方法中的匿名函数参数有关。
if (_userPasswordString != user.password) {
//invalid password
return Future<bool>.value(false);
} else {
return Future<bool>.value(true); // <--- here needed
}
您需要 return
await
函数,还需要设置 true
值以使其工作:
return await File('$dir/$_userLoginString.json')
.readAsString()
.then((String contents) {
final json = jsonDecode(contents) as Map<String, dynamic>;
final user = PersonLoginJson.fromJson(json);
if (_userPasswordString != user.password) {
//invalid password
return Future<bool>.value(false);
}
//Also need this code as it will return null if not set
return Future<bool>.value(true);
});
我认为更好的方式:
让我们更改此代码:
await File('$dir/$_userLoginString.json')
.readAsString()
.then((String contents) {
final json = jsonDecode(contents) as Map<String, dynamic>;
final user = PersonLoginJson.fromJson(json);
if (_userPasswordString != user.password) {
//invalid password
return Future<bool>.value(false);
}
});
对此:
String contents = await File('$dir/$_userLoginString.json').readAsString();
final json = jsonDecode(contents) as Map<String, dynamic>;
final user = PersonLoginJson.fromJson(json);
if (_userPasswordString != user.password) {
//invalid password
return Future<bool>.value(false);
}
那么现在调试你的代码会更容易。
在迁移到空安全之前,这是可行的。这是一种用户登录验证方式。
Future<bool> loginValidate() async {
final String dir = await getDocDir(); //getting documents directory
try {
await File('$dir/$_userLoginString.json')
.readAsString()
.then((String contents) {
final json = jsonDecode(contents) as Map<String, dynamic>;
final user = PersonLoginJson.fromJson(json);
if (_userPasswordString != user.password) {
//invalid password
return Future<bool>.value(false);
}
});
} on FileSystemException {
//invalid username
return Future<bool>.value(false);
} catch (e) {
return Future<bool>.value(false);
}
//success
return Future<bool>.value(true);
}
此 error 在构建应用程序时发生。
我认为这与 .then() 方法中的匿名函数参数有关。
if (_userPasswordString != user.password) {
//invalid password
return Future<bool>.value(false);
} else {
return Future<bool>.value(true); // <--- here needed
}
您需要 return
await
函数,还需要设置 true
值以使其工作:
return await File('$dir/$_userLoginString.json')
.readAsString()
.then((String contents) {
final json = jsonDecode(contents) as Map<String, dynamic>;
final user = PersonLoginJson.fromJson(json);
if (_userPasswordString != user.password) {
//invalid password
return Future<bool>.value(false);
}
//Also need this code as it will return null if not set
return Future<bool>.value(true);
});
我认为更好的方式:
让我们更改此代码:
await File('$dir/$_userLoginString.json')
.readAsString()
.then((String contents) {
final json = jsonDecode(contents) as Map<String, dynamic>;
final user = PersonLoginJson.fromJson(json);
if (_userPasswordString != user.password) {
//invalid password
return Future<bool>.value(false);
}
});
对此:
String contents = await File('$dir/$_userLoginString.json').readAsString();
final json = jsonDecode(contents) as Map<String, dynamic>;
final user = PersonLoginJson.fromJson(json);
if (_userPasswordString != user.password) {
//invalid password
return Future<bool>.value(false);
}
那么现在调试你的代码会更容易。