Basta ya de buscar por todo internet ya que has llegado al espacio adecuado, tenemos la solución que quieres y sin complicaciones.
Solución:
Actualización (2019-08-03):
De acuerdo con este PR, ahora hay un getReferenceFromUrl
método en FlutterFire que permite buscar una referencia de almacenamiento por su URL de descarga.
Respuesta anterior:
En Android puedes llamar getReferenceForUrl()
conseguir un StorageReference
desde una URL de descarga, y existe un método similar en iOS.
Pero no puedo encontrar un método correspondiente en los documentos de referencia de FlutterFire. Desafortunadamente, esto significa que no hay forma de mapear desde una URL de descarga a una StorageReference
en Flutter.
Esto suena como una omisión, por lo que recomiendo enviar su +1 en esta solicitud de función.
Por el momento, esto significa que deberá tener la ruta relativa al archivo en Cloud Storage para poder eliminarlo de Flutter. Con esa ruta, su código actual funcionaría.
cambiar ruta de archivo a
String filePath = 'https://firebasestorage.googleapis.com/v0/b/dial-in-21c50.appspot.com/o/default_images%2Fuser.png?alt=media&token=c2ccceec-8d24-42fe-b5c0-c987733ac8ae'
.replaceAll(new
RegExp(r'https://firebasestorage.googleapis.com/v0/b/dial-in-21c50.appspot.com/o/default_images%2F'), '').split('?')[0];
FirebaseStorage.instance.ref().child(filePath).delete().then((_) => print('Successfully deleted $filePath storage item' ));
Implementé un código más limpio pero igual que @earyhe, que está usando Uri.decodeFull()
y Path.basename()
. Probé y funcionó.
import 'package:path/path.dart' as Path;
Future deleteImage(String imageFileUrl) async
var fileUrl = Uri.decodeFull(Path.basename(imageFileUrl)).replaceAll(new RegExp(r'(?alt).*'), '');
final StorageReference firebaseStorageRef =
FirebaseStorage.instance.ref().child(fileUrl);
await firebaseStorageRef.delete();