Dart 获取用户ID后如何使用FutureBuilder?
如果要获取用户列表, 只需将Dart 获取用户ID后如何使用FutureBuilder?,dart,flutter,google-cloud-firestore,Dart,Flutter,Google Cloud Firestore,如果要获取用户列表, 只需将Firestore.instance.collection(“users”).snapshots()设置为Futurebuilder的future: 但是,如何使用FutureBuilder使用userDataRef()获取基于userId的用户数据呢 Future<Stream<DocumentSnapshot>> userDataRef() async { final FirebaseUser user = await auth
Firestore.instance.collection(“users”).snapshots()设置为Futurebuilder的future:
但是,如何使用FutureBuilder使用userDataRef()
获取基于userId的用户数据呢
Future<Stream<DocumentSnapshot>> userDataRef() async {
final FirebaseUser user = await auth.currentUser();
return Firestore.instance
.collection("users")
.document(user.uid).snapshots();
}
如有任何建议,将不胜感激
谢谢。您可以使用嵌套的FutureBuilder
,如下所示:
Widget nestedFutureBuilders(){
return FutureBuilder(
future: YourFirstRequest,
builder: (BuildContext context, AsyncSnapshot<String> snapshotOne) {
switch (snapshotOne.connectionState) {
case ConnectionState.none:
return Text('Press button to start.');
case ConnectionState.active:
case ConnectionState.waiting:
return Text('Awaiting result...');
case ConnectionState.done:
if (snapshotOne.hasError)
return Text('Error: ${snapshotOne.error}');
return FutureBuilder<String>(
future: YourSecondRequest, // which is related the first request data (snapshotOne.data).
builder: (BuildContext context, AsyncSnapshot<String> snapshotTwo) {
switch (snapshotTwo.connectionState) {
case ConnectionState.none:
return Text('Press button to start.');
case ConnectionState.active:
case ConnectionState.waiting:
return Text('Awaiting result...');
case ConnectionState.done:
if (snapshotTwo.hasError)
return Text('Error: ${snapshotTwo.error}');
return BuildYourUIHere();// you have both data here(snapshotOne.data & snapshotTwo.data)
}
return null; // unreachable
},
);
}
return null; // unreachable
},
);
}
nestedFutureBuilders()小部件{
回归未来建设者(
未来:你的第一个请求,
生成器:(BuildContext上下文,AsyncSnapshot snapshotOne){
开关(snapshotOne.connectionState){
案例连接状态。无:
返回文本('按下按钮开始');
案例连接状态.active:
案例连接状态。正在等待:
返回文本('等待结果…');
案例连接状态。完成:
if(snapshotOne.hasError)
返回文本('Error:${snapshotOne.Error}');
回归未来建设者(
future:YourSecondRequest,//与第一个请求数据(snapshotOne.data)相关。
生成器:(BuildContext上下文,异步快照快照二){
开关(快照2.connectionState){
案例连接状态。无:
返回文本('按下按钮开始');
案例连接状态.active:
案例连接状态。正在等待:
返回文本('等待结果…');
案例连接状态。完成:
if(snapshotTwo.hasError)
返回文本('Error:${snapshotTwo.Error}');
return BuildYourUIHere();//这里有两个数据(snapshotOne.data和snapshotTwo.data)
}
返回null;//不可访问
},
);
}
返回null;//不可访问
},
);
}
您可以使用嵌套的FutureBuilder
,如下所示:
Widget nestedFutureBuilders(){
return FutureBuilder(
future: YourFirstRequest,
builder: (BuildContext context, AsyncSnapshot<String> snapshotOne) {
switch (snapshotOne.connectionState) {
case ConnectionState.none:
return Text('Press button to start.');
case ConnectionState.active:
case ConnectionState.waiting:
return Text('Awaiting result...');
case ConnectionState.done:
if (snapshotOne.hasError)
return Text('Error: ${snapshotOne.error}');
return FutureBuilder<String>(
future: YourSecondRequest, // which is related the first request data (snapshotOne.data).
builder: (BuildContext context, AsyncSnapshot<String> snapshotTwo) {
switch (snapshotTwo.connectionState) {
case ConnectionState.none:
return Text('Press button to start.');
case ConnectionState.active:
case ConnectionState.waiting:
return Text('Awaiting result...');
case ConnectionState.done:
if (snapshotTwo.hasError)
return Text('Error: ${snapshotTwo.error}');
return BuildYourUIHere();// you have both data here(snapshotOne.data & snapshotTwo.data)
}
return null; // unreachable
},
);
}
return null; // unreachable
},
);
}
nestedFutureBuilders()小部件{
回归未来建设者(
未来:你的第一个请求,
生成器:(BuildContext上下文,AsyncSnapshot snapshotOne){
开关(snapshotOne.connectionState){
案例连接状态。无:
返回文本('按下按钮开始');
案例连接状态.active:
案例连接状态。正在等待:
返回文本('等待结果…');
案例连接状态。完成:
if(snapshotOne.hasError)
返回文本('Error:${snapshotOne.Error}');
回归未来建设者(
future:YourSecondRequest,//与第一个请求数据(snapshotOne.data)相关。
生成器:(BuildContext上下文,异步快照快照二){
开关(快照2.connectionState){
案例连接状态。无:
返回文本('按下按钮开始');
案例连接状态.active:
案例连接状态。正在等待:
返回文本('等待结果…');
案例连接状态。完成:
if(snapshotTwo.hasError)
返回文本('Error:${snapshotTwo.Error}');
return BuildYourUIHere();//这里有两个数据(snapshotOne.data和snapshotTwo.data)
}
返回null;//不可访问
},
);
}
返回null;//不可访问
},
);
}