joaopaulofcc

Untitled

Nov 18th, 2020
890
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import 'dart:async';
  2. import 'dart:convert';
  3. import 'package:flutter/material.dart';
  4. import 'package:http/http.dart' as http;
  5.  
  6. class Dog {
  7.   final String id;
  8.   final String name;
  9.   final int age;
  10.  
  11.   Dog({this.id, this.name, this.age});
  12.  
  13.   // Método que cria um objeto Dog a partir de um JSON recebido.
  14.   factory Dog.fromJson(Map<String, dynamic> json) {
  15.     return Dog(
  16.       id: json['id'],
  17.       name: json['name'],
  18.       age: json['age'],
  19.     );
  20.   }
  21. }
  22.  
  23. // Método que realiza a leitura de um Dog da API.
  24. Future<Dog> fetchDog() async {
  25.   //Insira aqui a URL do endpoint da API.
  26.   final response =
  27.       await http.get('https://5fb5817d36e2fa00166a462d.mockapi.io/dogs/1');
  28.  
  29.   if (response.statusCode == 200) {
  30.     // Se o servidor retornou uma resposta 200 OK
  31.     // converte a resposta (JSON) para um objeto da classe Dog.
  32.     return Dog.fromJson(jsonDecode(response.body));
  33.   }
  34.   // Caso o servidor tenha retornado erro lança uma exceção.
  35.   else {
  36.     throw Exception('Falha ao carregar dados da API!');
  37.   }
  38. }
  39.  
  40. void main() => runApp(MyApp());
  41.  
  42. class MyApp extends StatefulWidget {
  43.   MyApp({Key key}) : super(key: key);
  44.  
  45.   @override
  46.   _MyAppState createState() => _MyAppState();
  47. }
  48.  
  49. class _MyAppState extends State<MyApp> {
  50.   Future<Dog> futureDog;
  51.  
  52.   @override
  53.   void initState() {
  54.     super.initState();
  55.     futureDog = fetchDog();
  56.   }
  57.  
  58.   @override
  59.   Widget build(BuildContext context) {
  60.     return MaterialApp(
  61.       title: 'Exemplo - Read API',
  62.       theme: ThemeData(
  63.         primarySwatch: Colors.blue,
  64.       ),
  65.       home: Scaffold(
  66.         appBar: AppBar(
  67.           title: Text('Exemplo - Read API'),
  68.         ),
  69.         body: Center(
  70.           child: FutureBuilder<Dog>(
  71.             future: futureDog,
  72.             builder: (context, snapshot) {
  73.               // Caso a API tenha retornado dados.
  74.               if (snapshot.hasData) {
  75.                 // Exibe na vertical três componentes text com os dados
  76.                 return Column(children: <Widget>[
  77.                   Padding(
  78.                       padding: EdgeInsets.all(20),
  79.                       child: Text(snapshot.data.id)),
  80.                   Padding(
  81.                       padding: EdgeInsets.all(20),
  82.                       child: Text(snapshot.data.name)),
  83.                   Padding(
  84.                       padding: EdgeInsets.all(20),
  85.                       child: Text(snapshot.data.age.toString()))
  86.                 ]);
  87.               }
  88.               // Caso a API não tenha retornado os dados, mas sim lançado uma exceção.
  89.               else if (snapshot.hasError) {
  90.                 return Text("${snapshot.error}");
  91.               }
  92.               // Mostra spinner enquanto carrega a requisição.
  93.               return CircularProgressIndicator();
  94.             },
  95.           ),
  96.         ),
  97.       ),
  98.     );
  99.   }
  100. }
RAW Paste Data