首页 > 解决方案 > 没有为“用户”类型颤振火库定义方法“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');
          }
        }
      });
    });
  }
}

标签: flutterdartfirebase-authentication

解决方案


您不需要 .then 语句。获取与新版本User的firebase同步,因此您只需从 获取用户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');
          }
        }
      });
    });
  }

推荐阅读