多角色用户登录

问题描述 投票:0回答:1

enter image description here 我想以用户(简单用户)和公司身份登录..这里显示登录成功但页面无法路由

void route(BuildContext context) {
  User? user = FirebaseAuth.instance.currentUser;
  DatabaseReference userRef = FirebaseDatabase.instance.reference().child('user').child(user!.uid);
  userRef.once().then((DatabaseEvent event) {
    if (event.snapshot.value != null) {
      Map<String, dynamic>? userData = event.snapshot.value as Map<String, dynamic>?;
      String? userRole = userData?['userType'];
      if (userRole == "Company") {
        Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => const AdminBar(),
          ),
        );
      } else {
        Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => const bottomBar(),
          ),
        );
      }
    }
  });
}

我应该修改什么?

flutter firebase-realtime-database firebase-authentication
1个回答
0
投票

我重写代码并管理错误情况。它可以帮助您了解错误原因。

还有一个建议,

userType
可能是一家公司的简单用户。
因此,请使用
"COMPANY"
"company" 等大小写样式来管理 userType 值。

这是更新后的代码:

void route(BuildContext context) {
  User? user = FirebaseAuth.instance.currentUser;

  // Check if a user is logged in
  if (user != null) {
    DatabaseReference userRef =
        FirebaseDatabase.instance.reference().child('user').child(user.uid);

    userRef.once().then((DatabaseEvent event) {
      if (event.snapshot.value != null) {
        Map<String, dynamic>? userData =
            event.snapshot.value as Map<String, dynamic>?;
        String? userRole = userData?['userType'];

        // Use a try-catch block to handle errors during navigation
        try {
          if (userRole == "Company") {
            // Use `pushReplacement` to replace the current screen
            Navigator.pushReplacement(
              context,
              MaterialPageRoute(
                builder: (context) => const AdminBar(),
              ),
            );
          } else {
            // Use `pushReplacement` to replace the current screen
            Navigator.pushReplacement(
              context,
              MaterialPageRoute(
                builder: (context) => const BottomBar(),
              ),
            );
          }
        } catch (e) {
          print("Error navigating: $e");
        }
      } else {
        print("User data not found");
      }
    });
  } else {
    print("User not logged in");
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.