flutter 正文可能正常完成,导致返回“null”,但返回类型"String“

zy1mlcev  于 2023-01-18  发布在  Flutter
关注(0)|答案(5)|浏览(249)

我想为图像添加条件,但它显示了一个错误的_setImage(),如何修复它?
正文可能正常完成,导致返回"null",但返回类型"String"可能是不可为null的类型。请尝试在结尾添加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
                ),
              ),
            );
      }
    }
t9aqgxwy

t9aqgxwy1#

这是因为appName.isNotEmpty已经是一个条件。
要修复:

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

zazmityj2#

isNotEmpty是一个getter函数,它返回一个布尔值,这就是为什么您可以简单地调用它,而无需向它添加更多条件。

String _setImage() { 
           return appName != null && appName.isNotEmpty ? 'assets/something1.png' : 'assets/something2.png';
  }
t9eec4r0

t9eec4r03#

appName.isNotEmpty已经是一个条件。
按如下方式更改代码:

if(appName.isNotEmpty) {
   return 'assets/something1.png';
 } 

 return 'assets/something2.png';
tp5buhyn

tp5buhyn4#

最简单的答案是尝试添加默认返回,

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 == ''条件不满足怎么办?所以你需要一个默认的返回值。

建议:

如果不需要第二个其他代码,请将代码更改为:

String _setImage() {
      if(appName.isNotEmpty == '') {
        return 'assets/something1.png';
      return 'assets/something2.png'; 👈 This is the best possible solution
   }
chy5wohz

chy5wohz5#

显示此错误是因为您的函数的返回类型是String,而String不可空的**。
您还没有编写代码来说明如果两个条件都不为真,则返回什么。
以下是两种解决方案。
1.尝试使_setImage()的返回一个可以为空的String。那么函数的返回类型应该是**String?**如下面的代码片段。

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

1.在函数可能返回的每个位置返回一个String

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

相关问题