Advertisement
estevaorada

Conversor_API_Flutter

Apr 30th, 2021
1,446
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 5.52 KB | None | 0 0
  1. // MODEL:
  2. import 'dart:convert';
  3.  
  4. import 'package:http/http.dart';
  5.  
  6. class MoedaModel {
  7.   // Atributos:
  8.   // Valores de conversão:
  9.   double _usd;
  10.   double _eur;
  11.   double _btc;
  12.  
  13.   // Lista de moedas válidas;
  14.   static List<String> moedas = ['USD', 'EUR', 'BTC'];
  15.  
  16.   MoedaModel._fromJson(Map<String, dynamic> json) {
  17.     _usd = json['USD'];
  18.     _eur = json['EUR'];
  19.     _btc = json['BTC'];
  20.   }
  21.  
  22.   static Future<MoedaModel> _consulta() async {
  23.     var url = Uri.parse('https://api.senac.estevaorada.com/api/moeda/BRL');
  24.     // Chamada assíncrona:
  25.     var resposta = await get(url);
  26.     var json = jsonDecode(resposta.body);
  27.     // retornar o objeto pelo factory:
  28.     return MoedaModel._fromJson(json);
  29.   }
  30.  
  31.   static Future<double> converter(String moeda, double valor) async {
  32.     MoedaModel m = await MoedaModel._consulta();
  33.     if (moeda == 'USD') {
  34.       return valor / m._usd;
  35.     } else if (moeda == 'EUR') {
  36.       return valor / m._eur;
  37.     } else if (moeda == 'BTC') {
  38.       return valor / m._btc;
  39.     } else {
  40.       return 0.0;
  41.     }
  42.   }
  43. }
  44.  
  45. ///////////////////////////////////////////////////////////////////////////////////////
  46. // CONTROLLER:
  47. Future<String> calcular() async {
  48.     var r = await MoedaModel.converter(itemSelecionado, valor);
  49.     return r.toStringAsFixed(2);
  50.   }
  51.  
  52. ///////////////////////////////////////////////////////////////////////////////////////
  53. // VIEW:
  54.  
  55. import 'package:conversor_imc_flutter/src/controller/conversormoeda_controller.dart';
  56. import 'package:conversor_imc_flutter/src/models/moeda_model.dart';
  57. import 'package:conversor_imc_flutter/src/views/components/drawer.dart';
  58. import 'package:conversor_imc_flutter/src/views/components/espacamento_h.dart';
  59. import 'package:conversor_imc_flutter/src/views/components/espacamento_w.dart';
  60. import 'package:conversor_imc_flutter/src/views/components/titulo2.dart';
  61. import 'package:flutter/material.dart';
  62.  
  63. class ConversorMoeda extends StatefulWidget {
  64.   @override
  65.   _ConversorMoedaState createState() => _ConversorMoedaState();
  66. }
  67.  
  68. class _ConversorMoedaState extends State<ConversorMoeda> {
  69.   ConversorMoedaController controller = ConversorMoedaController();
  70.   @override
  71.   Widget build(BuildContext context) {
  72.     return Scaffold(
  73.       //drawer: DrawerInicio(),
  74.       appBar: AppBar(
  75.         title: Text('Conversor de Moeda'),
  76.       ),
  77.       body: Container(
  78.         width: double.infinity,
  79.         height: double.infinity,
  80.         child: SingleChildScrollView(
  81.           child: Padding(
  82.             padding: const EdgeInsets.all(15.0),
  83.             child: Column(
  84.               children: [
  85.                 EspacamentoH(h: 20),
  86.                 Image.asset(
  87.                   'assets/images/icon_conversor.png',
  88.                   width: 200,
  89.                   height: 200,
  90.                 ),
  91.                 // Container de espaçamento:
  92.                 EspacamentoH(h: 20),
  93.                 Titulo2(txt: "Conversor de Moeda:"),
  94.                 // Campo de entrada de moeda:
  95.                 TextField(
  96.                   keyboardType: TextInputType.number,
  97.                   decoration: InputDecoration(
  98.                     labelText: 'Valor em R\$',
  99.                   ),
  100.                   onChanged: (value) async {
  101.                     controller.valor = double.tryParse(value) ?? 0.0;
  102.                   },
  103.                 ),
  104.                 // Linha com os campos de resultado:
  105.                 Row(
  106.                   crossAxisAlignment: CrossAxisAlignment.start,
  107.                   children: [
  108.                     // Dropdown:
  109.                     Expanded(
  110.                         flex: 1,
  111.                         child: SizedBox(
  112.                           height: 56,
  113.                           // Item do dropdown:
  114.                           child: DropdownButton(
  115.                             onChanged: (value) {
  116.                               setState(() {
  117.                                 controller.itemSelecionado = value;
  118.                               });
  119.                             },
  120.                             isExpanded: true,
  121.                             value: controller.itemSelecionado,
  122.                             iconEnabledColor: Colors.pink,
  123.                             underline: Container(
  124.                               height: 1,
  125.                               color: Colors.pink,
  126.                             ),
  127.                             items: controller.moedas.map((valor) {
  128.                               return DropdownMenuItem(
  129.                                   child: Text(valor), value: valor);
  130.                             }).toList(),
  131.                           ),
  132.                         )),
  133.                     // Container de espaçamento:
  134.                     EspacamentoW(w: 10),
  135.                     // TextField
  136.                     Expanded(
  137.                       flex: 2,
  138.                       child: TextField(
  139.                         controller: controller.campoResultado,
  140.                         enabled: false,
  141.                         decoration: InputDecoration(),
  142.                       ),
  143.                     ),
  144.                   ],
  145.                 ),
  146.                 ElevatedButton(
  147.                     onPressed: () async {
  148.                       controller.campoResultado.text =
  149.                           await controller.calcular();
  150.                       setState(() {});
  151.                     },
  152.                     child: Text("CONVERTER")),
  153.                 Text(controller.campoResultado.text)
  154.               ],
  155.             ),
  156.           ),
  157.         ),
  158.       ),
  159.     );
  160.   }
  161. }
  162.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement