如何访问Firebase Firestore字段?打车应用登录跳转异常求助
打车应用身份跳转问题排查与解决

我正在开发一款打车应用,希望实现登录后关闭应用,下次打开时直接跳转至对应首页。应用支持司机或乘客两种登录身份,但目前乘客登录后关闭应用,再次打开会跳转至司机首页。我需要访问status字段来区分司机和乘客身份,从而实现条件跳转。以下是我的代码,请帮忙排查解决!
class SplashServices { void isLogin(BuildContext context) { final auth = FirebaseAuth.instance; final user = auth.currentUser; if (user != null) { Timer( const Duration(seconds: 3), () => Navigator.push(context, MaterialPageRoute(builder: (context) => const DriverPost()))); } else { Timer( const Duration(seconds: 3), () => Navigator.push(context, MaterialPageRoute(builder: (context) => const GettingStarted()))); } } }
问题根源
当前代码仅判断用户是否登录,完全未读取用于区分身份的status字段,导致所有登录用户都统一跳转到司机首页DriverPost。
解决方案
1. 从Firebase获取用户身份信息
假设你的用户身份数据存储在Firestore的users集合中,每个用户文档以UID为ID,包含status字段(值为driver或passenger)。
2. 修改isLogin方法添加身份判断逻辑
import 'package:cloud_firestore/cloud_firestore.dart'; class SplashServices { void isLogin(BuildContext context) { final auth = FirebaseAuth.instance; final user = auth.currentUser; if (user != null) { // 查询当前用户的身份信息 FirebaseFirestore.instance .collection('users') .doc(user.uid) .get() .then((doc) { if (doc.exists) { final String userStatus = doc.data()!['status']; // 根据身份跳转对应页面 Timer( const Duration(seconds: 3), () => Navigator.push( context, MaterialPageRoute( builder: (context) => userStatus == 'driver' ? const DriverPost() : const PassengerHome(), // 替换为你的乘客首页组件 ), ), ); } else { // 用户数据不存在,跳转登录页 _navigateToGettingStarted(context); } }).catchError((_) { // 查询失败,跳转登录页 _navigateToGettingStarted(context); }); } else { _navigateToGettingStarted(context); } } // 提取重复跳转逻辑,简化代码 void _navigateToGettingStarted(BuildContext context) { Timer( const Duration(seconds: 3), () => Navigator.push( context, MaterialPageRoute(builder: (context) => const GettingStarted()), ), ); } }
3. 注意事项
- 确保
pubspec.yaml中已添加Firestore依赖:cloud_firestore: ^latest_version(替换为当前最新版本)。 - 如果使用Realtime Database,只需将查询逻辑替换为对应的Realtime Database API即可。
- 务必在用户登录时将status字段正确写入Firebase数据库。
内容的提问来源于stack exchange,提问作者Muhammad Osama
相关产品推荐
相关产品推荐

