我创建了一个名为FirestoreStreamBuilder的StatelessWidget,该StatelessWidget创建一个Stream并返回一个子代。
class FirestoreStreamBuilder extends StatelessWidget {
FirestoreStreamBuilder({@required this.collectionReference, @required this.child, @required this.noDataChild});
final String collectionReference;
final Widget child;
final Widget noDataChild;
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection(collectionReference).snapshots() ,
builder: (context, snapshot) {
if (!snapshot.hasData) return noDataChild;
return child;
},
);
}
}
我需要使snapshot
可以访问child
。我该怎么办?
示例:
FirestoreStreamBuilder(
collectionReference: 'collection',
child: Text('I want to acces to snapshot here $snapshot'), //How can I access snapshot from here?
noDataChild: Container(),
)
答案 0 :(得分:1)
创建自定义回调
typedef OnDataReceived = void Function(DocumentSnapShot);//or your return type
class FirestoreStreamBuilder extends StatelessWidget {
FirestoreStreamBuilder({@required this.collectionReference, @required this.child,
@required this.noDataChild, @required this.onDataReceived});
final String collectionReference;
final Widget child;
final Widget noDataChild;
final OnDataReceived onDataReceived;
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection(collectionReference).snapshots() ,
builder: (context, snapshot) {
if (!snapshot.hasData) {
onDataReceived(snapshot);
return noDataChild;
}
return child;
},
);
}
}
访问小部件中的快照
FirestoreStreamBuilder(
collectionReference: 'collection',
child: Text('Hurray you got snapshot !'),
noDataChild: Container(),
onDataReceived:(snapshot){
//TODO your task with snapshot
}
)