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:

  1. Entender qué es la persistencia de datos y por qué es importante.
  2. Conocer las diferentes opciones de persistencia disponibles en Flutter.
  3. 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

  1. Persistencia en Memoria: Los datos se almacenan en la memoria RAM y se pierden cuando la aplicación se cierra.
  2. 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:

  1. Preferencias Compartidas (Shared Preferences): Ideal para almacenar datos simples como configuraciones de usuario.
  2. Almacenamiento de Archivos: Permite guardar y leer archivos en el sistema de archivos del dispositivo.
  3. Bases de Datos Locales: Utiliza SQLite o Hive para almacenar datos estructurados.
  4. 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:

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^2.0.6

Paso 2: Importar la Biblioteca

Importa la biblioteca shared_preferences en tu archivo Dart:

import 'package:shared_preferences/shared_preferences.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.

  1. Crea una nueva aplicación Flutter.
  2. Añade la dependencia shared_preferences en el archivo pubspec.yaml.
  3. Crea una interfaz de usuario con un TextField para ingresar el nombre y un RaisedButton para guardar el nombre.
  4. 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

Módulo 2: Conceptos Básicos de Programación en Dart

Módulo 3: Widgets en Flutter

Módulo 4: Gestión de Estado

Módulo 5: Navegación y Enrutamiento

Módulo 6: Redes y APIs

Módulo 7: Persistencia y Almacenamiento

Módulo 8: Conceptos Avanzados de Flutter

Módulo 9: Pruebas y Depuración

Módulo 10: Despliegue y Mantenimiento

Módulo 11: Flutter para Web y Escritorio

© Copyright 2024. Todos los derechos reservados