Извлечение значения xml2 json в виджет текста во флаттере - PullRequest
0 голосов
/ 18 апреля 2020

Я недавно работаю над личным проектом с Flutter (который будет запрограммирован на отображение всех валют на экране с их курсами) и хочу получить данные о валютах по URL-ссылке XML и передать их в текстовый виджет в моем применение. Я использую http, xml2 json и конвертирую пакеты из библиотеки Dart. У меня есть два класса для этого проекта:

connection.dart

import 'dart:convert';

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

Xml2Json xml2json = new Xml2Json();

class Connection {
  Future fetchData() async {
    final response = await http.get('https://www.tcmb.gov.tr/kurlar/today.xml');
    if (response.statusCode == 200) {
      xml2json.parse(response.body);
      var jsondata = xml2json.toGData();
      var data = json.decode(jsondata);
      var forexSellingUSD = data['Tarih_Date']['Currency'][0]['ForexSelling'];
      var uSD = forexSellingUSD;
      print(uSD);
      return uSD;
    }
  }
}

main.dart

import 'package:flutter/material.dart';
import 'connection.dart' as conn;

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(

        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  conn.Connection connection = new conn.Connection();

  @override
  Widget build(BuildContext context) {
    var xyz = connection.fetchData().toString();

    return Scaffold(
      appBar: AppBar(
        title: Text(''),
      ),
      bottomNavigationBar: Padding(
        padding: const EdgeInsets.all(8.0),
        child: RaisedButton(
          color: Colors.blue,
          onPressed: () {
            connection.fetchData();
          },
          child: new Text('Get'),
        ),
      ),
      body: Center(
        child: Text(
          xyz,
        ),
      ),
    );
  }
}

Когда я запускаю свое приложение и нажимаю RaisedButton, и консоль отладки выводит это «I / флаттер (7002): {$ t: 6,9255}» Это правильный номер курса валюты, но это значение не может быть выбрано в текстовом виджете, и оно показывает что-то вроде currency_problem_flutter .

Что я должен сделать, чтобы решить эту проблему выборки

1 Ответ

0 голосов
/ 18 апреля 2020
class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  conn.Connection connection = new conn.Connection();
  String currencyVal = '';


  @override
  void initState() {
    super.initState();
    getCurrencyData();
  }

   getCurrencyData()  {
    connection.fetchData().then((val){
      setState(() {
        currencyVal = val.toString();
      });
    });
  }

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(
        title: Text(''),
      ),
      bottomNavigationBar: Padding(
        padding: const EdgeInsets.all(8.0),
        child: RaisedButton(
          color: Colors.blue,
          onPressed: () {
            getCurrencyData();
          },
          child: new Text('Get'),
        ),
      ),
      body: Center(
        child: Text(
          currencyVal,
        ),
      ),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...