我在这里不明白的问题是什么?刚刚开始 Flutter 编码这个天气应用程序项目,来自 Udemy 上的 Flutter 初学者课程



一开始工作正常,但在本次讲座后返回Null

我得到的错误是:

正在执行热重新启动。。。

正在将文件同步到设备moto g52…

2126ms内重新启动应用程序。

I/flutter(13494(:404

I/flutter(13494(:无效

即使在尝试了新密钥之后,它仍然会返回该密钥。

注意:我还处于课程的中途(课程已经很老了(,所以实际上没有人回答问题。

好的,这是一个很长的问题

1(主要飞镖

import 'package:clima/screens/location_screen.dart';
import 'package:flutter/material.dart';
import 'package:clima/screens/loading_screen.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark(),
home: LoadingScreen(),
);
}
}

2(location_screen.dart

import 'package:flutter/material.dart';
import 'package:clima/utilities/constants.dart';
class LocationScreen extends StatefulWidget {
LocationScreen({this.locationWeather});
final locationWeather;
@override
_LocationScreenState createState() => _LocationScreenState();
}
class _LocationScreenState extends State<LocationScreen> {
@override
void initState() {
super.initState();
print(widget.locationWeather);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('images/location_background.jpg'),
fit: BoxFit.cover,
colorFilter: ColorFilter.mode(
Colors.white.withOpacity(0.8), BlendMode.dstATop),
),
),
constraints: BoxConstraints.expand(),
child: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
TextButton(
onPressed: () {},
child: Icon(
Icons.near_me,
size: 50.0,
),
),
TextButton(
onPressed: () {},
child: Icon(
Icons.location_city,
size: 50.0,
),
),
],
),
Padding(
padding: EdgeInsets.only(left: 15.0),
child: Row(
children: <Widget>[
Text(
'32°',
style: kTempTextStyle,
),
Text(
'☀️',
style: kConditionTextStyle,
),
],
),
),
Padding(
padding: EdgeInsets.only(right: 15.0),
child: Text(
"It's 🍦 time in San Francisco!",
textAlign: TextAlign.right,
style: kMessageTextStyle,
),
),
],
),
),
),
);
}
}

3(loading_screen.dart

import 'package:clima/screens/location_screen.dart';
import 'package:flutter/material.dart';
import 'package:clima/services/location_handler.dart';
import 'package:clima/services/networking.dart';
import 'location_screen.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
const myAPI = '7c8b4449639ae2b6b5e3bfd67a0e350f';
class LoadingScreen extends StatefulWidget {
@override
_LoadingScreenState createState() => _LoadingScreenState();
}
class _LoadingScreenState extends State<LoadingScreen> {
late double latitood;
late double longitood;
void initState() {
super.initState();
getLocationData();
}
void getLocationData() async {
Locator loca = Locator();
await loca.getCurrentLocation();
latitood = loca.latitude;
longitood = loca.longitude;
NetworkHelper NetHelp = NetworkHelper(
'https://api.openweathermap.org/data/2.5.weather?lat=$latitood&lon=$longitood&appid=$myAPI');
var weatherDataFinal = await NetHelp.getData();
Navigator.push(context, MaterialPageRoute(builder: (context) {
return LocationScreen(
locationWeather:
weatherDataFinal); //creating a path to location_screen.dart
//and passing/pushing weather data to location screen through a constructor.
}));
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: SpinKitDoubleBounce(
color: Colors.white,
size: 100,
),
),
);
}
}

4(联网。dart

import 'dart:convert'; //imported to convert/use JSON data into our project.
import 'package:http/http.dart' as http;
class NetworkHelper {
NetworkHelper(this.url);
final String url;
Future getData() async {
http.Response response = await http.get(Uri.parse(url));
//Passing the 'url' which is a String, will be converted into URI using 'Uri.parse' method.
if (response.statusCode == 200) {
String data = response.body;
var decodedData = jsonDecode(data);
//decoding and putting data into decodedData variable of dynamic type.
return decodedData;
} else {
print(response.statusCode);
print('Something's wrong I can feel it.');
}
}
}

5(location_handler.dart

import 'package:geolocator/geolocator.dart';
class Locator {    
late double latitude;
late double longitude;
Future<void> getCurrentLocation() async {
try {
Position posi = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.low);
latitude = posi.latitude;
longitude = posi.longitude;
} on Exception catch (e) {
print(e);
}
}
}

依赖项:

地理定位器:^7.0.2

http:^0.13.1

flatter_spingit:^5.1.0

遇到问题

而不是https://api.openweathermap.org/data/2.5.weather?lat=$latitood&lon=$longitood&appid=$myAPI

我把https://api.openweathermap.org/data/2.5/weather?lat=$latitood&lon=$longitood&appid=$myAPI

最新更新