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
但是所有建议的修复都不起作用。这是代码;
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
不能为 null。但我不确定我能做些什么。我尝试添加“!”和 ”?” snapshot.data
、str
、jwt
和 split
但没有任何效果。
答案 0 :(得分:0)
它想说的是您的 str
可能为 null,因为 snapshot.data
可能为 null。
所以使用它的一种方法是,
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
是一个字符串,这将永远不会崩溃,因为我们进行了空检查。
答案 1 :(得分:0)
尽管 Android Studio 另有说法,但看起来问题不在于 Null 安全,而是因为“str”并不是真正的字符串。所以我这样做了;
var str = snapshot.data;
var jwt = str.toString().split(".");
此外,我不得不将 // @dart=2.9
添加到文件顶部,因为 Flutter 存储依赖项不支持 NULL SAFETY。