【发布时间】:2021-10-30 20:14:33
【问题描述】:
我是 Flutter 开发的新手,我正在尝试制作一个应用程序,根据他们作为用户的角色将用户重定向到不同的屏幕。从技术上讲,我需要在两个地方实现这一点,在我的 main 构建中,以及在按下登录按钮时。
我现在一直在尝试做的主要是检查用户是否登录,然后获取他的用户 uid,然后使用该 uid 查询数据库以获取他的角色。这似乎是一个非常粗略的解决方案,因为应用程序感觉非常不稳定+崩溃,并且在启动时需要一段时间才能重定向到正确的页面,我不确定我是否应该使用实时数据库而不是正常的数据库.任何有关如何优化这一点的指针将不胜感激。
class MyApp extends StatelessWidget {
late String userRole;
late String path;
@override
Widget build(BuildContext context) {
String userUid = FirebaseAuth.instance.currentUser!.uid;
userRole = "uprav";
path = "";
if(FirebaseAuth.instance.currentUser!.uid.isNotEmpty)
{
Database.setUserUid(userUid);
Database.getRole().then((value) {
userRole = value;
});
switch(userRole) {
case "uprav":
path = "/repair-flow";
break;
case "majs":
path = "/majstor-flow";
break;
case "pred":
path = "/repair-flow";
break;
}
}
print(userRole + " this is .then");
return ScreenUtilInit(
designSize: Size(375, 812),
builder: () => MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Majstor',
theme: ThemeData(
primaryColor: Constants.primaryColor,
scaffoldBackgroundColor: Color.fromRGBO(255, 255, 255, 1),
visualDensity: VisualDensity.adaptivePlatformDensity,
textTheme: GoogleFonts.openSansTextTheme(),
),
initialRoute: FirebaseAuth.instance.currentUser == null ? "/" : path,
onGenerateRoute: _onGenerateRoute,
),
);
}
}
Route<dynamic> _onGenerateRoute(RouteSettings settings) {
switch (settings.name) {
case "/":
return MaterialPageRoute(builder: (BuildContext context) {
return Home();
});
case "/repair-flow":
return MaterialPageRoute(builder: (BuildContext context) {
return RequestServiceFlow();
});
case "/majstor-flow":
return MaterialPageRoute(builder: (BuildContext context){
return MajstorServiceFlow();
});
default:
return MaterialPageRoute(builder: (BuildContext context) {
return Home();
});
}
}
【问题讨论】:
-
我觉得我应该使用 await 或其他东西来确保在执行其他任何操作之前先提取数据;不知道该怎么做。
-
是的,你是对的!
标签: flutter dart asynchronous