Error: 'split' can't be unconditionally invoked because the receiver can be 'null'
Error: 'split' can't be unconditionally invoked because the receiver can be 'null'
Android Studio 在 Flutter 中的 split
上引发 NullSafety 错误。
The method 'split' can't be unconditionally invoked because the receiver can be 'null'. Try making the call conditional (using '?.') or adding a null check to the target ('!'). Open documentation
但是 none 的建议修复有效。这是代码;
FutureBuilder(
future: jwtOrEmpty,
builder: (context, snapshot) {
if(!snapshot.hasData) return CircularProgressIndicator();
if(snapshot.data != "") {
var str = snapshot.data;
var jwt = str.split(".");
if(jwt.length !=3) {
return LoginPage();
} else {
var payload = json.decode(ascii.decode(base64.decode(base64.normalize(jwt[1]))));
if(DateTime.fromMillisecondsSinceEpoch(payload["exp"]*1000).isAfter(DateTime.now())) {
return HomePage(str, payload);
} else {
return LoginPage();
}
}
} else {
return LoginPage();
}
}
),
我猜是因为返回的 snapshot.data
不能为空。但我不确定我能做些什么。我尝试添加“!”和 ”?”到 snapshot.data
、str
、jwt
和 split
,但没有任何效果。
它想说的是您的 str
可能为空,因为 snapshot.data
可能为空。
所以一种使用方法是,
var jwt = str!.split('.'); // This means we are saying that str will never be null.
但显然,如果 str
在运行时实际上是 null
,这会崩溃。
更好的方法,
var str = snapshot.data;
var jwt = [];
if (str != null)
jwt = str.split(".");
假设您的 snapshot.data
是一个字符串,这将永远不会崩溃,因为我们正在进行空检查。
虽然 Android Studio 另有说法,但看起来问题不在于 Null 安全,而是因为“str”并不是真正的字符串。所以我这样做了;
var str = snapshot.data;
var jwt = str.toString().split(".");
此外,我不得不将 // @dart=2.9
添加到文件的顶部,因为 flutter 存储依赖项不支持 NULL SAFETY。
Android Studio 在 Flutter 中的 split
上引发 NullSafety 错误。
The method 'split' can't be unconditionally invoked because the receiver can be 'null'. Try making the call conditional (using '?.') or adding a null check to the target ('!'). Open documentation
但是 none 的建议修复有效。这是代码;
FutureBuilder(
future: jwtOrEmpty,
builder: (context, snapshot) {
if(!snapshot.hasData) return CircularProgressIndicator();
if(snapshot.data != "") {
var str = snapshot.data;
var jwt = str.split(".");
if(jwt.length !=3) {
return LoginPage();
} else {
var payload = json.decode(ascii.decode(base64.decode(base64.normalize(jwt[1]))));
if(DateTime.fromMillisecondsSinceEpoch(payload["exp"]*1000).isAfter(DateTime.now())) {
return HomePage(str, payload);
} else {
return LoginPage();
}
}
} else {
return LoginPage();
}
}
),
我猜是因为返回的 snapshot.data
不能为空。但我不确定我能做些什么。我尝试添加“!”和 ”?”到 snapshot.data
、str
、jwt
和 split
,但没有任何效果。
它想说的是您的 str
可能为空,因为 snapshot.data
可能为空。
所以一种使用方法是,
var jwt = str!.split('.'); // This means we are saying that str will never be null.
但显然,如果 str
在运行时实际上是 null
,这会崩溃。
更好的方法,
var str = snapshot.data;
var jwt = [];
if (str != null)
jwt = str.split(".");
假设您的 snapshot.data
是一个字符串,这将永远不会崩溃,因为我们正在进行空检查。
虽然 Android Studio 另有说法,但看起来问题不在于 Null 安全,而是因为“str”并不是真正的字符串。所以我这样做了;
var str = snapshot.data;
var jwt = str.toString().split(".");
此外,我不得不将 // @dart=2.9
添加到文件的顶部,因为 flutter 存储依赖项不支持 NULL SAFETY。