http - 如何使 Http 请求和解析数据到 Flutter 中的模型类

标签 http flutter

我有一个端点: https://samples.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=b6907d289e10d714a6e88b30761fae22

它给出了一个名为:

的 Json 响应
{"coord":{"lon":139.01,"lat":35.02},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"base":"stations","main":{"temp":285.514,"pressure":1013.75,"humidity":100,"temp_min":285.514,"temp_max":285.514,"sea_level":1023.22,"grnd_level":1013.75},"wind":{"speed":5.52,"deg":311},"clouds":{"all":0},"dt":1485792967,"sys":{"message":0.0025,"country":"JP","sunrise":1485726240,"sunset":1485763863},"id":1907296,"name":"Tawarano","cod":200}

我在这里使用 docs 中给出的 Http 库

LoadingScreen.dart

import 'package:clima/services/location.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';

class LoadingScreen extends StatefulWidget {
  @override
  _LoadingScreenState createState() => _LoadingScreenState();
}

class _LoadingScreenState extends State<LoadingScreen> {
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    getLocation();
  }

  @override
  void deactivate() {
    // TODO: implement deactivate
    super.deactivate();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: RaisedButton(
          onPressed: () {
            //Get the current location
            getLocation();
          },
          child: Text('Get Location'),
        ),
      ),
    );
  }

  Future getLocation() async {
    Location mLoc = Location();
    await mLoc.getLocation();
    print("Co-ordinates fetched");
    print("< -------------------------------------------------- >");
    getData(latitude: mLoc.currentLatitude, longitude: mLoc.currentLongitude);
  }

  void getData({String longitude, String latitude}) async {
    Response response = await get(
        "https://samples.openweathermap.org/data/2.5/weather?lat=$latitude&lon=$longitude&appid=b6907d289e10d714a6e88b30761fae22");
    print(response.body);
  }
}

我能做什么:

我能够成功从服务器获取数据并在日志中打印 json 响应。

我正在尝试:

  1. 在 android 中,我使用名为 GSON 的库将数据解析为模型 类。
  2. 如何在 Flutter 中实现相同的功能(寻找提供类似 GSON 功能的解决方案)

最佳答案

此示例包含如何从网络中获取 JSON 值的示例。

import 'dart:convert';
import 'package:http/http.dart' as http;

class Location {
  static Future<Map<String, dynamic>> getWeather() async {
    final response = await http.get(
        "https://samples.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=b6907d289e10d714a6e88b30761fae22");
    return json.decode(response.body);
  }
}

void main() async {
  print((await Location.getWeather())["main"]["temp"]);
}

它会打印

285.514

关于http - 如何使 Http 请求和解析数据到 Flutter 中的模型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58363897/

相关文章:

angularjs - 如何在 $http.delete 中发送和排列

http - 使用 Go http 客户端的意外 EOF

flutter - 如何在Flutter中的Carousel Slider末端触发功能?

python - 状态消息的 HTTP 状态代码

http - 通过 http 获取邮件

java - 通过套接字连接的多个 HTTP 请求

Flutter:StreamBuilder 快照——无数据

dart - 如何在Flutter中将非字符串数据传递到命名路由?

android - 如何在 Windows 中通过 flutter 测试 ios 应用

android - "Tried to send a platform message to Flutter, but FlutterJNI was detached from native C++."启动后台服务并关闭应用后