FirebaseStorage с флаттером - PullRequest
       10

FirebaseStorage с флаттером

0 голосов
/ 19 января 2020

Я новичок в firebase, и я не смог выяснить, какой параметр я должен передать путфайлу в следующем коде, и есть ли какие-либо учебные пособия или соответствующая документация для firebase с флаттером?

Реализованный код

import "dart:io";
import "package:flutter/material.dart";
import "package:firebase_storage/firebase_storage.dart";
import "package:flutter/widgets.dart";

class uploadApp extends StatefulWidget{
  @override
  State<StatefulWidget> createState() =>_uploadApp(); 
}

class _uploadApp extends State<uploadApp>{

  var count=1;
  final File file = File("images/ts2.jpg");
  final FirebaseStorage _storage = FirebaseStorage(storageBucket:"gs://console.firebase.google.com/project/baby-name-4ef54/storage/baby-name-4ef54.appspot.com");
  StorageUploadTask _uploadTask;

  void firebasebackend(){
    String filePath = "images/$count.jpg";
    setState(() {
      _uploadTask = _storage.ref().child(filePath).putFile(file);
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title:"upload",
      home:Material(
        child:Container(child:Center(
          child:
           Column(
            children: <Widget>[
              Container(
                width: 300.0,
                height: 300.0,
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.all(Radius.circular(300.0)),
                  image:DecorationImage(
                    image: AssetImage("images/ts2.jpg"),
                    fit: BoxFit.cover
                  )
                ),
              ),
              Center(
                child: RaisedButton(
                  child:Text("Upload"),
                  onPressed: (){
                    firebasebackend();
                    setState(){
                  count=count+1;
                       };     
                  },
                ),
              )
            ],
          ),
        )
      )
      )
    );
  }
}

'package: firebase_storage / src / storage_reference.dart': ошибочное утверждение: строка 62, позиция 12: 'file.existsSyn c ()': не соответствует действительности.

Что я должен сделать, чтобы просто загрузить изображение прямо из папки в хранилище Firebase?

Ответы [ 3 ]

2 голосов
/ 19 января 2020

В соответствии с кодом плагина firebase_storage:

  /// Asynchronously uploads a file to the currently specified
  /// [StorageReference], with an optional [metadata].
  StorageUploadTask putFile(File file, [StorageMetadata metadata]) {
    assert(file.existsSync());
    final _StorageFileUploadTask task =
        _StorageFileUploadTask._(file, _firebaseStorage, this, metadata);
    task._start();
    return task;
  }

Принимает file в качестве параметра и переменную типа StorageMetadata в качестве необязательного параметра.

https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_storage/lib/src/storage_reference.dart#L61

https://api.dart.dev/stable/2.7.0/dart-io/File-class.html

0 голосов
/ 28 февраля 2020

Это может показаться очень тривиальным, но Питер Хаддад указал в комментариях к своему посту

Это, вероятно, потому что нет изображения с этим путем ...

именно в этом проблема, почему у меня была эта ошибка. Моя ошибка заключалась в том, что я предположил, что при создании объекта File возникает ошибка, и для его создания использовался несуществующий путь. Однако, это не так. Поэтому убедитесь, что объект File ссылается на правильный путь .

0 голосов
/ 19 января 2020

Из полученного сообщения об ошибке похоже, что на вашем телефоне нет файла File("images/ts2.jpg");, что означает, что SDK не может найти данные для загрузки в облачное хранилище.

В общем, я бы с подозрением относился к относительному пути, который вы здесь используете. Пример , поставляемый с Firebase Storage SDK , создает файл по абсолютному пути в каталоге temp с final File file = await File('${systemTempDir.path}/foo$uuid.txt').create();, и я бы также рекомендовал использовать абсолютные пути в файловой системе.

Вам нужно будет найти абсолютный путь к изображению, которое вы хотите загрузить, либо просмотрев файловую систему вашего устройства, либо выбрав абсолютный путь из галереи или камеры. Например, если вы используете средство выбора файлов , вы можете получить файл с помощью:

File file = await FilePicker.getFile();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...