我正在尝试从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;
...
}
});