Показывать круговой индикатор при получении текущего местоположения во Flutter? - PullRequest
0 голосов
/ 04 августа 2020

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

Кнопка отправки

 Flexible(
    flex: 0,
    child: Padding(
      padding: EdgeInsets.symmetric(vertical: 160),
      child: GestureDetector(
        child: Container(
          height: 60,
          width: double.infinity,
          color: Color.fromRGBO(34, 83, 148, 1),
          child: ProgressButton(),//Progress Widget
        ),
        onTap: () {
          //getLocation function
          _getLocation();
        },
      ),
   ),
 )

_getLocation function

Future _getLocation() async {
    Location location = new Location();
    LocationData _currentPosition = await location.getLocation();
    

    setState(() {
      SharedPrefrence().setLatitude(_currentPosition.latitude.toString());
      SharedPrefrence().setLongitude(_currentPosition.longitude.toString());
      islocateCompelete = true;
    });

    Future loginstatus = SharedPrefrence().getLogedIn();
    Future gust_status = SharedPrefrence().getGustLogedIn();
    gust_status.then((gustdata) {
     
      loginstatus.then((data) {
       

        if (data == true || gustdata == true) {
          Navigator.pop(context, true);
          Navigator.pushAndRemoveUntil(
              context,
              MaterialPageRoute(builder: (context) => HomeScreen()),
              ModalRoute.withName("/login"));
        } else {
          Navigator.push(
            context,
            MaterialPageRoute(
              builder: (context) => LoginScreen(),
            ),
          );
        }
      });
    });
  }

Виджет ProgressButton

 Widget ProgressButton() {
    if (islocateCompelete == true) {
      return Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          CircularProgressIndicator(
              valueColor: AlwaysStoppedAnimation<Color>(Colors.white)),
        ],
      );
    } else {
      return Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Icon(
            Icons.location_searching,
            color: Colors.white,
            size: 20,
          ),
          Text(
            "Locate Me",
            style: TextStyle(
                color: Colors.white, fontSize: 15, fontWeight: FontWeight.bold),
          ),
        ],
      );
    }
  }

1 Ответ

0 голосов
/ 04 августа 2020

Вам нужно позвонить setState() с isLocateCompelete = false, прежде чем вы начнете получать местоположение.

Future _getLocation() async {

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

    Location location = new Location();

    var _permissionGranted = await location.hasPermission();
    if (_permissionGranted == PermissionStatus.denied) {
      _permissionGranted = await location.requestPermission();
      if (_permissionGranted != PermissionStatus.granted) {
        setState(() {
          islocateCompelete = true;
        });
        return;
      }
    }

    LocationData _currentPosition = await location.getLocation();
    
    //...
    //...
    //rest of the code
}
...