Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import 'dart:async';
- import 'dart:convert';
- import 'package:flutter/material.dart';
- import 'package:http/http.dart' as http;
- class Dog {
- final int id;
- final String name;
- final int age;
- Dog({this.id, this.name, this.age});
- // Método que cria um objeto Dog a partir de um JSON recebido.
- factory Dog.fromJson(Map<String, dynamic> json) {
- return Dog(
- id: json['dogId'],
- name: json['name'],
- age: json['age'],
- );
- }
- }
- // Método que realiza a leitura de um Dog da API.
- Future<Dog> fetchDog() async {
- final response = await http.get(
- 'https://5fb5689343cb320016fd6dde.mockapi.io/dogs/1'); //Insira aqui a URL do endpoint da API.
- if (response.statusCode == 200) {
- // Se o servidor retornou uma resposta 200 OK
- // converte a resposta (JSON) para um objeto da classe Dog.
- return Dog.fromJson(jsonDecode(response.body));
- }
- // Caso o servidor tenha retornado erro lança uma exceção.
- else {
- throw Exception('Falha ao carregar dados da API!');
- }
- }
- void main() => runApp(MyApp());
- class MyApp extends StatefulWidget {
- MyApp({Key key}) : super(key: key);
- @override
- _MyAppState createState() => _MyAppState();
- }
- class _MyAppState extends State<MyApp> {
- Future<Dog> futureDog;
- @override
- void initState() {
- super.initState();
- futureDog = fetchDog();
- }
- @override
- Widget build(BuildContext context) {
- return MaterialApp(
- title: 'Exemplo - Read API',
- theme: ThemeData(
- primarySwatch: Colors.blue,
- ),
- home: Scaffold(
- appBar: AppBar(
- title: Text('Exemplo - Read API'),
- ),
- body: Center(
- child: FutureBuilder<Dog>(
- future: futureDog,
- builder: (context, snapshot) {
- // Caso a API tenha retornado dados.
- if (snapshot.hasData) {
- // Exibe na vertical três componentes text com os dados
- return Column(children: <Widget>[
- Padding(
- padding: EdgeInsets.all(20),
- child: Text(snapshot.data.id.toString())),
- Padding(
- padding: EdgeInsets.all(20),
- child: Text(snapshot.data.name)),
- Padding(
- padding: EdgeInsets.all(20),
- child: Text(snapshot.data.age.toString()))
- ]);
- }
- // Caso a API não tenha retornado os dados, mas sim lançado uma exceção.
- else if (snapshot.hasError) {
- return Text("${snapshot.error}");
- }
- // Mostra spinner enquanto carrega a requisição.
- return CircularProgressIndicator();
- },
- ),
- ),
- ),
- );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement