首页 > 解决方案 > 调用 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'])
          ]),
        ));
  }
}

标签: flutterdart

解决方案


fetchData 是异步的,这意味着执行和获取天气数据需要一些时间。在此之前,变量“data”未初始化,因此为空。尝试添加检查数据是否为空,然后返回加载页面或 CircularProgressIndicator。


推荐阅读