使变量更新时使用三元运算符更新绘制的小部件
Make widget drawn with ternary operator update when variable updates
我的 flutter 项目中有一个 container
,它加载由 flutter image_picker
包编辑的图像 select。如果该值为 null,它会加载占位符图像和说明上传图像的文本。
GestureDetector(
onTap: () async {
setState(() {
_pickImage();
});
},
child: photo != null
? Image.file(
File(
photo!.path.toString(),
),
)
: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
color: const Color(0xff303434),
),
height: 200,
width: double.infinity,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset('assets/images/camera.png'),
Text(
'Upload Image',
style: GoogleFonts.poppins(
color: Colors.white,
fontSize: 15,
),
),
],
),
),
),
),
选取图片的函数为:
void _pickImage() async {
setState(() async {
final ImagePicker _picker = ImagePicker();
photo = await _picker.pickImage(
source: ImageSource.camera,
imageQuality: 90,
);
if (photo == null) return;
});
}
问题是,当我select一个图像时,它只会在我热重新加载我的项目时显示在容器中,如果我之后选择另一个图像,我需要热重启来更新图像在容器中。如何解决此问题并使容器中的图像在我 select 和图像时自动上传,而不是必须热重启?
您需要将所有代码移出 setState,并移除 async。
将所有内容移出 setState 并在其后调用 set state,其中没有任何内容,而不是异步 :D
我的 flutter 项目中有一个 container
,它加载由 flutter image_picker
包编辑的图像 select。如果该值为 null,它会加载占位符图像和说明上传图像的文本。
GestureDetector(
onTap: () async {
setState(() {
_pickImage();
});
},
child: photo != null
? Image.file(
File(
photo!.path.toString(),
),
)
: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
color: const Color(0xff303434),
),
height: 200,
width: double.infinity,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset('assets/images/camera.png'),
Text(
'Upload Image',
style: GoogleFonts.poppins(
color: Colors.white,
fontSize: 15,
),
),
],
),
),
),
),
选取图片的函数为:
void _pickImage() async {
setState(() async {
final ImagePicker _picker = ImagePicker();
photo = await _picker.pickImage(
source: ImageSource.camera,
imageQuality: 90,
);
if (photo == null) return;
});
}
问题是,当我select一个图像时,它只会在我热重新加载我的项目时显示在容器中,如果我之后选择另一个图像,我需要热重启来更新图像在容器中。如何解决此问题并使容器中的图像在我 select 和图像时自动上传,而不是必须热重启?
您需要将所有代码移出 setState,并移除 async。
将所有内容移出 setState 并在其后调用 set state,其中没有任何内容,而不是异步 :D