未为类型“用户”扑火firestore定义方法“ then”

时间:2020-10-27 13:00:57

标签: flutter dart firebase-authentication

我正在开发一些用户具有管理员角色而其他用户具有用户角色的应用程序。下面的类检查分配给用户的角色,并将其定向到适当的屏幕。问题是我不断收到此错误未为类型'用户'定义'then'方法。我浏览了在此平台上发布的一些文档,并增加了版本确保pubspec.yaml中的软件包已更新,但问题仍然存在。欢迎任何帮助

 class UserManagement {
  Widget handleAuth() {
    return StreamBuilder(
      stream: FirebaseAuth.instance.authStateChanges(),
      builder: (BuildContext context, snapshot) {
        if (snapshot.hasData) {
          print(snapshot.data.uid);
          return AdminDashboard();
        }
        return LoginScreen();
      },
    );
  }

  final auth = FirebaseAuth.instance.currentUser;

  authorizeAdmin(BuildContext context) {
    auth.then((user) {
      FirebaseFirestore.instance
          .collection('users')
          .where('uid', isEqualTo: user.uid)
          .get()
          .then((docs) {
        if (docs.docs[0].exists) {
          if (docs.docs[0].data()['role'] == 'admin') {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => AdminDashboard()),
            );
          } else {
            print('Access Denied');
          }
        }
      });
    });
  }
}

1 个答案:

答案 0 :(得分:2)

您不需要.then语句。使用新版本的firebase来获取Usersynchronous,因此您只需要从FirebaseAuth.instance.currentUser;获取用户并在您的方法中使用它即可。例如,在您的方法中,它看起来像:

final user = FirebaseAuth.instance.currentUser;
  authorizeAdmin(BuildContext context) {
      FirebaseFirestore.instance
          .collection('users')
          .where('uid', isEqualTo: user.uid)
          .get()
          .then((docs) {
        if (docs.docs[0].exists) {
          if (docs.docs[0].data()['role'] == 'admin') {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => AdminDashboard()),
            );
          } else {
            print('Access Denied');
          }
        }
      });
    });
  }