如何在Flatter中检索Firebase存储图像流?

如何在Flatter中检索Firebase存储图像流?,firebase,flutter,dart,google-cloud-firestore,firebase-storage,Firebase,Flutter,Dart,Google Cloud Firestore,Firebase Storage,我已经将一些照片上传到firebase存储中的一个名为“照片”的文件中,我希望能够通过流将它们检索到我的应用程序中。我以前通过Firebase云数据库通过点击我的StreamBuilder中的Firestore.instance.collection('messages').snapshots()属性来实现这一点,但我不知道如何访问Firebase存储快照并将其作为流上传到我的应用程序中 这是我的邮件快照代码,我希望它有帮助: final _firestore = Firestore.inst

我已经将一些照片上传到firebase存储中的一个名为“照片”的文件中,我希望能够通过流将它们检索到我的应用程序中。我以前通过Firebase云数据库通过点击我的StreamBuilder中的Firestore.instance.collection('messages').snapshots()属性来实现这一点,但我不知道如何访问Firebase存储快照并将其作为流上传到我的应用程序中

这是我的邮件快照代码,我希望它有帮助:


final _firestore = Firestore.instance;

  void messagesStream() async {
    await for (var message in _firestore.collection('messages').snapshots()){
      for (var snapshot in message.documents){
        print(snapshot.data);
      }
    }
  }

@override
  Widget build(BuildContext context) {
    return Scaffold(

body: SafeArea(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[

            StreamBuilder<QuerySnapshot>(
                stream: Firestore.instance.collection('messages').snapshots(),
                builder: (context, snapshot){

                  if (!snapshot.hasData){
                    return Center(
                      child: CircularProgressIndicator(backgroundColor: Colors.lightBlueAccent,),
                    );
                  } else {
                final messages = snapshot.data.documents;
                List<Text> messageWidgets = [];
                for (var message in messages){
                  final messageText = message.data['text'];
                  final messageSender = message.data['sender'];

                  final messageWidget = Text('$messageText from $messageSender');
                  messageWidgets.add(messageWidget);
                }
                return Column(children: messageWidgets,);
              }

            }
            ),
),
},

final _firestore=firestore.instance;
void messagesStream()异步{
等待(_firestore.collection('messages').snapshots()中的var消息){
for(message.documents中的var快照){
打印(快照数据);
}
}
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:安全区(
子:列(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
StreamBuilder(
流:Firestore.instance.collection('messages').snapshots(),
生成器:(上下文,快照){
如果(!snapshot.hasData){
返回中心(
child:CircularProgressIndicator(背景色:Colors.lightBlueAccent,),
);
}否则{
最终消息=snapshot.data.documents;
列表messageWidgets=[];
for(消息中的var消息){
final messageText=message.data['text'];
final messageSender=message.data['sender'];
final messageWidget=Text(“$messageText from$messageSender”);
添加(messageWidget);
}
返回列(子项:messageWidgets,);
}
}
),
),
},

所以我发现你不能从firebase存储创建流,但我能做的是,在我的firebase云数据库中,启动一个名为“my_collection”的新集合,并在一个新文档中创建一个自动ID,其中包含一个名为“image”的字段,该字段是一个字符串,带有对internet上的图像的http引用,或者一个你可以上传的图像上传到互联网(这是我在imgur.com上所做的,归功于他们)!下面是我的代码,我希望它能帮助其他人!如果没有,请看一看由iampawan编写的代码,他帮了我很多


所以我发现你不能从firebase存储创建流,但我能做的是,在我的firebase云数据库中,启动一个名为“my_collection”的新集合,并在一个新文档中创建一个自动ID,其中包含一个名为“image”的字段,该字段是一个字符串,带有对internet上的图像的http引用,或者一个你可以上传到的图像互联网(这是我在imgur.com上所做的,归功于他们)!下面是我的代码,我希望它能帮助其他人!如果没有,请看一下由iampawan编写的代码,他帮了我很多


class MyList extends StatefulWidget {

  @override
  _MyListState createState() => _MyListState();
}



class _MyListState extends State<MyList> {

  StreamSubscription<QuerySnapshot> subscription;
  List <DocumentSnapshot> myList;

  final CollectionReference collectionReference = Firestore.instance.collection('my_collection');
  final DocumentReference documentReference = Firestore.instance.collection('my_collection').document('GFWRerw45DW5GB54p');

  @override
  void initState() {
    super.initState();
    subscription = collectionReference.snapshots().listen((datasnapshot) {
      setState(() {
        myList = datasnapshot.documents;
      });
    });
  }

@override
void dispose() {
  subscription?.cancel();
  super.dispose();
  }

  @override
  Widget build(BuildContext context) {

    return myList != null ?
        ListView.builder(
            itemCount: myList.length,
            itemBuilder: (context, index){
          String imgPath = myList[index].data['image'];
          return MyCard(assetImage: Image.network(imgPath), function:
              (){
            if (imgPath == myList[0].data['image']){
              Navigator.pushNamed(context, MyMenu.id);
            } else if (imgPath == myList[1].data['image']){
              Navigator.pushNamed(context, YourMenu.id);
            } else if (imgPath == myList[2].data['image']){
              Navigator.pushNamed(context, HisMenu.id);
            } else if (imgPath == myList[3].data['image']){
              Navigator.pushNamed(context, HerMenu.id);
            }
            },);
        })
        : Center(child: CircularProgressIndicator(),
    );

  }
}

MyCard({@required this.assetImage, @required this.function});
final Image assetImage;
final Function function;