英文:
Flutter dio, how to pass onSendProgress data back to widget?
问题
在小部件之外的函数中,我有一个 dio 发送请求如下:
final response = await dio.post(
url.toString(),
data: formData,
options: Options(
headers: headers_form,
),
onSendProgress: (int sent, int total) {
print(sent);
},
);
我如何将这个 onSendProgress
数据传递回我的小部件以进行显示?涉及的小部件是一个 AlertDialog 小部件,显示要上传的图像。当我按下上传按钮时,我希望有一个进度指示器,由 onSendProgress
dio 回调驱动。
return StatefulBuilder(
builder: (context, setState) {
return AlertDialog(
title: Text('Confirm File Upload'),
content: Container(
child: Column(
children: [
Text(progress.value.toString()) // 这里是我想要更新进度条数据的地方
],
),
),
actions: [
TextButton(
onPressed: () =>
Navigator.pop(context, false),
child: Text('Cancel'),
),
FFButtonWidget(
onPressed: () async {
await TheClass().uploadFile(widget.folderID, imagePath); // 这里是当按下确定按钮时调用上传文件函数的地方
Navigator.pop(context, true);
},
),
],
);
},
);
英文:
In a function outside of the widget, I have a dio post request as follows:
final response = await dio.post(
url.toString(),
data: formData,
options: Options(
headers: headers_form,
),
onSendProgress: (int sent, int total) {
print(sent);
},
);
How do I pass this onSendProgress data back to my widget to display? The widget in question is an AlertDialog widget that shows the image to be uploaded. When I press the upload button, I want a progress indicator that is driven by the onSendProgress dio callback.
return StatefulBuilder(
builder: (context, setState) {
return AlertDialog(
title: Text('Confirm File Upload'),
content: Container(
child: Column(
children: [
Text(progress.value.toString()) // This is where I want to update the progress bar data
],
),
),
actions: [
TextButton(
onPressed: () =>
Navigator.pop(context,false),
child: Text('Cancel'),
),
FFButtonWidget(
onPressed: () async {
await TheClass().uploadFile(widget.folderID, imagePath); //This is where I call the upload file function when OK button is pressed
Navigator.pop(context,true);
},
答案1
得分: 0
在小部件内创建一个函数。例如:
void _onUploadProgress(int sent, int total) {
// 在这里执行一些操作
}
然后,在您的类中,在 uploadFile
方法中添加一个命名参数,像这样:
Future<void> uploadFile(
String folderId,
String imagePath,
// 添加这一行:
{Function(int, int)? onUploadProgress}) {
await dio.post(
…,
onSendProgress: (int sent, int total) {
onUploadProgress?.call(sent, total);
}
);
}
现在,当您调用 uploadFile
时,将 _onUploadProgress
方法作为 onUploadProgres
参数传递:
await uploadFile(
…,
onUploadProgress: _onUploadProgress,
);
英文:
Create a function inside the widget. For example:
void _onUploadProgress(int sent, int total) {
// do something here
}
Then, inside your class in the uploadFile
method add a named parameter, like this:
Future<void> uploadFile(
String folderId,
String imagePath,
// add this line:
{Function(int, int)? onUploadProgress}) {
await dio.post(
…,
onSendProgress: (int sent, int total) {
onUploadProgress?.call(sent, total);
}
);
}
Now when you call uploadFile
pass the _onUploadProgress
method as the onUploadProgres
parameter:
await uploadFile(
…,
onUploadProgress: _onUploadProgress,
);
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论