Emj*_*y23 2 authentication dart flutter
我试图在应用程序打开时实现屏幕的有条件显示。
在main.dart中
return Materialapp(
...
home: WelcomePage()
...
);
Run Code Online (Sandbox Code Playgroud)
在WelcomePage.dart中
isLoggedin() async {
prefs = await SharedPreferences.getInstance();
if (prefs.getString('username') == null) {
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(builder: (BuildContext context) => LoginPage()),
(Route<dynamic> route) => false);
}
}
Run Code Online (Sandbox Code Playgroud)
问题: - 用户将打开应用程序,在启动屏幕后,将WelcomePage screen立即显示 ,然后将用户重定向到Login screen。
这段代码满足了我的需要,也是我真正想要的。我想要的是,WelcomePage screen如果用户在应用程序中没有保存的首选项,应用程序将不会显示 ,而是有一段代码检查应用程序是否会显示Login screen或WelcomePage screen。
更新
首先,我真的很感谢给出的答案。这两者都有帮助,但我认为另一个答案就是我正在考虑的答案。但我这样做是这样的:
主程序.dart
Future main() async {
WidgetsFlutterBinding.ensureInitialized();
SharedPreferences prefs = await SharedPreferences.getInstance();
_username = prefs.getString("username");
...
}
return Materialapp(
...
home: _username == null ? LoginPage() : WelcomePage()
...
);
Run Code Online (Sandbox Code Playgroud)
我不认为这是否是正确的方法之一。任何意见/建议将不胜感激。
您可以签username入main()并使用initialRoute来决定要转到哪个页面,这样您就不会每次都
去WelcomePage screen
initialRoute: username == null ? "/welcome" : "/login",
Run Code Online (Sandbox Code Playgroud)
代码片段
String username;
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
SharedPreferences prefs = await SharedPreferences.getInstance();
username = await prefs.getString("username");
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
initialRoute: username == null ? "/welcome" : "/login",
routes: {
'/login': (context) => LoginPage(
title: "demo",
),
"/welcome": (context) => WelcomePage(),
},
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1993 次 |
| 最近记录: |