如何解决即使经过正确的纬度和经度,也可以获得其他位置的天气
我正在使用此天气API,该API需要经纬度才能获取天气。我可以获取位置的经度和纬度(尝试打印它们并且它们是正确的),但是当我在API链接中输入它们时,它会显示其他纬度和经度的天气。我尝试将位置的经纬度手动放置在链接中,它的工作原理绝对不错。有什么问题吗?
import 'package:flutter/material.dart';
import 'package:clima/services/location.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
double key;
class LoadingScreen extends StatefulWidget {
@override
_LoadingScreenState createState() => _LoadingScreenState();
}
class _LoadingScreenState extends State<LoadingScreen> {
var lati;
var longi;
@override
void initState() {
super.initState();
}
void getData() async {
http.Response r = await http.get('http://api.weatherstack.c'
'om/current?access_key=41eb36e0c5f82e3ddce66ef01af877a1&query=$lati,$longi');
String s = r.body;
var data1 = jsonDecode(s)['location']['lat'];
var data2 = jsonDecode(s)['location']['lon'];
print(data1);
print(data2);
print(lati);
print(longi);
}
void getlocation() async {
location a = location();
await a.getclocation();
lati = a.lat;
longi = a.long;
}
Widget build(BuildContext context) {
getlocation();
getData();
return Scaffold();
}
}
另一个名为location的类
import 'package:geolocator/geolocator.dart';
class location{
double lat;
double long;
Future<void> getclocation() async{
// this function is defined in another class
Position position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.low);
lat=position.latitude;
long=position.longitude;
}
}
输出为
41.250
1.300
28.7041
77.1025
解决方法
您需要等到实际操作完成。
有关“未来”工作原理的更广泛的解释,请参见What is a Future and how do I use it?
如果您有async
函数,即使它是Future<T>
,也要使其返回一个Future<void>
。然后,如果需要,请确保您await
。在用户界面中,您不能只停止并冻结所有内容,还需要FutureBuilder播放精美的影片并在等待结果时显示一些动画。
class _LoadingScreenState extends State<LoadingScreen> {
Future<String> getDataFuture;
@override
void initState() {
super.initState();
getDataFuture = getData();
}
Future<String> getData() async {
final position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.low);
final r = await http.get('http://api.weatherstack.com/current?access_key=41eb36e0c5f82e3ddce66ef01af877a1&query=$position.latitude,$position.longitude');
return r.body;
}
Widget build(BuildContext context) {
return FutureBuilder(
future: getDataFuture,builder: (context,snapshot) {
if(snapshot.hasData) {
return Text('Received response: ${snapshot.data}');
} else if(snapshot.hasError) {
return Text('Error: ${snapshot.error.toString()}');
} else {
return CircularProgressIndicator();
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。