正文可能会正常完成,从而导致返回'null',但返回类型'String'



我想为图像添加条件,但它显示_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非空.

如果两个条件都不为真,那么返回什么,你还没有写代码。

下面是它的两个解决方案。

  1. 尝试让_setImage()'s返回一个可空字符串。所以函数的返回类型应该是String?像下面的代码片段。

    String? _setImage() {
    if(appName.isNotEmpty == '') {
    return 'assets/something1.png';
    } else if(appName.isNotEmpty == '') {
    return 'assets/something2.png';
    } 
    }
    

  2. 返回字符串在你的函数可能返回的每个地方。

    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,因为它是高度可定制的启动屏幕。

最新更新