Consumo de API con http en Flutter: ejercicio resuelto

  2 minutos

Si necesitas consumir una API en Flutter, este ejercicio te muestra un flujo base con http, parseo JSON y gestion de errores.

Consulta una lista de posts desde una API publica y muéstralos en pantalla.

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

void main() => runApp(const MaterialApp(home: ApiPage()));

class ApiPage extends StatefulWidget {
  const ApiPage({super.key});

  @override
  State<ApiPage> createState() => _ApiPageState();
}

class _ApiPageState extends State<ApiPage> {
  List<dynamic> posts = [];
  bool loading = true;

  @override
  void initState() {
    super.initState();
    fetchPosts();
  }

  Future<void> fetchPosts() async {
    final uri = Uri.parse('https://jsonplaceholder.typicode.com/posts?_limit=10');
    final response = await http.get(uri);
    if (response.statusCode == 200) {
      setState(() {
        posts = jsonDecode(response.body) as List<dynamic>;
        loading = false;
      });
    } else {
      setState(() => loading = false);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('API en Flutter')),
      body: loading
          ? const Center(child: CircularProgressIndicator())
          : ListView.builder(
              itemCount: posts.length,
              itemBuilder: (_, i) => ListTile(title: Text(posts[i]['title'])),
            ),
    );
  }
}

Se renderizan 10 registros remotos en una lista tras cargar datos.

  • No controlar statusCode.
  • Parsear JSON sin validar estructura.
  • Bloquear UI sin estados de carga.

Es el bloque más común en apps que consumen backend, microservicios o CMS.

http es una base simple y estable para muchos casos.

Cuándo necesitas interceptores, cancelacion avanzada o configuracion más completa.

No, pero mejora mantenimiento y reduce errores en apps medianas y grandes.