我想为图像添加条件,但它显示_setImage()
上的错误,如何修复它?
主体可能正常完成,导致返回'null',但返回类型'String'可能是不可空的类型。尝试在末尾添加return或throw语句。
class _SplashScreenState extends State<SplashScreen> {
final String appName = AppConfig.appName;
String _setImage() {
if(appName.isNotEmpty == '') {
return 'assets/something1.png';
} else if(appName.isNotEmpty == '') {
return 'assets/something2.png';
}
}
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
image: DecorationImage(
fit: BoxFit.cover,
image: AssetImage(_setImage()) //call your method here
),
),
);
}
}
这是因为appName。isNotEmpty已经是一个条件。
修复:
String _setImage() {
if(appName.isNotEmpty) {
return 'assets/something1.png';
} else {
return 'assets/something2.png';
}
}
isNotEmpty是一个getter并返回一个布尔值,这就是为什么您可以简单地调用它而不添加进一步的条件。
String _setImage() {
return appName != null && appName.isNotEmpty ? 'assets/something1.png' : 'assets/something2.png';
}
appName。isNotEmpty已经是一个条件。
像这样修改你的代码:
if(appName.isNotEmpty) {
return 'assets/something1.png';
}
return 'assets/something2.png';
最简单的答案是尝试添加默认返回,
String _setImage() {
if(appName.isNotEmpty == '') {
return 'assets/something1.png';
} else if(appName.isNotEmpty == '') {
return 'assets/something2.png';
}
return 'assets/default.png'; 👈 This needs to be added
}
为什么会出现这个错误?
因为您的返回类型是String
,并且只有当第一个if为appName.isNotEmpty == ''
,第二个if为appName.isNotEmpty == ''
时,您才返回String
。
如果appName.isNotEmpty == ''
条件不满足怎么办?所以你需要一个默认的返回值。
推荐:
第二个else if是不必要的,将代码更改为:
String _setImage() {
if(appName.isNotEmpty == '') {
return 'assets/something1.png';
return 'assets/something2.png'; 👈 This is the best possible solution
}
显示此错误是因为函数的返回类型是String非空.
如果两个条件都不为真,那么返回什么,你还没有写代码。
下面是它的两个解决方案。
-
尝试让_setImage()'s返回一个可空字符串。所以函数的返回类型应该是String?像下面的代码片段。
String? _setImage() { if(appName.isNotEmpty == '') { return 'assets/something1.png'; } else if(appName.isNotEmpty == '') { return 'assets/something2.png'; } }
或
-
返回字符串在你的函数可能返回的每个地方。
String _setImage() { if(appName.isNotEmpty == '') { return 'assets/something1.png'; } return 'assets/something3.png'; //Default image if neither of the conditions gets satisfied. }
但是,我建议您使用这个包another_flutter_splash_screen 1.1.4,因为它是高度可定制的启动屏幕。