Can't Load Current location in Flutter application

后端 未结 3 844
情歌与酒
情歌与酒 2021-01-14 20:31

I\'m using geolocator plugin and getting current latitude and longitude but i can\'t load that in initstate of my Flutter Application. It showing Render Error.



        
3条回答
  •  [愿得一人]
    2021-01-14 21:06

    As Abbas.M suggestion i'm solving my problem using FutureBuilder Widget.

    FutureBuilder Widget: https://www.youtube.com/watch?v=ek8ZPdWj4Qo

    I'm declaring variable _future

    Future _future;
    

    I'm calling my async method in the initState

    void initState() {
    // TODO: implement initState
    super.initState();
    _future = getCurrentLocation();
    }
    

    Using FutureBuilder widget i solved my problem and i'm passing my async function return value to parameter of FutureBuilder widget.

    This Condition if(snapshot.connectionState == ConnectionState.done) helps to find our async function completed and returned value or not. if it is in Done state then it means function completed and returned.

    If that condition is not satisfied then it means async function is not completed so i'm using CircularProgressIndicator widget to notify user to understand app is loading.

    Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("Flutter Krish"),
        ),
        body: FutureBuilder(
            future: _future,
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.done) {
                if (!snapshot.hasError) {
                  print(snapshot.data.latitude);
                  return Stack(children: [
                    GoogleMap(
                      initialCameraPosition: CameraPosition(
                          target: LatLng(
                              snapshot.data.latitude, snapshot.data.longitude),
                          zoom: 12.0),
                      onMapCreated: mapCreated,
                    ),
                    Positioned(
                      top: 30.0,
                      left: 15.0,
                      right: 15.0,
                      child: Container(
                        height: 50.0,
                        width: double.infinity,
                        decoration: BoxDecoration(
                            borderRadius: BorderRadius.circular(10.0),
                            color: Colors.white),
                        child: TextField(
                          decoration: InputDecoration(
                              border: InputBorder.none,
                              hintText: 'Enter Address',
                              contentPadding:
                                  EdgeInsets.only(top: 15.0, left: 15.0),
                              suffixIcon: IconButton(
                                icon: Icon(Icons.search),
                                onPressed: searchAndNavigate,
                                iconSize: 30.0,
                              )),
                          onChanged: (value) {
                            searchAddress = value;
                          },
                        ),
                      ),
                    ),
                  ]);
                }
              } else {
                return Center(child: CircularProgressIndicator());
              }
            }));
    }
    
    Future getCurrentLocation() async
    {
    var answer = await Geolocator().getCurrentPosition();
    return answer;
    }
    

提交回复
热议问题