Как передать данные из экземпляра модели (который имеет значения из api) и передать их виджету Text ()

#api #flutter #dart #parameters #flutter-http

#API #flutter #dart #параметры #flutter-http

Вопрос:

Как передать данные из экземпляра модели (который имеет значения из api) и передать их виджету Text ()? Но, пожалуйста, без примеров с listview. Мне нужно просто передать значения текстовому виджету.

В первом блоке мой экземпляр погоды имеет значения, но я не знаю, как передать эти значения моему текстовому виджету. Я буду благодарен, если вы мне поможете

Главная.файл 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...'));
  }
}
 

Моя погода.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=3327f40525a4577b7d0a75aea0c7d44famp;query=New York');

      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:

вы можете получить доступ к List<WeatherModel> weather = []; from Weather в вашем home.dart , выполнив Weather().weather , поскольку это список, если вы хотите показать только первые данные, вы можете сделать это в Text(Weather().weather[0].temp)

Комментарии:

1. Это дает мне ошибку диапазона. Недопустимое значение: допустимый диапазон значений пуст: 0. Спасибо

2. это означает, что список пуст… поскольку текстовый виджет уже собран до того, как API сможет извлечь данные. Я предлагаю future builder. Если вы хотите, я могу отредактировать код, чтобы показать пример.

3. Спасибо. Не редактируйте его, я это сделаю. Спасибо