简体   繁体   中英

How to Concatenate Strings & fetch data flutter

I have problem in api calling i getting a geolocation of current place,i am passing the latitude&longitude but i having a problem is i need to pass the latitude&longitude to certain format like this lat_11.3054724$75.8744252 so i can't try to concatinate the $ sign along with it,Also i am not getting any data when i pass latitude&longitude data i cannot use in api it throws unhandled Exception: NoSuchMethodError: The getter 'latitude' was called on null. E/flutter (27500): Receiver: null E/flutter (27500): Tried calling: latitude unhandled Exception: NoSuchMethodError: The getter 'latitude' was called on null. E/flutter (27500): Receiver: null E/flutter (27500): Tried calling: latitude

But i can print the data to Text but not pass to api

Code

   Future<String> getMainbanner() async {

          var latitude=_currentPosition.latitude.toString();
          var longitude=_currentPosition.longitude.toString();

        var response = await http.post(Urls.HOME_BANNER,
            headers: {"Content-Type": "application/json"},
            body: json.encode({
              "banner_type": "Main_Banner",
              "location": "lat_"+latitude+'$'+longitude,
            }),);
        Map<String, dynamic> value = json.decode(response.body);
        if (response.statusCode == 200) {
          var resp = response.body;
          Map<String, dynamic> value = json.decode(resp);
          var message = value['msg'];
          var banner =value['bannerapp'][0];

          for (int i = 0; i < banner.length; i++) {
            var data = banner[i];

            print("Data:"+data);

          }

        }
        else
          {
            CustomDialogs().showErrorAlert(context, "Main Banner Image NotFound");
          }
      }

Code for fetching Current location

  _getCurrentLocation() {
    final Geolocator geolocator = Geolocator()..forceAndroidLocationManager;

    geolocator
        .getCurrentPosition(desiredAccuracy: LocationAccuracy.best)
        .then((Position position) {
      setState(() {
        _currentPosition = position;
      });

    }).catchError((e) {
      print(e);
    });
  }

Edit: The problem is, that _currentLocation is still null when you call _currentLocation.latitude, because _getcurrentLocation() needs some time to set it. There are different approaches to make it work, depending on how your architecture looks.

Change _getCurrentLocation() to an async function

Future<void> _getCurrentLocation() async {
  final Geolocator geolocator = Geolocator()..forceAndroidLocationManager;

  try {
    final position = await geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.best);
    setState(() {
      _currentPosition = position;
    });

  } catch(e) {
    print(e);
  }
}

And await on it inside getMainbanner

   Future<String> getMainbanner() async {
          await _getCurrentLocation();

          var latitude=_currentPosition.latitude.toString();
          var longitude=_currentPosition.longitude.toString();

        var response = await http.post(Urls.HOME_BANNER,
            headers: {"Content-Type": "application/json"},
            body: json.encode({
              "banner_type": "Main_Banner",
              "location": "lat_"+latitude+'$'+longitude,
            }),);
        Map<String, dynamic> value = json.decode(response.body);
        if (response.statusCode == 200) {
          var resp = response.body;
          Map<String, dynamic> value = json.decode(resp);
          var message = value['msg'];
          var banner =value['bannerapp'][0];

          for (int i = 0; i < banner.length; i++) {
            var data = banner[i];

            print("Data:"+data);

          }

        }
        else
          {
            CustomDialogs().showErrorAlert(context, "Main Banner Image NotFound");
          }
      }

The problem is the $. $ is a special character in dart strings for interpolation so you have to add an escape \ before it.

See here: https://dart.dev/guides/language/language-tour#strings

And you can make use of this string interpolation to build your string:

 var latitude=_currentPosition.latitude;
 var longitude=_currentPosition.longitude;
 ....
"location":"lat_$latitude\$$longitude"
...

Also, you don't need the toString() for latitude and longitude

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM