我正在实现文件上传。我想使用 CircularProgressIndicator 显示上传进度。
FileUploadController 类的uploadFile() 函数将文件上传到服务器并告知上传进度的百分比。并且每帧都会调用“NotifyListeners()”来通知上传进度。
我尝试使用此信息绘制一个 CircularProgressIndicator,但出现错误。“在构建过程中调用了 setstate() 或 markneedsbuild()。 ”
@override
Widget build(BuildContext context) {
var uploadController = Provider.of<FileUploadController>(context);
uploadController.uploadFile(userFiles, context);//upload files and update uploadPercentage
return ListTile(
leading: Stack(
children: [
CircularProgressIndicator(
value: userFiles.uploadPercentage,
strokeWidth: userFiles.uploadPercentage == 1 ? 0 : 1,
),
Positioned(
right: 3,
left: 3,
top: 3,
bottom: 3,
child: CircleAvatar(
backgroundColor: Colors.white,
backgroundImage:
AssetImage('assets/images/fileTypeLogos/pdf.png'),
),
),
],
),
title: Text(widget.fileName),
trailing: IconButton(
icon: Icon(Icons.close),
onPressed: () => widget.removeWhenCloseButtonTap(widget.fileName),
),
);
}
我认为问题是在 build() 中调用 notifyListeners() (uploadFile 函数调用它)。我该如何解决?