如何判断向Firebase Storage上传媒体时是否无网络连接?
解决Firebase Storage无网络时不返回错误的问题
Firebase Storage默认会缓存上传任务并在网络恢复时自动重试,所以无网络场景下不会立刻抛出错误。要实现无网络时更新UI状态,你可以从主动检测网络状态和监听上传任务状态两个方向入手:
1. 上传前主动检测网络状态
借助connectivity_plus包先判断当前网络连通性,无网络时直接更新UI,避免触发无效上传操作:
import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:firebase_storage/firebase_storage.dart'; import 'dart:typed_data'; // 检查当前是否有网络连接 Future<bool> isNetworkAvailable() async { final connectivityResult = await Connectivity().checkConnectivity(); return connectivityResult != ConnectivityResult.none; } // 执行上传逻辑 void startUpload(Uint8List data) async { final hasNetwork = await isNetworkAvailable(); if (!hasNetwork) { // 无网络,直接更新UI状态 _updateUIForOffline(); return; } // 有网络时发起上传 FirebaseStorage.instance.ref('fo').putData(data).then((_) { // 上传成功更新UI _updateUIForSuccess(); }).catchError((error) { // 处理上传失败的其他错误 _updateUIForError(error); }); } // 示例UI更新方法 void _updateUIForOffline() { // 比如显示"无网络连接,请稍后重试" } void _updateUIForSuccess() { // 比如显示"上传完成" } void _updateUIForError(dynamic error) { // 比如显示错误信息 }
2. 上传过程中监听网络与任务状态
如果需要在上传中途网络断开时也能触发UI更新,可以同时监听网络状态变化和上传任务的状态流转:
void uploadWithNetworkMonitoring(Uint8List data) { final uploadTask = FirebaseStorage.instance.ref('fo').putData(data); StreamSubscription? networkSubscription; // 监听上传任务的状态变化 final taskSubscription = uploadTask.snapshotEvents.listen((snapshot) { switch (snapshot.state) { case TaskState.running: // 上传中,启动网络监听 networkSubscription ??= Connectivity().onConnectivityChanged.listen((result) { if (result == ConnectivityResult.none) { // 网络断开,更新UI并可选择取消任务 _updateUIForOffline(); uploadTask.cancel(); networkSubscription?.cancel(); } }); break; case TaskState.success: _updateUIForSuccess(); networkSubscription?.cancel(); break; case TaskState.error: _updateUIForError(snapshot.error); networkSubscription?.cancel(); break; default: break; } }); }
补充说明
- 若需要调整Firebase的离线重试策略,可以通过配置
UploadTask的自定义元数据或修改重试参数,但提前检测网络是更直接的解决方案。 - 确保在Android的
AndroidManifest.xml和iOS的Info.plist中配置好网络权限,保证网络状态检测功能正常运行。
内容的提问来源于stack exchange,提问作者Mohammed Hamdan
相关产品推荐
相关产品推荐

