将图片上传到Firebase有什么解决方案?

时间:2019-10-26 08:15:49

标签: forms flutter google-cloud-firestore

在我的应用中,我有一个“创建产品”页面,在该页面中有一个表单,用户可以在其中填写产品数据,在表单底部,我有一个ImagePicker,用户可以从中选择一张图片他们的产品库。

代码如下:

Future<void> _takePicture() async {
    final imageFile = await ImagePicker.pickImage(
      source: ImageSource.gallery,
    );
    setState(() {
      data.image = imageFile;
    });
    final appDir = await syspaths.getApplicationDocumentsDirectory();
    String fileName = path.basename(imageFile.path);
    final savedImage = await imageFile.copy('${appDir.path}/$fileName');
  }

以下是使用的软件包:

import 'package:image_picker/image_picker.dart';
import 'package:path/path.dart' as path;
import 'package:path_provider/path_provider.dart' as syspaths;

但是当由于图像是文件而使用保存按钮将数据提交到Firebase时,我一直收到此错误:

Converting object to an encodable object failed: Instance of '_File'

如何将图像上传到Firebase中并存储到该产品中,而不是随机混合?并遵循产品的ID?以及是否可能。

1 个答案:

答案 0 :(得分:1)

我使用这种方法上传文件并获取URL链接

 Future uploadFile(File file) async {
    String fileName = basename(file.path);
    StorageReference firebaseStroageReference =
        FirebaseStorage.instance.ref().child(fileName);

        StorageUploadTask   _uploadTask = firebaseStroageReference.putFile(file);

    StorageTaskSnapshot taskSnapshot = await _uploadTask.onComplete;

    var dowurl = await taskSnapshot.ref.getDownloadURL();

    setState(() {
     _url = dowurl.toString();
    });

  }

不要忘记插件

firebase_storage: