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