gpt4 book ai didi

url - 如何以单独的方法获取 Flutter Firebase 存储?

转载 作者:IT王子 更新时间:2023-10-29 07:08:51 27 4
gpt4 key购买 nike

我已成功将图像保存到我的 Firebase 存储引用中。现在我需要下载它。我看到的例子是以相同的方法上传和下载,使用相同的 StorageUploadTask 和这行代码......

final Uri downloadUrl = (await uploadTask.future).downloadUrl;

我的问题是如何从不需要 uploadTask.future 的单独方法获取 downloadUrl,因为我只在 FirebaseUser 更新其个人资料图片时上传图片?

最佳答案

StorageReference现在有Future<dynamic> getDownloadURL()方法。将结果重新键入字符串并将其与您的 NetworkImage 一起使用小部件:

import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:meta/meta.dart';

class FirestoreImage extends StatefulWidget {
final StorageReference reference;
final Widget fallback;
final ImageProvider placeholder;

FirestoreImage(
{Key key,
@required this.reference,
@required this.fallback,
@required this.placeholder});

@override
FirestoreImageState createState() =>
FirestoreImageState(reference, fallback, placeholder);
}

class FirestoreImageState extends State<FirestoreImage> {
final Widget fallback;
final ImageProvider placeholder;

String _imageUrl;
bool _loaded = false;

_setImageData(dynamic url) {
setState(() {
_loaded = true;
_imageUrl = url;
});
}

_setError() {
setState(() {
_loaded = false;
});
}

FirestoreImageState(
StorageReference reference, this.fallback, this.placeholder) {
reference.getDownloadURL().then(_setImageData).catchError((err) {
_setError();
});
}

@override
Widget build(BuildContext context) => _loaded
? FadeInImage(
image: NetworkImage(_imageUrl),
placeholder: placeholder,
)
: fallback;
}

旧答案:

我刚刚开始使用 Flutter (Dart) 进行开发,所以我的回答肯定不完美(甚至可能很糟糕),但我是这样做的:

import 'dart:typed_data';

import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';

class FirestoreImage extends StatefulWidget {

final StorageReference _reference;

FirestoreImage(this._reference);

@override
FirestoreImageState createState() => FirestoreImageState(_reference);
}

class FirestoreImageState extends State<FirestoreImage> {

Uint8List _imageData;

_setImageData(Uint8List data) {
setState(() {
_imageData = data;
});
}

FirestoreImageState(StorageReference reference) {
reference
.getData(0x3FFFFFFF)
.then(_setImageData)
.catchError((err) {});
}

@override
Widget build(BuildContext context) =>
_imageData == null ? Container() : Image.memory(_imageData);
}

现在你可以显示FirestoreImage调用new FirestoreImage(imageStorageReference) .也许有更好的方法来扩展 Image

关于url - 如何以单独的方法获取 Flutter Firebase 存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48604440/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com