Flutter StreamBuilder返回null

时间:2020-03-31 15:14:14

标签: firebase flutter google-cloud-firestore

@override
  Widget build(BuildContext context) {

    final user = Provider.of<User>(context);

    return StreamProvider<QuerySnapshot>.value(   // irrelevant (?)
      value: DatabaseService().users,
      child: StreamBuilder<UserData>(
        stream: DatabaseService(uid: user.uid).userData,
        builder: (context, snapshot) {
          UserData userData = snapshot.data;
          if (!snapshot.hasData) {
            return ProfileSetup();
          } else {
            return Scaffold(...

我想通过检查Firestore Cloud中是否有该用户的数据来检查用户是否已设置其个人资料。否则,用户将被发送到设置页面。问题是,当云中最终有用户数据时,我会收到一条错误消息和一个红色屏幕半秒钟,但此后它一直继续下去。但是我不明白为什么会有错误消息。

一个构建函数返回null。相关的引起错误的小部件是 StreamBuilder

1 个答案:

答案 0 :(得分:0)

在streambuilders中使用连接状态。 试试这个:

@override
Widget build(BuildContext context) {

  final user = Provider.of<User>(context);

return StreamProvider<QuerySnapshot>.value(   // irrelevant (?)
   value: DatabaseService().users,
   child: StreamBuilder<UserData>(
   stream: DatabaseService(uid: user.uid).userData,
      builder: (context, snapshot) {
       UserData userData = snapshot.data;
       if (snapshot.hasData) {
       switch (snapshot.connectionState) {
       case ConnectionState.none:
                 return Text("No Connections");
       case ConnectionState.waiting:
                return CircularProgressIndicator();
       case ConnectionState.active:
       case ConnectionState.done:
         return snapshot.data.length > 0 ? ScaffoldPage() :ProfileSetup();
    default:
    break;
  }
  } 
          return Text("");