Local Storage & Databases
Mobile apps need to persist data locally for offline access and user experience. Let's explore the different storage options available in mobile development.
Storage Options
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Local Storage Options β
βββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Key-Value Storage β
β ββββββββββββββββββββββββββββββββββββββββ β
β β AsyncStorage (RN) / SharedPreferencesβ β
β β Simple, small data, settings β β
β ββββββββββββββββββββββββββββββββββββββββ β
β β
β SQLite Database β
β ββββββββββββββββββββββββββββββββββββββββ β
β β SQLite / sqflite β β
β β Complex queries, structured data β β
β ββββββββββββββββββββββββββββββββββββββββ β
β β
β File Storage β
β ββββββββββββββββββββββββββββββββββββββββ β
β β Documents, images, downloads β β
β ββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
React Native: AsyncStorage
import AsyncStorage from '@react-native-async-storage/async-storage';
// Save data
const saveUser = async (userData) => {
try {
await AsyncStorage.setItem('user', JSON.stringify(userData));
} catch (error) {
console.error('Error saving:', error);
}
};
// Load data
const loadUser = async () => {
try {
const jsonValue = await AsyncStorage.getItem('user');
return jsonValue != null ? JSON.parse(jsonValue) : null;
} catch (error) {
console.error('Error loading:', error);
}
};
// Remove data
const removeUser = async () => {
try {
await AsyncStorage.removeItem('user');
} catch (error) {
console.error('Error removing:', error);
}
};
Flutter: SharedPreferences & SQLite
import 'package:shared_preferences/shared_preferences.dart';
// Save simple data
Future<void> saveTheme(bool isDark) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setBool('darkTheme', isDark);
}
// Load simple data
Future<bool> loadTheme() async {
final prefs = await SharedPreferences.getInstance();
return prefs.getBool('darkTheme') ?? false;
}
// SQLite for complex data
import 'package:sqflite/sqflite.dart';
Future<void> createDatabase() async {
final db = await openDatabase(
'my_app.db',
version: 1,
onCreate: (db, version) async {
await db.execute('''
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT,
email TEXT
)
''');
},
);
}
When to Use What?
- Key-Value: Settings, user preferences, tokens
- SQLite: Complex data with relationships, offline-first apps
- File Storage: Images, documents, downloaded content