La persistencia de datos es un aspecto crucial en el desarrollo de aplicaciones, ya que permite almacenar y recuperar información de manera duradera. En Flutter, existen varias técnicas y herramientas para manejar la persistencia de datos, desde el almacenamiento de preferencias simples hasta el uso de bases de datos locales.
Objetivos de Aprendizaje
Al final de esta lección, deberías ser capaz de:
- Entender qué es la persistencia de datos y por qué es importante.
- Conocer las diferentes opciones de persistencia disponibles en Flutter.
- Implementar técnicas básicas de persistencia en una aplicación Flutter.
¿Qué es la Persistencia de Datos?
La persistencia de datos se refiere a la capacidad de una aplicación para almacenar datos de manera que puedan ser recuperados y utilizados en el futuro, incluso después de que la aplicación se haya cerrado. Esto es esencial para muchas aplicaciones que necesitan mantener el estado del usuario, configuraciones, datos de usuario, etc.
Tipos de Persistencia
- Persistencia en Memoria: Los datos se almacenan en la memoria RAM y se pierden cuando la aplicación se cierra.
- Persistencia en Disco: Los datos se almacenan en el almacenamiento del dispositivo y se mantienen incluso después de cerrar la aplicación.
Opciones de Persistencia en Flutter
Flutter ofrece varias opciones para la persistencia de datos:
- Preferencias Compartidas (Shared Preferences): Ideal para almacenar datos simples como configuraciones de usuario.
- Almacenamiento de Archivos: Permite guardar y leer archivos en el sistema de archivos del dispositivo.
- Bases de Datos Locales: Utiliza SQLite o Hive para almacenar datos estructurados.
- Persistencia en la Nube: Utiliza servicios como Firebase para almacenar datos en la nube.
Ejemplo Práctico: Uso de Shared Preferences
Vamos a ver un ejemplo básico de cómo usar Shared Preferences para almacenar y recuperar datos simples.
Paso 1: Añadir Dependencia
Primero, necesitamos añadir la dependencia shared_preferences
en el archivo pubspec.yaml
:
Paso 2: Importar la Biblioteca
Importa la biblioteca shared_preferences
en tu archivo Dart:
Paso 3: Guardar Datos
Para guardar datos, utilizamos el método setString
, setInt
, setBool
, etc., dependiendo del tipo de dato que queremos almacenar.
void saveData() async { SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setString('username', 'JohnDoe'); await prefs.setInt('age', 30); }
Paso 4: Recuperar Datos
Para recuperar datos, utilizamos los métodos getString
, getInt
, getBool
, etc.
void loadData() async { SharedPreferences prefs = await SharedPreferences.getInstance(); String? username = prefs.getString('username'); int? age = prefs.getInt('age'); print('Username: $username'); print('Age: $age'); }
Ejercicio Práctico
Objetivo: Implementar una pequeña aplicación que permita al usuario guardar y recuperar su nombre utilizando Shared Preferences.
- Crea una nueva aplicación Flutter.
- Añade la dependencia
shared_preferences
en el archivopubspec.yaml
. - Crea una interfaz de usuario con un
TextField
para ingresar el nombre y unRaisedButton
para guardar el nombre. - Implementa la lógica para guardar y recuperar el nombre utilizando Shared Preferences.
Solución:
import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: HomeScreen(), ); } } class HomeScreen extends StatefulWidget { @override _HomeScreenState createState() => _HomeScreenState(); } class _HomeScreenState extends State<HomeScreen> { TextEditingController _controller = TextEditingController(); String _savedName = ''; @override void initState() { super.initState(); _loadName(); } void _saveName() async { SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setString('name', _controller.text); _loadName(); } void _loadName() async { SharedPreferences prefs = await SharedPreferences.getInstance(); setState(() { _savedName = prefs.getString('name') ?? ''; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Persistencia con Shared Preferences'), ), body: Padding( padding: const EdgeInsets.all(16.0), child: Column( children: [ TextField( controller: _controller, decoration: InputDecoration(labelText: 'Ingresa tu nombre'), ), SizedBox(height: 20), ElevatedButton( onPressed: _saveName, child: Text('Guardar Nombre'), ), SizedBox(height: 20), Text('Nombre guardado: $_savedName'), ], ), ), ); } }
Conclusión
En esta lección, hemos aprendido qué es la persistencia de datos y por qué es importante en el desarrollo de aplicaciones. También hemos explorado las diferentes opciones de persistencia disponibles en Flutter y hemos implementado un ejemplo práctico utilizando Shared Preferences. En las próximas lecciones, profundizaremos en otras técnicas de persistencia como el almacenamiento de archivos y el uso de bases de datos locales.
¡Continúa con la siguiente lección para aprender más sobre cómo manejar la persistencia de datos en Flutter!
Curso de Desarrollo con Flutter
Módulo 1: Introducción a Flutter
- ¿Qué es Flutter?
- Configuración del Entorno de Desarrollo
- Entendiendo la Arquitectura de Flutter
- Creando Tu Primera App con Flutter
Módulo 2: Conceptos Básicos de Programación en Dart
- Introducción a Dart
- Variables y Tipos de Datos
- Sentencias de Control de Flujo
- Funciones y Métodos
- Programación Orientada a Objetos en Dart
Módulo 3: Widgets en Flutter
- Introducción a los Widgets
- Widgets Stateless vs Stateful
- Widgets Básicos
- Widgets de Diseño
- Widgets de Entrada y Formularios
Módulo 4: Gestión de Estado
Módulo 5: Navegación y Enrutamiento
- Introducción a la Navegación
- Navegación Básica
- Rutas Nombradas
- Pasando Datos Entre Pantallas
- Deep Linking
Módulo 6: Redes y APIs
- Obteniendo Datos de Internet
- Parseo de Datos JSON
- Manejo de Errores de Red
- Usando APIs REST
- Integración con GraphQL
Módulo 7: Persistencia y Almacenamiento
- Introducción a la Persistencia
- Preferencias Compartidas
- Almacenamiento de Archivos
- Base de Datos SQLite
- Usando Hive para Almacenamiento Local
Módulo 8: Conceptos Avanzados de Flutter
- Animaciones en Flutter
- Custom Paint y Canvas
- Canales de Plataforma
- Isolates y Concurrencia
- Optimización de Rendimiento
Módulo 9: Pruebas y Depuración
- Introducción a las Pruebas
- Pruebas Unitarias
- Pruebas de Widgets
- Pruebas de Integración
- Técnicas de Depuración
Módulo 10: Despliegue y Mantenimiento
- Preparación para el Lanzamiento
- Construcción para iOS
- Construcción para Android
- Integración Continua/Despliegue Continuo (CI/CD)
- Mantenimiento y Actualización de Tu App