[英]How to retreive a image URL from Firebase Storage in Flutter?
在 Flutter 中,我在名为“parts_sales”的集合中注册了一张图片,我想通过 image.network(url) 加载这张图片 url。 但是,我尝试用print(url)打印url,却提示我写的代码找不到这个url。
下面是完整的代码。
import 'dart:io';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:shipda/constants.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:image_picker/image_picker.dart';
import 'package:shipda/screens/parts_screen/image_container.dart';
class Test extends StatefulWidget {
const Test({Key? key}) : super(key: key);
@override
State<Test> createState() => _TestState();
}
class _TestState extends State<Test> {
@override
void initState() {
super.initState();
getData();
}
final FirebaseAuth auth = FirebaseAuth.instance;
User? user = FirebaseAuth.instance.currentUser;
final FirebaseFirestore firestore = FirebaseFirestore.instance;
var resultData;
var documentID;
var imageUrl;
// Get a document ID
void getData() async {
var querySnapshots = await collection.get();
for (var snapshot in querySnapshots.docs){
documentID = snapshot.id; // <-- document ID
}
var result = await firestore
.collection('parts_sales')
.doc(documentID)
.get();
setState(() {
resultData = result.data();
});
var ref = FirebaseStorage.instance.ref().child('${resultData?['parts_image']}');
// String url = (await ref.getDownloadURL().toString());
var url = await ref.getDownloadURL();
print(documentID);
print(url);
}
var collection = FirebaseFirestore.instance.collection('parts_sales');
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: primary100,
title: Text('Welcome To Test Mode'),
),
body: Column(
children: [
Text('${resultData?['title']}'),
Text('${resultData?['category']}'),
Text('${resultData?['parts_image']}'),
],
),
);
}
}
以下是错误信息。
[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: [firebase_storage/object-not-found] No object exists at the desired reference.
#0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:653:7)
#1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:296:18)
<asynchronous suspension>
#2 MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:499:43)
<asynchronous suspension>
#3 MethodChannelReference.getDownloadURL (package:firebase_storage_platform_interface/src/method_channel/method_channel_reference.dart:45:36)
<asynchronous suspension>
#4 _TestState.getData (package:project/test.dart:52:15)
上图为 Cloud Firestore 收集文档数据
我想我输入的代码是为了获得正确的 url, var ref = FirebaseStorage.instance.ref().child('${resultData?['parts_image']}');
和var url = await ref.getDownloadURL();
但我根本无法解决。 我应该怎么办?
setState((){});
异步工作您的问题可能是您在设置之前使用resultData
。
setState(() {
resultData = result.data();
});
var ref = FirebaseStorage.instance.ref().child('${resultData?['parts_image']}'); 👈 resultData might not be set just yet
将其更改为:
var ref = FirebaseStorage.instance.ref().child('${result.data()?['parts_image']}');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.