首页 > 解决方案 > Flutter 屏幕的条件渲染

问题描述

我正在尝试在应用程序打开时实现屏幕的有条件显示。

在 main.dart

return Materialapp(
  ...
  home: WelcomePage()
  ...
);

在 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);
  }
}

问题: - 用户将打开应用程序,在启动屏幕后,WelcomePage screen将立即显示,然后将用户重定向到Login screen.

这段代码做了我需要的,但我真正想要的。我想要的是WelcomePage screen如果用户在应用程序中没有保存的首选项,应用程序将不会显示,而是有一个代码检查应用程序是否会显示Login screenWelcomePage screen.

更新

首先,我非常感谢给出的答案。这两者都有帮助,但我认为另一个答案是我正在考虑的答案。但我这样做是这样的:

主要.dart

Future main() async {
  WidgetsFlutterBinding.ensureInitialized();

  SharedPreferences prefs = await SharedPreferences.getInstance();

  _username = prefs.getString("username");
  ...
} 

return Materialapp(
  ...
  home: _username == null ? LoginPage() : WelcomePage()
  ...
);

我不认为这是否是正确的方法之一。任何意见/建议将不胜感激。

标签: flutterauthenticationdart

解决方案


因此,根据我的理解,如果用户以共享偏好退出,您正在尝试确保在启动屏幕之后将用户重定向到适当的页面。所以你可以做的是把 isLoggedin 方法放在你的初始屏幕页面中......少打字..查看示例代码。所以计时器是启动画面应该持续多长时间

@override
  void initState() {
    super.initState();
    loadData();
  }

  Future<Timer> loadData() async {
    return new Timer(Duration(seconds: 5), isLoggedin());
  }

isLoggedin() async {
  prefs = await SharedPreferences.getInstance();
  if (prefs.getString('username') == null) {
    Navigator.of(context).pushAndRemoveUntil(
      MaterialPageRoute(builder: (BuildContext context) => LoginPage()),
      (Route<dynamic> route) => false);
  }
}

所以在你的启动屏幕页面中你可以这样做......添加一个计时器,当计时器完成时执行以检查用户


推荐阅读