flutter - 在 Flutter 后台上传
问题描述
在后台上传数据的最佳方式是什么,但在用户切换屏幕时不要取消此上传?我还想在上传完成时显示 Snackbar(即使我已经在不同的屏幕上)。
在 Android 上,我一直在使用 Service + BroadcastReceiver 或 WorkManager。我在 Flutter 中找不到这样做的方法。
解决方案
你可以使用 package https://pub.dev/packages/flutter_uploader
这个插件是基于WorkManager
inAndroid
和NSURLSessionUploadTask
iniOS
在后台运行上传任务。
创建新的上传任务:
final uploader = FlutterUploader();
final taskId = await uploader.enqueue(
url: "your upload link", //required: url to upload to
files: [FileItem(filename: filename, savedDir: savedDir, fieldname:"file")], // required: list of files that you want to upload
method: UploadMethod.POST, // HTTP method (POST or PUT or PATCH)
headers: {"apikey": "api_123456", "userkey": "userkey_123456"},
data: {"name": "john"}, // any data you want to send in upload request
showNotification: false, // send local notification (android only) for upload status
tag: "upload 1"); // unique tag for upload task
);
监听上传进度
final subscription = uploader.progress.listen((progress) {
//... code to handle progress
});
对于Snackbar
,您可以ScaffoldMessenger
使用Snackbar
persist across routes
https://flutter.dev/docs/release/break-changes/scaffold-messenger
现在的ScaffoldMessenger
句柄SnackBars
为了persist across routes
并且总是显示在当前的脚手架上。默认情况下,根 ScaffoldMessenger 包含在MaterialApp
创建ScaffoldMessenger
一个范围内,所有后代都在其中Scaffolds
注册以接收 SnackBar,这就是它们在这些转换中持续存在的方式。使用
代码片段ScaffoldMessenger
提供的根目录时MaterialApp
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: const Text('snack'),
duration: const Duration(seconds: 1),
action: SnackBarAction(
label: 'ACTION',
onPressed: () { },
),
));
推荐阅读
- visual-studio - 如何创建 .NET Core 2 MVC 解决方案?
- c# - .NET Core 3.1 无法从 PHP shell_exec() 运行可执行程序
- javascript - 如何在角度的简单对话框模型中从 api 调用返回值?
- docker - 如何在构建阶段将插件添加到 Neo4j Docker 容器,而不是在容器运行时下载插件?
- azure - 如何在 VS 2019 中使用 Azure 云资源管理器
- flutter - 如何在颤动中正确排列物品
- python - 正则表达式用相应的替换模式替换多个模式
- php - 用户未登录时显示登录/注册
- python - 使用 python 从 netCDF 读取特定位置的时间序列,时间以秒为单位
- python - 发送电子邮件的 Django 联系表