如何从模型实例(具有来自 api 的值)传递数据并将其提供给 Text() 小部件

Posted

技术标签:

【中文标题】如何从模型实例(具有来自 api 的值)传递数据并将其提供给 Text() 小部件【英文标题】:How to pass data from Model instance (which has a values from api) and give it to Text() widget 【发布时间】:2021-05-18 01:39:02 【问题描述】:

? 但请没有列表视图的示例。我只需要将值提供给 Text 小部件。

在第一个块中,我的天气实例有一个值,但我不知道如何将这个值赋予我的 Text 小部件。如果你能帮助我,我将不胜感激

home.dart 文件:

import 'package:flutter/material.dart';
import 'package:weather_mix_app/models/weather_model.dart';
import 'package:weather_mix_app/services/weather.dart';

class Home extends StatefulWidget 
  @override
  _HomeState createState() => _HomeState();


class _HomeState extends State<Home> 
  List<WeatherModel> weather = new List<WeatherModel>();

  @override
  void initState() 
    super.initState();
    setupWeather();
  

  setupWeather() async 
    Weather weatherInstance = Weather();
    await weatherInstance.fetchData();
    weather = weatherInstance.weather;
  

  @override
  Widget build(BuildContext context) 
    return Container(child: Text('WHAT I NEED TO WRITE...'));
  

我的 weather.dart(从 api 获取数据)

import 'dart:convert';

import 'package:http/http.dart';
import 'package:weather_mix_app/models/weather_model.dart';

class Weather 
  List<WeatherModel> weather = [];

  Future<void> fetchData() async 
    try 
      Response response = await get(
          'http://api.weatherstack.com/current?access_key=3327f40525a4577b7d0a75aea0c7d44f&query=New%20York');

      Map jsonData = jsonDecode(response.body);

      WeatherModel weatherModel = WeatherModel(
          description: jsonData['current']['weather_descriptions'],
          temp: jsonData['current']['temperature'],
          feels_like: jsonData['current']['feelslike'],
          query: jsonData['request']['query']);
      weather.add(weatherModel);
      print(weather);
     catch (e) 
      print('caught error! $e');
    
  

还有我的 weather_model.dart

class WeatherModel 
  dynamic description;
  dynamic temp;
  dynamic feels_like;
  dynamic query;

  WeatherModel(this.description, this.temp, this.feels_like, this.query);

【问题讨论】:

【参考方案1】:

您可以通过Weather().weather 访问Weather 中的Weather 中的List&lt;WeatherModel&gt; weather = [];,因为它是一个列表,如果您只想显示第一个数据,您可以在Text(Weather().weather[0].temp) 中进行操作

【讨论】:

它给了我一个 RangeError。无效值:有效值范围为空:0。谢谢 这意味着列表是空的......因为在 API 可以获取数据之前已经构建了 Text 小部件。我建议未来的建设者。如果您愿意,我可以编辑代码以显示示例。 谢谢。不要编辑它,我会这样做。谢谢

以上是关于如何从模型实例(具有来自 api 的值)传递数据并将其提供给 Text() 小部件的主要内容,如果未能解决你的问题,请参考以下文章

Qt:如何在模型/视图设置中同步对来自多个线程的数据的访问?

Swift:在闭包中传递来自不同范围的值

如何将数据从父模型类传递到 SwiftUI 中的子视图

iOS:如何使用 MVVM 将模型从视图模型传递到视图模型?

如何将复杂模型从客户端传递到服务器?

如何获取 API 并使用在另一个函数中获得的值?