繁体   English   中英

如何从 Flutter 中的 Firebase 存储中检索图像 URL?

[英]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)

这是 Firebase 存储 上图是 Firebase 存储

这是 Cloud Firestore 收集文档数据

上图为 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM