Не удалось сохранить несколько значений в общем предпочтении во флаттере - PullRequest
0 голосов
/ 28 апреля 2020

По сути, я создаю онлайн-приложение для продукта, когда пользователь выбирает какой-либо продукт и нажимает кнопку «Оформить заказ», он проверяет, является ли пользователь логином или нет. Здесь я сделал то же самое, я выбрал продукт, зашел на страницу корзины и нажал кнопку «Оформить заказ» (здесь я не вошел), поэтому он перешел на страницу входа и сохранил переменные, а затем я go перешел на страницу корзины и нажал на кнопка оформления заказа снова переходит на страницу входа. Я уже сохранил переменные на странице входа, но почему это не проверка.

Loginpage.dart

  Future<UserRegister> getLogin(UserLogin userLogin) async{
    final String apiUrl="http://cashback.us-east-2.elasticbeanstalk.com/user/login";
    var userLoginJson = userLogin.toJson();
    final response=await http.post(apiUrl,body: json.encode(userLoginJson),headers: {"content-type" : "application/json",
      "Accept": "application/json",}
    );
    print(response);
    if(response.statusCode >= 200 && response.statusCode < 300){
      final responseString=response.body;
      print(responseString);
      var result = userRegisterFromJson(responseString);
      print(result.user.userId);
      print(result.user.name);
      print(result.user.token);
      print(result.user.mobile);
      print(result.user.isDriver);
      print(result.driver.driverId);
      prefs.setBool('login', true);
      prefs.setString('userid', result.user.userId.toString());
      prefs.setString('name', result.user.name);
      prefs.setString('mobile', result.user.mobile);                  //Here i am storing the values
      prefs.setString('isDriver', result.user.isDriver.toString());
      prefs.setString('driverId', result.driver.driverId.toString());
      prefs.setString('token', result.user.token);
      return result;
    }else{
      final responseString=response.body;
      var result = json.decode(responseString);
      print(result);
      return null;
    }
  }
RaisedButton(
onPressed(){
                                getLogin(login);
                                Navigator.of(context).push(MaterialPageRoute(
                                    builder: (context) => MainPage()));
}
)

Cartpage.dart

  SharedPreferences logindata;
  bool newuser;
    PlatformButton(
                          onPressed: (){
                            check_if_already_login();
                          },
                          child: Text('Checkout',style: TextStyle(color: Colors.white),),
                            androidFlat: (_) =>
                                MaterialFlatButtonData(color: Colors.cyan),
                            ios: (_) =>
                                CupertinoButtonData(color: Colors.cyan)
                        ),
      Future<void> check_if_already_login() async {
        logindata = await SharedPreferences.getInstance();
        newuser = (logindata.getBool('login') ?? true);
        Navigator.pushReplacement(
            context, new MaterialPageRoute(builder: (context) => Login()));
        if (newuser == false) {
          print(false);
        }
      }

1 Ответ

0 голосов
/ 29 апреля 2020

Поскольку вы ставите Navigator.pushReplacement перед if заявлением
Таким образом, оно будет напрямую go на Login странице
Вы можете переместиться Navigator.pushReplacement внутрь if
Вы можете изменить с

Navigator.pushReplacement(
            context, new MaterialPageRoute(builder: (context) => Login()));
if (newuser == false) {

до

if (newuser == false) {
          Navigator.pushReplacement(
            context, new MaterialPageRoute(builder: (context) => Login()));
          print(false);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...