【发布时间】:2020-11-29 02:30:07
【问题描述】:
您好,我是 Flutter 的新手,正在制作一个预约应用程序,需要筛选两种类型的用户,即患者和医生。
class DashboardPage extends StatefulWidget {
@override
_DashboardPageState createState() => _DashboardPageState();
}
class _DashboardPageState extends State<DashboardPage> {
UserProvider userProvider;
final AuthMethods _authMethods = AuthMethods();
@override
void initState() {
super.initState();
SchedulerBinding.instance.addPostFrameCallback((_) async {
userProvider = Provider.of<UserProvider>(context, listen: false);
await userProvider.refreshUser();
_authMethods. getUserDetails();
});
}
User user = User();
@override
Widget build(BuildContext context) {
if (user.role == 'patient') {
return PatientHomePage();
}
else if (user.role == 'doctor') {
return DoctorHomePage();}
return Container(color: Colors.red,);
}
}
角色变量在另一个 dart 文件中定义:
class User { String uid; String name; String email; String role = "patient"; String profilePhoto; User({ this.uid, this.name, this.email, this.role, this.profilePhoto, }); ........... }
当用户登录时,默认值“患者”被分配给它。Future<void> addDataToDb(FirebaseUser currentUser) async { User user = User( uid: currentUser.uid, email: currentUser.email, name: currentUser.displayName, profilePhoto: currentUser.photoUrl, role: "patient"); firestore .collection(USERS_COLLECTION) .document(currentUser.uid) .setData(user.toMap(user)); }这一切都发生在另一个 dart 文件中
但是这个逻辑并没有按预期工作,因为它只在手机上显示红屏,这意味着 从 firebase 获取 user.role 存在一些问题。 请帮帮我...
【问题讨论】:
-
我没有看到您正在为您在此处创建的新
User对象User user = User();设置role变量。 -
角色变量定义在另一个 dart 文件中``
-
class User { String uid; String name; String email; String role = "patient"; String profilePhoto; User({ this.uid, this.name, this.email, this.role, this.profilePhoto, }); ........... } -
是的,它必须在
User模型文件中定义对吧?但是您需要为其分配一个值。你在哪里给它赋值? -
用户登录时会为其分配默认值“患者”。
Future<void> addDataToDb(FirebaseUser currentUser) async { User user = User( uid: currentUser.uid, email: currentUser.email, name: currentUser.displayName, profilePhoto: currentUser.photoUrl, role: "patient"); firestore .collection(USERS_COLLECTION) .document(currentUser.uid) .setData(user.toMap(user)); }这一切都发生在另一个 dart 文件中。