Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // MODEL:
- import 'dart:convert';
- import 'package:http/http.dart';
- class MoedaModel {
- // Atributos:
- // Valores de conversão:
- double _usd;
- double _eur;
- double _btc;
- // Lista de moedas válidas;
- static List<String> moedas = ['USD', 'EUR', 'BTC'];
- MoedaModel._fromJson(Map<String, dynamic> json) {
- _usd = json['USD'];
- _eur = json['EUR'];
- _btc = json['BTC'];
- }
- static Future<MoedaModel> _consulta() async {
- var url = Uri.parse('https://api.senac.estevaorada.com/api/moeda/BRL');
- // Chamada assíncrona:
- var resposta = await get(url);
- var json = jsonDecode(resposta.body);
- // retornar o objeto pelo factory:
- return MoedaModel._fromJson(json);
- }
- static Future<double> converter(String moeda, double valor) async {
- MoedaModel m = await MoedaModel._consulta();
- if (moeda == 'USD') {
- return valor / m._usd;
- } else if (moeda == 'EUR') {
- return valor / m._eur;
- } else if (moeda == 'BTC') {
- return valor / m._btc;
- } else {
- return 0.0;
- }
- }
- }
- ///////////////////////////////////////////////////////////////////////////////////////
- // CONTROLLER:
- Future<String> calcular() async {
- var r = await MoedaModel.converter(itemSelecionado, valor);
- return r.toStringAsFixed(2);
- }
- ///////////////////////////////////////////////////////////////////////////////////////
- // VIEW:
- import 'package:conversor_imc_flutter/src/controller/conversormoeda_controller.dart';
- import 'package:conversor_imc_flutter/src/models/moeda_model.dart';
- import 'package:conversor_imc_flutter/src/views/components/drawer.dart';
- import 'package:conversor_imc_flutter/src/views/components/espacamento_h.dart';
- import 'package:conversor_imc_flutter/src/views/components/espacamento_w.dart';
- import 'package:conversor_imc_flutter/src/views/components/titulo2.dart';
- import 'package:flutter/material.dart';
- class ConversorMoeda extends StatefulWidget {
- @override
- _ConversorMoedaState createState() => _ConversorMoedaState();
- }
- class _ConversorMoedaState extends State<ConversorMoeda> {
- ConversorMoedaController controller = ConversorMoedaController();
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- //drawer: DrawerInicio(),
- appBar: AppBar(
- title: Text('Conversor de Moeda'),
- ),
- body: Container(
- width: double.infinity,
- height: double.infinity,
- child: SingleChildScrollView(
- child: Padding(
- padding: const EdgeInsets.all(15.0),
- child: Column(
- children: [
- EspacamentoH(h: 20),
- Image.asset(
- 'assets/images/icon_conversor.png',
- width: 200,
- height: 200,
- ),
- // Container de espaçamento:
- EspacamentoH(h: 20),
- Titulo2(txt: "Conversor de Moeda:"),
- // Campo de entrada de moeda:
- TextField(
- keyboardType: TextInputType.number,
- decoration: InputDecoration(
- labelText: 'Valor em R\$',
- ),
- onChanged: (value) async {
- controller.valor = double.tryParse(value) ?? 0.0;
- },
- ),
- // Linha com os campos de resultado:
- Row(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- // Dropdown:
- Expanded(
- flex: 1,
- child: SizedBox(
- height: 56,
- // Item do dropdown:
- child: DropdownButton(
- onChanged: (value) {
- setState(() {
- controller.itemSelecionado = value;
- });
- },
- isExpanded: true,
- value: controller.itemSelecionado,
- iconEnabledColor: Colors.pink,
- underline: Container(
- height: 1,
- color: Colors.pink,
- ),
- items: controller.moedas.map((valor) {
- return DropdownMenuItem(
- child: Text(valor), value: valor);
- }).toList(),
- ),
- )),
- // Container de espaçamento:
- EspacamentoW(w: 10),
- // TextField
- Expanded(
- flex: 2,
- child: TextField(
- controller: controller.campoResultado,
- enabled: false,
- decoration: InputDecoration(),
- ),
- ),
- ],
- ),
- ElevatedButton(
- onPressed: () async {
- controller.campoResultado.text =
- await controller.calcular();
- setState(() {});
- },
- child: Text("CONVERTER")),
- Text(controller.campoResultado.text)
- ],
- ),
- ),
- ),
- ),
- );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement