【问题标题】:Flutter StreamBuilder returned nullFlutter StreamBuilder 返回 null
【发布时间】:2020-07-12 04:53:39
【问题描述】:
@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 云中是否有用户的任何数据来检查用户是否已经设置了他的个人资料。否则,用户将被发送到设置页面。问题是,当云中最终有用户数据时,我会收到一条错误消息和半秒钟的红屏,但之后它会继续按预期进行。但是我不明白为什么会出现错误消息。

构建函数返回 null。相关的导致错误的小部件是 StreamBuilder

【问题讨论】:

    标签: firebase flutter google-cloud-firestore


    【解决方案1】:

    在流构建器中使用连接状态。 试试这个:

    @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("");
    

    【讨论】:

    • 不幸的是我仍然得到错误。此外,(context, snapshot) 现在带有下划线并表示:此函数的返回类型为“Widget”,但不以 return 语句结尾。尝试添加 return 语句,或将返回类型更改为“void”。
    • 这意味着,您忘记在某些 switch case @Vinzent 中为构建器函数返回小部件
    • 我已经编辑了我的答案,现在试试这个。将 else 条件替换为 return Text("") 或 SizedBox()
    • 我刚刚意识到我有 else { return null; } 在下一个 StreamBuilder 中,这就是我收到错误的原因......无论如何,非常感谢!
    • 但是现在使用连接状态帮助我摆脱了另一个问题,所以谢谢:)
    猜你喜欢
    • 2021-04-19
    • 2019-10-01
    • 2021-01-28
    • 2020-12-19
    • 2021-07-26
    • 2021-06-24
    • 2020-01-18
    • 2020-03-25
    • 2020-08-23
    相关资源
    最近更新 更多