Classe indefinida StorageReference ao usar o Firebase Storage

Nov 10 2020

Estou tentando fazer upload de imagem, e o mesmo processo está funcionando para meu outro aplicativo, mas aqui dá esses erros, você pode cara, por favor me ajude?

Future getImage1() async {
    // ignore: deprecated_member_use
    var firstImage = await ImagePicker.pickImage(
        source: ImageSource.gallery, imageQuality: 65);
    setState(() {
      _image1 = firstImage;
    });
  }

Respostas

4 PeterHaddad Nov 10 2020 at 14:16

A partir da versão firebase_storage 5.0.1:

Você deve fazer o seguinte:

FirebaseStorage storage = FirebaseStorage.instance;
Reference ref = storage.ref().child("image1" + DateTime.now().toString());
UploadTask uploadTask = ref.putFile(_image1);
uploadTask.then((res) {
   res.ref.getDownloadURL();
});

StorageReference a classe foi removida e agora você tem que usar a classe https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_storage/firebase_storage/lib/src/reference.dart. https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_storage/firebase_storage/lib/src/task.dart#L96estende Task, que também implementa Future<TaskSnapshot>. Portanto, todos os métodos que estão na classe Futurepodem ser usados ​​na classe UploadTask.

Portanto, para obter o resultado urlda imagem, você precisa usar o then()método que registra um retorno de chamada a ser chamado quando esse futuro terminar.

1 AkashC.A Nov 10 2020 at 16:00

Conforme mencionado por @PeterHadad, existem algumas mudanças importantes no armazenamento do Firebase 5.0.1. As classes foram renomeadas, mas mantêm a maioria de suas antigas funcionalidades.

Você também pode usar .whenComplete () para obter o URL de download da seguinte forma-

uploadPic(File _image1) async {
   FirebaseStorage storage = FirebaseStorage.instance;
   String url;
   Reference ref = storage.ref().child("image1" + DateTime.now().toString());
   UploadTask uploadTask = ref.putFile(_image1);
   uploadTask.whenComplete(() {
      url = ref.getDownloadURL();
   }).catchError((onError) {
    print(onError);
    });
   return url;
}
UmarCalcuttawala Nov 10 2020 at 15:56

Parece que você não adicionou dependência no arquivo pubspec.yaml ou talvez não importou o pacote em seu arquivo DART. É por isso que você está recebendo um erro.

Verifique o site do pacote, por exemplo, sobre como usar: https://pub.dev/packages/firebase_storage