在我的应用中,我有一个“创建产品”页面,在该页面中有一个表单,用户可以在其中填写产品数据,在表单底部,我有一个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?以及是否可能。
答案 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: