颤振:"(path): must not be null"条件文件检查



我正在尝试为我的应用程序提供一个用户以前选择的背景,或者在找不到文件时使用默认图像。

代码非常简单:

decoration: BoxDecoration(
color: Colors.blueAccent,
image: DecorationImage(
image: File(customImageFile).existsSync() ? FileImage(File(customImageFile)) : backgroundImage,
fit: BoxFit.fill,
),
),

应用程序在条件行上崩溃,指出(路径):不得为空。 我已经尝试了很多方法来解决这个问题,但我特别要说的是"如果文件路径为空,请不要使用它。 使用我之前为您制作的这张图片"。 但无论如何,它都会心烦意乱。

有没有其他方法可以在这里达到预期的结果?

编辑:

根据@Vikas的要求,涉及更完整的代码示例:

ImageProvider backgroundImage;
String themeLoader = 'blueTheme';
String customImageFile;

//声明

void initState() {
_loadThemeSettings();
super.initState();
}

初始化

_loadThemeSettings() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
themeLoader = prefs.getString('themeColour' ?? 'blueTheme');
customImageFile = prefs.getString('customImageFile' ?? 'empty')
if (customImageFile != null) {
if(File(customImageFile).existsSync()) {
prefs.setString('customImageFile', customImageFile);
} else {
print('Path not valid');
}
} else {
print('customImageFile is NULL');
}
if (themeLoader != null) {
switch (themeLoader) {
case 'blueTheme':
{
colorBloc.changeColor('blueTheme');
setState(() {
backgroundImage = ExactAssetImage('lib/images/bg_blue_new.jpg');
buttonTheme = AppState.blueTheme;
}
}
break;
} else {
print('Theme loader was NULL');
}
}
}
}

在运行时加载以前选择的主题。 案例陈述中有几种颜色,但它们都是相同的,你明白了。

@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () => _exitApp(context),
child: Scaffold(
body: SafeArea(
child: BlocProvider<ColorBloc>(
bloc: colorBloc,
child: Container(
child: Stack(
children: [
Container(
decoration: BoxDecoration(
color: Colors.blueAccent,
image: DecorationImage(
image: (customImageFile != null && File(customImageFile).existsSync()) ? FileImage(File(customImageFile)) : backgroundImage,
fit: BoxFit.fill,
),
),

这就是它所在的地方,其他一切正常。 构建方法的其余部分与此问题无关,并且正在工作,但无论如何它都是:

child: SafeArea(
child: Stack(
children: <Widget>[
Column(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
themesVisible == true
? SizedBox()
: buttonRow(),
SizedBox(
height: 20,
),
],
),
Padding(
padding: EdgeInsets.all(15),
child: topMenuRow(),
),
],
),
),
),
BlocProvider<CustomToggleBloc>(
bloc: customToggleBloc,
child: Center(
child: Container(
child: themesVisible == true ? singlePlayerThemes(singlePlayerCallbacks: callBacks) : scoreText(),
),
),
),//bloc
],
),
),
),
),
),
);
}

文件构造函数中的String path不可为空。这里的问题是,即使使用空检查,File(String path)上仍然使用潜在的空customImageFile。解决方法是,如果路径中的图像为 null,则可以设置占位符图像路径。

相关内容

  • 没有找到相关文章

最新更新