SharedPreferences en Flutter: ejercicio resuelto
Si buscas guardar datos locales en Flutter, este ejercicio con SharedPreferences es un punto de partida ideal.
Enunciado
Guarda y recupera un nombre de usuario localmente para mantenerlo tras cerrar la app.
Solución en Flutter
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() => runApp(const MaterialApp(home: PreferencesPage()));
class PreferencesPage extends StatefulWidget {
const PreferencesPage({super.key});
@override
State<PreferencesPage> createState() => _PreferencesPageState();
}
class _PreferencesPageState extends State<PreferencesPage> {
final ctrl = TextEditingController();
String savedName = '';
@override
void initState() {
super.initState();
loadName();
}
Future<void> loadName() async {
final prefs = await SharedPreferences.getInstance();
setState(() => savedName = prefs.getString('name') ?? '');
}
Future<void> saveName() async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString('name', ctrl.text.trim());
await loadName();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('SharedPreferences')),
body: Padding(
padding: const EdgeInsets.all(16),
child: Column(
children: [
TextField(controller: ctrl, decoration: const InputDecoration(labelText: 'Nombre')),
const SizedBox(height: 12),
ElevatedButton(onPressed: saveName, child: const Text('Guardar')),
const SizedBox(height: 16),
Text('Guardado: $savedName'),
],
),
),
);
}
}Resultado esperado
El nombre se mantiene después de cerrar y abrir la app.
Errores frecuentes
- Guardar objetos complejos en SharedPreferences.
- No esperar operaciones asíncronas.
- No validar entrada antes de guardar.
Aplicación práctica
Ideal para preferencias de usuario, flags de onboarding y ajustes básicos.
Siguiente ejercicio recomendado
- Consumo de API con http en Flutter: ejercicio resuelto
- Firebase Auth login en Flutter: ejercicio resuelto con email y password
- FutureBuilder en Flutter: ejercicio resuelto para estados de carga
- Todos los ejercicios Flutter
Práctica guiada y siguiente paso
- Más ejercicios de Flutter
- Ejercicios C para reforzar fundamentos
- Programación en C en 100 ejercicios resueltos
- Ver el libro en Amazon (incluido en Kindle Unlimited)
- Suscribirte a la newsletter
FAQ
¿SharedPreferences sirve para datos sensibles?
No. Para datos sensibles usa almacenamiento seguro cifrado.
¿Qué límite de datos tiene?
Está pensado para pares clave-valor pequeños, no para grandes volúmenes.
¿Cuándo pasar a SQLite?
Cuando necesitas consultas, relaciones o persistencia estructurada.