在颤动中以共享首选项存储多个值失败

问题描述 投票:0回答:1

[基本上,我正在创建一个在线产品应用程序,只要用户选择任何产品并单击结帐按钮,它就会检查用户是否登录。在这里,我做了同样的事情,我选择了一个产品,然后进入购物车页面,然后单击“结帐”按钮(这里我没有登录),因此它进入了登录页面并保存了变量,然后我转到购物车页面并单击了“结帐”按钮再次进入登录页面。我已经将变量保存在登录页面中,但是为什么不进行验证。

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);
        }
      }
flutter dart sharedpreferences
1个回答
0
投票

因为您将Navigator.pushReplacement放在if语句之前因此它将直接转到Login页面您可以在Navigator.pushReplacement中移动if您可以从

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

to

if (newuser == false) {
          Navigator.pushReplacement(
            context, new MaterialPageRoute(builder: (context) => Login()));
          print(false);
}
© www.soinside.com 2019 - 2024. All rights reserved.