Firebase Storage -为什么我的文件没有下载?



我正在尝试从Firebase Storage下载文件到设备。我遵循文档并使用他们的模板将文件写入设备,但我下面的代码打印出##MyApp## playMyApp downloadTask running,然后在此之后打印出##MyApp## playMyApp FILE DOESNT EXIST。为什么下载不工作?

注意-此函数通过按住按钮调用。

Future<void> playMyApp(String MyAppURL) async {
print('##MyApp## playMyApp 1');
final MyAppRef = _firebaseStorage.ref().child(MyAppURL);
print('##MyApp## playMyApp MyAppRef = ' + MyAppRef.toString());
print('##MyApp## playMyApp MyAppRef.name = ' + MyAppRef.name);
final dir = await getApplicationDocumentsDirectory();
final filename = dir.path + receivedMyAppsDir + '/' + MyAppRef.name;
final file = File(filename);
print('##MyApp## playMyApp file: ' + file.path);
try { 
final downloadTask = MyAppRef.writeToFile(file);
downloadTask.snapshotEvents.listen((taskSnapshot) {
switch (taskSnapshot.state) {
case TaskState.running:
print('##MyApp## playMyApp downloadTask running');
break;
case TaskState.paused:
print('##MyApp## playMyApp downloadTask paused');
break;
case TaskState.success:
print('##MyApp## playMyApp downloadTask success');
break;
case TaskState.canceled:
print('##MyApp## playMyApp downloadTask canceled');
break;
case TaskState.error:
print('##MyApp## playMyApp downloadTask error');
break;
}
});
} catch (e) { 
print('##MyApp## playMyApp ERROR: ' + e.toString());
}
if (await file.exists() == true) {
print('##MyApp## playMyApp FILE EXISTS');
await _justAudioPlayer.setFilePath(file.path);
print('##MyApp## playMyApp setFilePath');
await _justAudioPlayer.play();
} else {
print('##MyApp## playMyApp FILE DOESNT EXIST');
}
print('##MyApp## playMyApp 2 (finished)');
}

按钮代码:

GestureDetector(       
onTap: () async { 
},
onLongPressStart: (details) async {
print('##MyApp## MyAppWidget onLongPressStart 1');
await playMyApp(MyAppURL);
print('##MyApp## MyAppWidget onLongPressStart 2');
},
onLongPressUp: () async { 
print('##MyApp## MyAppWidget onLongPressUp 1');
await stopMyApp();
print('##MyApp## MyAppWidget onLongPressUp 2');
},
child: ElevatedButton(onPressed: () {  }, child: null,),
),

downloadTask.snapshotEvents是一个流,异步完成。TaskState.success是文件准备好进行进一步处理的情况。

downloadTask.snapshotEvents.listen((taskSnapshot) {
switch (taskSnapshot.state) {
...
case TaskState.success:
// TODO: File is ready for playing.
break;
...
}
});

最新更新