flutter - 调用 api 时在 null 上调用了方法“[]”
问题描述
我想从开放天气 api 中获取数据,并且我不断得到这个:
NoSuchMethodError:在 null 上调用了方法“[]”。Reciever:null 尝试调用:
是api还是代码有问题?编辑器没有显示任何错误请帮忙
我的代码:
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
void main() {
runApp(MaterialApp(
title: 'Weather',
home: Weather(),
));
}
String api_key = 'the key';
Future<List> fetchData() async {
var result = await http.get(Uri.http('http://api.openweathermap.org',
'weather?lat=15.53804515&lon=32.52674103&appid=$api_key&units=metric'));
return json.decode(result.body);
}
class Weather extends StatefulWidget {
@override
_WeatherState createState() => _WeatherState();
}
class _WeatherState extends State<Weather> {
Color bgcolor;
var data;
@override
void initState() {
super.initState();
fetchData().then((value) {
setState() {
data = value;
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.blue,
appBar: AppBar(
title: Text('Weather App'),
centerTitle: true,
),
body: Center(
child: Column(children: [
Text(data['main']['temp']),
Text(data['weather']['description']),
Text(data['name'])
]),
));
}
}
解决方案
fetchData 是异步的,这意味着执行和获取天气数据需要一些时间。在此之前,变量“data”未初始化,因此为空。尝试添加检查数据是否为空,然后返回加载页面或 CircularProgressIndicator。
推荐阅读
- reactjs - 将 handleChange 函数作为 Prop 发送到 2 个或更多组件不起作用
- c# - 类列表将多个值分配给字符串列表
- vue.js - 在 Vue 中的函数之后同步执行 $emit()
- r - 将库(rgbif)函数 occ_data 中的列表拆分为数据框
- couchdb - 返回 CouchDB 查询中未知键的默认值
- excel - 复制行并减少 ID
- python - 如何从多个 CSV 文件的字段中获取数据类型?
- javascript - 是否有 ngTemplateOutlet 的 vue.js 等价物?
- android - AndroidX下如何使用FirebaseRecyclerAdapter?
- python - 数据类子类不继承 __repr__