Flutter Session хранит данные, но не может принимать решения на их основе

Я использую FlutterSession для хранения номера телефона / адреса электронной почты (по выбору пользователя) в качестве метода ведения журнала. в приложение. Сеанс отлично работает в случае электронной почты, но когда я сохраняю и получаю номер телефона, он показывает мне, что на снимке нет данных.

Это метод, в котором я устанавливаю значение сеанса для номера телефона:

void phoneSignIn() async {
    if (phoneNumber == null || phoneNumber.length < 10) {
      print('Please enter a valid phone number!');
    }
    else {
      await fillers.session.set("phoneNum", phoneNumber);
      print('Phone number is: '+ phoneNumber);
      setState(() {
        phoneSignedIn = true;
      });
      var sessionCheck = await fillers.session.get("phoneNum");
      print("Session value: $sessionCheck");
      print(phoneSignedIn);
      Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => OnboardOne()));
    }
  }

В приведенном выше коде я убедился, используя операторы печати, что сеанс хранит значение номера телефона, а также что для phoneSignedIn bool установлено значение true.

Это метод, в котором я устанавливаю значение сеанса для электронной почты:

void signIn() async {
    response = await Dio().post(url,
      data: {
        "email": emailVal,
        "password": passwordVal
      }
    );
    if (response.statusCode == 200) {
      await fillers.session.set('email', emailVal);
      await fillers.session.set('password', passwordVal);
      print('Sign In successful!');
      print('Email: $emailVal');
      print('Password: $passwordVal');
      Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => OnboardOne()));
    }
    else 
    {
      print('Exited with statuscode ${response.statusCode}');
      print('Email: $emailVal');
      print('Password: $passwordVal');
    }
  }

Это моя первая страница, на которой я решаю, на какую страницу перейти, в зависимости от того, вошел ли пользователь в систему или нет:

class _FirstPageState extends State<FirstPage> {
  @override
  Widget build(BuildContext context) {
    return Material(
      child: FutureBuilder(
        future: phoneSignedIn ? session.get("phoneNum") : session.get('email'),
        builder: (context, snapshot) {
          return snapshot.hasData ? Dashboard() : SignUpIn();
        }
      ),
    );
  }
}

Как видите, я не сделал ничего другого при входе в электронную почту (кроме использования backend api для аутентификации электронной почты). В конечном счете, я использую ту же технику для хранения и электронной почты, и номера телефона. Но когда я вошел в систему, используя номер телефона, а затем снова открываю приложение, приложение переходит на страницу SignUpIn (), тогда как на самом деле оно должно перейти на страницу Dashboard (). Также на панели инструментов есть кнопка «Выход», при нажатии на которую значения сеанса очищаются.

Что я делаю неправильно?


person CodeSadhu    schedule 22.02.2021    source источник
comment
не могли бы вы поделиться кодом как Gist или в Github?   -  person Shyju M    schedule 18.03.2021