Flutter: системный интерфейс «Location Permissions» диалоговое окно нарушает непрерывность выполнения кода? - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть проект, в котором я использую пакет location. Все работает хорошо, только небольшая проблема: когда приложения запускаются в первый раз и запрашивают разрешение на местоположение (используя диалоговое окно), и пользователь принимает, код на флаттере не продолжает выполнение.

Здесь это код:

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) async {
      try {
        await Provider.of<TurnActiveProvider>(context, listen: false)
            .connectSocket();
      } catch (error) {
        Provider.of<ErrorProvider>(context, listen: false)
            .showError(context, error, _scaffold);
      }
      setState(() {
        _isLoadingSocket = false;
      });
    });
  }

Эта строка провайдера:

await Provider.of<TurnActiveProvider>(context, listen: false)
            .connectSocket();

вызывает и активирует socketio клиент и получает пользовательские координаты. Система показывает диалоговое окно с запросом разрешения, пользователь нажимает ALLOW и окончательный код:

      setState(() {
        _isLoadingSocket = false;
      });

Не выполняется никогда, поэтому на экране всегда отображается CircularProgressIndicator (поскольку флаг _isLoadingSocket никогда не изменяется). Если я перезапущу свое приложение, работает без проблем. Любая помощь с этим?

1 Ответ

0 голосов
/ 21 февраля 2020

Проблема сохраняется. Тем не менее, я нашел решение и спрашиваю разрешения ДО любой другой вещи.

...