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;//不可访问
},
);
}