Текущий пользователь - предыдущий при выходе и повторном входе - PullRequest
2 голосов
/ 12 марта 2020

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

Я думаю, что метод выхода из системы является правильным, потому что, как я объяснил ранее, в других виджетах в приложении, текущий пользователь является правильным.

static Future<void> logOut() async {
    ParseUser currentUser = await ParseUser.currentUser();
    ParseResponse userResponse =
        await ParseUser.getCurrentUserFromServer(currentUser.sessionToken);
    ParseUser user = userResponse.result as ParseUser;
    await user.logout(deleteLocalUserData: true);
  }

Это метод входа в систему

Future<ParseResponse> login() async {
    try {
      final Map<String, dynamic> queryParams = <String, String>{
        keyVarUsername: username,
        keyVarPassword: password
      };

      final Uri url = getSanitisedUri(_client, '$keyEndPointLogin',
          queryParams: queryParams);
      _saveChanges();
      final Response response =
          await _client.get(url, headers: <String, String>{
        keyHeaderRevocableSession: '1',
      });

      return await _handleResponse(
          this, response, ParseApiRQ.login, _debug, parseClassName);
    } on Exception catch (e) {
      return handleException(e, ParseApiRQ.login, _debug, parseClassName);
    }
  }

Это класс , который появляется сразу после завершения входа в систему и где я пытаюсь получить текущего пользователя , достигнув предыдущего пользователя .

class UserInterfaceAppPage extends StatefulWidget {

  @override
  _UserInterfaceAppPageState createState() => _UserInterfaceAppPageState();
}

class _UserInterfaceAppPageState extends State<UserInterfaceAppPage> {
  int _currentIndex = 0;

  static List<Widget> _widgetOptions = <Widget>[];
  Future<SharedPreferences> pref;
  Future<bool> dishes;

  _UserInterfaceAppPageState() {
    initState();
  }

  @override
  void initState() {
    super.initState();

    dishes = DbHelper.insertDishes();

    Future<User> _currentUser = ParseManager().getActualUser();

Это метод getActualUser () , где я получаю текущего пользователя.

Future<User> getActualUser() async {
    ParseUser currentUser = await ParseUser.currentUser();
    ParseResponse userResponse =
        await ParseUser.getCurrentUserFromServer(currentUser.sessionToken);
    ParseUser user = userResponse.result as ParseUser;

    User actualUser = User.fromParse(user);

    return actualUser;
  }

Пожалуйста, дайте мне знать, если вам нужно больше информации о каком-либо методе или классе в моем приложении. Я пробовал так много вещей, включая обновление SDK, но у меня последняя версия, и я не смог найти подобную проблему.

Наконец, это вывод команды flutter doctor

[✓] Flutter (Channel stable, v1.12.13+hotfix.8, on Mac OS X 10.15.3 19D76, locale es-ES)

[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
[✓] Xcode - develop for iOS and macOS (Xcode 11.2.1)
[✓] Android Studio (version 3.6)
[!] VS Code (version 1.43.0)
    ✗ Flutter extension not installed; install from
      https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter
[✓] Connected device (1 available)

! Doctor found issues in 1 category.

1 Ответ

1 голос
/ 12 марта 2020

Список, в котором я хранил свои виджеты, был stati c, поэтому данные никогда не будут уничтожены, пока я не убил приложение.

static List<Widget> _widgetOptions = <Widget>[];

Решение: Удалите stati c из списка виджетов

List<Widget> _widgetOptions = <Widget>[];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...