You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter后台文件上传方案咨询:flutter_uploader已弃用求替代

Flutter后台文件上传替代方案(替代flutter_uploader)

一、推荐的替代包

  • background_uploader:这是flutter_uploader的维护分支,完全兼容原有API,修复了弃用后的适配问题,原生支持Android/iOS后台上传,自带通知栏状态展示,能直接满足你的需求。
  • flutter_background_service + dio:如果需要高度自定义逻辑,可搭配这两个包:用flutter_background_service管理后台任务生命周期,dio实现文件上传,灵活性更强,适合复杂业务场景。

二、快速实现(以background_uploader为例)

1. 添加依赖

在pubspec.yaml中引入:

dependencies:
  background_uploader: ^latest_version # 替换为最新版本号

2. 创建上传任务并配置通知

import 'package:background_uploader/background_uploader.dart';

final uploader = BackgroundUploader();

void startFileUpload(String filePath, String uploadApiUrl) {
  final uploadTask = UploadTask(
    url: uploadApiUrl,
    files: [FileItem(path: filePath)],
    method: HttpMethod.post,
    // 配置通知栏显示参数
    notificationConfig: NotificationConfig(
      title: "文件上传中",
      cancelButtonText: "取消上传",
      completedTitle: "上传完成",
      completedMessage: "文件已成功上传至服务器",
      // 可自定义通知图标、声音等
    ),
  );

  // 加入上传队列
  uploader.enqueue(uploadTask);
}

3. 监听上传状态并实现跳转

// 在页面初始化时监听任务状态
@override
void initState() {
  super.initState();
  uploader.taskStream.listen((taskStatus) {
    if (taskStatus.status == UploadTaskStatus.completed) {
      // 上传完成,跳转至首页
      Navigator.pushReplacementNamed(context, '/home');
    }
  });
}

三、自定义后台上传方案(flutter_background_service + dio)

如果需要完全掌控上传逻辑,可自行组合实现:

  1. 用flutter_background_service启动后台隔离线程,避免页面销毁中断上传;
  2. 用dio的MultipartRequest构建文件上传请求,在后台线程执行;
  3. 结合flutter_local_notifications推送上传进度通知,上传完成后通过事件通知主线程触发页面跳转。

核心代码片段:

// 后台任务中的上传逻辑
Future<void> runBackgroundUpload(String filePath, String uploadUrl) async {
  final dio = Dio();
  final formData = FormData.fromMap({
    'file': await MultipartFile.fromFile(filePath),
  });

  await dio.post(
    uploadUrl,
    data: formData,
    onSendProgress: (sent, total) {
      // 更新通知栏进度
      updateUploadNotification((sent / total) * 100);
    },
  );

  // 上传完成,通知主线程跳转
  sendEventToMainThread('upload_success');
}

// 主线程监听事件
void listenUploadEvents() {
  FlutterBackgroundService().on('upload_success').listen((_) {
    Navigator.pushReplacementNamed(context, '/home');
  });
}

内容的提问来源于stack exchange,提问作者potatoman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 04:43:10