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

标签 android ios flutter navigation navigator

在这个应用程序中,当用户单击登录页面导航到主页但是当用户在主屏幕上按下返回按钮时,页面导航到登录,所以这不是正确的流程
我triend 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;
      }
    });
  }
我用了
Navigator.of(context, rootNavigator: true).pop(); 
用于关闭对话框
我没有收到任何错误,但我希望当用户按下主屏幕应用程序上的后退按钮进入后台并且当用户从后台打开该应用程序时显示主屏幕而不是登录屏幕
告诉我我在导航中犯的错误以及如何解决它。

最佳答案

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

Navigator.of(context).pop();
Navigator
  .of(context)
  .pushReplacement(
    MaterialPageRoute(
      builder: (BuildContext context) => InterestsPage(
    userAccesstoken: accessToken,
    )
  )
)
这样,它将弹出警报消息,然后将所有以前的页面替换为您想要的页面。
但是,是否需要显示登录页面的逻辑归结为偏好,因为我不能说没有附加代码怎么做。例如,我在登录后将用户存储在本地数据库中。这样,即使没有连接,也可以访问应用程序。

关于android - 如何在flutter中登录后禁用用户返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63576255/

相关文章:

ios - 在 iOS 中使用 map 进行转弯导航

flutter - 如何使用滤镜在 flutter 中切换黑白模式

flutter - 如何在 Flutter 中添加图标的增加/配置权重/粗体(FontWeight)

android - 如何在 ejabberd 服务器中启用流管理?

android - Cordova - 由于联系人许可,Android 应用程序在启动时崩溃

java - 使用 getIntent().getExtras().getString 时出现空指针异常

flutter - Flutter 中的 FractionalOffset 和 Alignment 有什么不同?

android - 自 Oreo/API 26 起允许用户设置通知灯颜色

ios - 使用 CAAnimation 无限旋转两个变量

ios - 警告 : Value was defined but never used; consider replacing with a boolean test