我正在使用此天气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
最佳答案
您需要等待直到操作真正完成。
有关Future如何工作的更广泛的解释,请参见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();
}
}
}
关于flutter - 即使经过正确的纬度和经度,也可以获得其他位置的天气,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63378492/