joaopaulofcc

Untitled

Nov 18th, 2020 (edited)
735
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 int 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['dogId'],
  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.   final response = await http.get(
  26.       'https://5fb5689343cb320016fd6dde.mockapi.io/dogs/1'); //Insira aqui a URL do endpoint da API.
  27.  
  28.   if (response.statusCode == 200) {
  29.     // Se o servidor retornou uma resposta 200 OK
  30.     // converte a resposta (JSON) para um objeto da classe Dog.
  31.     return Dog.fromJson(jsonDecode(response.body));
  32.   }
  33.   // Caso o servidor tenha retornado erro lança uma exceção.
  34.   else {
  35.     throw Exception('Falha ao carregar dados da API!');
  36.   }
  37. }
  38.  
  39. void main() => runApp(MyApp());
  40.  
  41. class MyApp extends StatefulWidget {
  42.   MyApp({Key key}) : super(key: key);
  43.  
  44.   @override
  45.   _MyAppState createState() => _MyAppState();
  46. }
  47.  
  48. class _MyAppState extends State<MyApp> {
  49.   Future<Dog> futureDog;
  50.  
  51.   @override
  52.   void initState() {
  53.     super.initState();
  54.     futureDog = fetchDog();
  55.   }
  56.  
  57.   @override
  58.   Widget build(BuildContext context) {
  59.     return MaterialApp(
  60.       title: 'Exemplo - Read API',
  61.       theme: ThemeData(
  62.         primarySwatch: Colors.blue,
  63.       ),
  64.       home: Scaffold(
  65.         appBar: AppBar(
  66.           title: Text('Exemplo - Read API'),
  67.         ),
  68.         body: Center(
  69.           child: FutureBuilder<Dog>(
  70.             future: futureDog,
  71.             builder: (context, snapshot) {
  72.               // Caso a API tenha retornado dados.
  73.               if (snapshot.hasData) {
  74.                 // Exibe na vertical três componentes text com os dados
  75.                 return Column(children: <Widget>[
  76.                   Padding(
  77.                       padding: EdgeInsets.all(20),
  78.                       child: Text(snapshot.data.id.toString())),
  79.                   Padding(
  80.                       padding: EdgeInsets.all(20),
  81.                       child: Text(snapshot.data.name)),
  82.                   Padding(
  83.                       padding: EdgeInsets.all(20),
  84.                       child: Text(snapshot.data.age.toString()))
  85.                 ]);
  86.               }
  87.               // Caso a API não tenha retornado os dados, mas sim lançado uma exceção.              
  88.               else if (snapshot.hasError) {
  89.                 return Text("${snapshot.error}");
  90.               }
  91.               // Mostra spinner enquanto carrega a requisição.
  92.               return CircularProgressIndicator();
  93.             },
  94.           ),
  95.         ),
  96.       ),
  97.     );
  98.   }
  99. }
RAW Paste Data