这是我的代码
import 'package:flutter/material.dart';
import 'package:climate/services/location.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
const apiKey = '78c0a5319f932d3e171aa34ab51dd7e3';
class LoadingScreen extends StatefulWidget {
@override
_LoadingScreenState createState() => _LoadingScreenState();
}
class _LoadingScreenState extends State<LoadingScreen> {
late double latitude;
late double longitude;
@override
void initState() {
super.initState();
getLocation();
}
void getLocation() async {
Location location = Location();
await location.getCurrentLocation();
latitude = location.latitude;
longitude = location.longitude;
}
void getData() async {
http.Response reponse = await http.get(Uri.parse(
"https://api.openweathermap.org/data/2.5/weather?lat=$latitude&lon=$longitude&appid=$apiKey"));
if (reponse.statusCode == 200) {
String data = reponse.body;
int condition = jsonDecode(data)['weather'][0]['id'];
print(condition);
double temp = jsonDecode(data)['main']['temp']; //main.temp
print(temp);
String city = jsonDecode(data)['name']; //name
print(city);
} else {
print(reponse.statusCode);
}
print(reponse.body);
}
@override
Widget build(BuildContext context) {
getData();
return Scaffold();
}
}
问题是它说经度和纬度需要后期初始化,当我删除后期时,它会抛出一个错误,说需要初始化。
我试图建立一个天气应用程序使用flutter,但它不断抛出这个错误,我试图删除晚修饰符,但然后它抛出一个错误,说需要初始化。但是如果我保留late修饰符,它会说LateError:
LateInitializationError:字段“latitude”尚未初始化
4条答案
按热度按时间tzdcorbm1#
一个可空的变量才是你想要的,而不是一个迟到的变量。要检查某个东西是否已经初始化,你应该使用一个可空变量,并且你的代码已经设置好了。
只是改变
到
pw136qt22#
首先,将此代码添加到android/app/src/AndroidManifest.xml文件中
重建你的APP我希望你的问题会消失。
我面对这个问题,我用这种方式解决了这个问题。
ulydmbyx3#
替换:
有:
尝试在启动画面或更早的画面上请求位置权限。这可以让你在应用程序启动时快速获取纬度和经度。
yrefmtwq4#
试试这个功能