如何禁止用户在flutter中登录后返回

may*_*r.p 10 navigation android navigator ios flutter

在此应用程序中,当用户单击登录页面时导航到主页,但当用户按主屏幕上的后退按钮时,页面将导航到登录,因此这不是正确的流程

我尝试 navigator.pushReplacement 但是当用户在主屏幕上的应用程序关闭时按下后退按钮并转到后台时,当用户从后台打开该应用程序然后显示主屏幕时,它会显示登录屏幕,所以请提供建议,

这是我的代码登录屏幕

Future<void> login(
      String emailId, String password, String accessToken) async {
    final dio = Dio(); // Provide a dio instance
    String token = AppStrings.keyBearer + accessToken;
    var customHeaders = {
      AppStrings.authorization: token,
      AppStrings.keyContentType: AppStrings.valueContentType
    };

    dio.options.headers.addAll(customHeaders);
    final client = RestClient(dio);
    await client
        .loginUser(LoginUser(
            deviceToken: AppStrings.valueDeviceToken,
            lastLoginPlatform: AppStrings.valuePlatform))
        .then((res) {
          if(res.interests.isEmpty){
            AppHelper.showToastMessage(
                AppStrings.message_logged_in_successfully);
            Navigator.of(context, rootNavigator: true).pop();
            Navigator.push(
                context,
                MaterialPageRoute(
                    builder: (context) => InterestsPage(
                      userAccesstoken: accessToken,
                    )));
          }
          else{
            AppHelper.showToastMessage(
                AppStrings.message_logged_in_successfully);
            Navigator.of(context, rootNavigator: true).pop();
            Navigator.push(
                context,
                MaterialPageRoute(
                    builder: (context) =>  HomePage(
                      userAccesstoken: accessToken,
                      userInterests: res.interests
                    )));
          }
    }).catchError((Object obj) {
      switch (obj.runtimeType) {
        case DioError:
          final res = (obj as DioError).response;
          Navigator.of(context, rootNavigator: true).pop();
          logger.e(res.statusMessage);
          AppHelper.showToastMessage(AppStrings.message_something_went_wrong);
          break;
      }
    });
  }
Run Code Online (Sandbox Code Playgroud)

我用了

Navigator.of(context, rootNavigator: true).pop(); 
Run Code Online (Sandbox Code Playgroud)

用于关闭对话框

我没有收到任何错误,但我希望当用户按主屏幕应用程序上的后退按钮时进入后台,并且当用户从后台打开该应用程序时显示主屏幕而不是登录屏幕

告诉我我在导航中犯了哪些错误以及如何解决它。

Ant*_*ira 13

您正在寻找的方法是pushReplacement,而要走的路是:

Navigator.of(context).pop();
Navigator
  .of(context)
  .pushReplacement(
    MaterialPageRoute(
      builder: (BuildContext context) => InterestsPage(
    userAccesstoken: accessToken,
    )
  )
)
Run Code Online (Sandbox Code Playgroud)

这样,它就会弹出警报消息,然后将前面的所有页面替换为您想要的页面。

然而,是否需要显示登录页面的逻辑取决于偏好,因为我无法说出在没有附加代码的情况下如何做到这一点。例如,我在登录后将用户存储在本地数据库中。这样,即使没有连接,也可以访问该应用程序。