how to disable user to go back after login in flutter

3,568

The method you are looking for is pushReplacement, and the way to go is:

Navigator.of(context).pop();
Navigator
  .of(context)
  .pushReplacement(
    MaterialPageRoute(
      builder: (BuildContext context) => InterestsPage(
    userAccesstoken: accessToken,
    )
  )
)

This way, it will pop out of the alert message, and then replace all the previous pages with the one that you want.

However, the logic behing wether the login page needs to be displayed comes down to preference, and since I can't say how to do it without addicional code. I, for example, store the user on a local database after login. This way, even without a connection, there is a way to access the app.

Share:
3,568
mayur.pancholi
Author by

mayur.pancholi

Updated on December 18, 2022

Comments

  • mayur.pancholi
    mayur.pancholi over 1 year

    In this app when user click login page is navigate to homepage but when user press back button on home screen then page is navigate to login so this is not a right flow

    I triend navigator.pushReplacement but when user press back button while on home screen app is close and go to background and when user open that app from background then instead showing home screen it show login screen so please give suggestions,

    Here is my code LoginScreen

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

    I used

    Navigator.of(context, rootNavigator: true).pop(); 
    

    for close dialog box

    I don't get any error but I want when user press back button on home screen app goes background and when user open that app from background show home screen not login screen

    Show me where I made mistake in navigation and how to resolve it.