
pub.dev의 shared_preferences 공식문서
shared_preferences 패키지는 Flutter 애플리케이션에서 간단한 데이터를 로컬에 영구적으로 저장할 수 있게 해주는 경량 패키지이다. 이 패키지는 Android와 iOS의 로컬 스토리지 API(SharedPreferences와 NSUserDefaults)를 추상화하여 Flutter 앱에서도 데이터가 영구적으로 유지될 수 있도록 지원한다. 특히 설정 값, 사용자 정보, 로그인 상태와 같은 간단한 키-값 쌍의 데이터를 저장하고 불러오는 데 유용하다.
키-값 쌍(Key-Value Pair) 저장
shared_preferences 패키지는 데이터를 키-값 쌍의 형태로 저장할 수 있다. 데이터는 String, int, double, bool, List<String>와 같은 타입으로 제한되며, 간단한 데이터만 저장할 수 있다.
영구 저장
앱을 닫거나 기기를 재시작해도 데이터를 유지할 수 있다. 이는 로그인 상태, 사용자 설정, 언어 선택과 같은 앱 기본 설정을 유지하는 데 유용하다.
비동기 API
shared_preferences 패키지는 비동기적으로 데이터를 읽고 쓰는 API를 제공한다. 따라서 await와 함께 사용하여 비동기 처리를 효과적으로 관리할 수 있다.
플랫폼 독립성
Android와 iOS를 포함하여, 웹 및 데스크탑 지원도 실험적으로 제공하여 코드 변경 없이 여러 플랫폼에서 데이터를 쉽게 관리할 수 있다.
패키지 추가
pubspec.yaml 파일에 shared_preferences 패키지를 추가한다.
dependencies:
shared_preferences: ^2.3.2 # 최신 버전을 확인 후 사용
패키지 설치
flutter pub get 명령어를 실행하여 패키지를 다운로드한다.
SharedPreferences 객체 가져오기SharedPreferences 객체는 데이터를 읽고 쓰기 위해 필수적이며, 비동기로 인스턴스를 가져와야 한다.
import 'package:shared_preferences/shared_preferences.dart';
Future<void> initializePreferences() async {
final prefs = await SharedPreferences.getInstance();
}
SharedPreferences 인스턴스를 사용해 데이터를 저장할 수 있다. setString, setInt, setBool, setDouble, setStringList 등의 메서드로 다양한 데이터 타입을 저장할 수 있다.
Future<void> saveUserData() async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString('username', 'JohnDoe'); // 문자열 저장
await prefs.setInt('age', 25); // 정수형 저장
await prefs.setBool('isLoggedIn', true); // Boolean 저장
await prefs.setDouble('height', 1.75); // 실수형 저장
await prefs.setStringList('preferences', ['music', 'movies']); // 리스트 저장
}
저장된 데이터를 읽어올 때는 getString, getInt, getBool, getDouble, getStringList 메서드를 사용한다. 키가 존재하지 않으면 기본값을 설정할 수도 있다.
Future<void> loadUserData() async {
final prefs = await SharedPreferences.getInstance();
String username = prefs.getString('username') ?? 'Guest';
int age = prefs.getInt('age') ?? 0;
bool isLoggedIn = prefs.getBool('isLoggedIn') ?? false;
double height = prefs.getDouble('height') ?? 0.0;
List<String> preferences = prefs.getStringList('preferences') ?? [];
}
특정 키의 데이터를 삭제하거나 모든 데이터를 삭제할 수 있다.
remove 메서드를 사용하여 특정 데이터를 삭제한다.clear 메서드를 사용해 모든 키-값 쌍을 삭제한다.Future<void> deleteUserData() async {
final prefs = await SharedPreferences.getInstance();
await prefs.remove('username'); // 특정 데이터 삭제
await prefs.clear(); // 모든 데이터 삭제
}
shared_preferences는 작은 크기의 데이터를 저장하는 데 적합하며, 대용량 데이터에는 적합하지 않다. 데이터베이스가 필요한 경우에는 sqflite 같은 데이터베이스 패키지를 사용하는 것이 좋다.getInstance()는 비동기 메서드이므로, 항상 await와 함께 사용해야 한다. 그렇지 않으면 SharedPreferences 객체가 준비되지 않아 null이 반환될 수 있다.다음은 사용자가 앱에서 로그인을 유지할 수 있도록 로그인 상태를 저장하고 불러오는 간단한 예제이다.
import 'package:shared_preferences/shared_preferences.dart';
class AuthService {
Future<void> setLoginStatus(bool isLoggedIn) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setBool('isLoggedIn', isLoggedIn);
}
Future<bool> getLoginStatus() async {
final prefs = await SharedPreferences.getInstance();
return prefs.getBool('isLoggedIn') ?? false;
}
}
이 예제에서는 setLoginStatus 메서드로 로그인 상태를 저장하고, getLoginStatus 메서드로 로그인 상태를 불러와 애플리케이션이 열릴 때마다 사용자의 로그인 여부를 확인할 수 있다.
shared_preferences는 Flutter 애플리케이션에서 간단한 데이터(설정 값, 사용자 정보 등)를 영구적으로 저장하는 데 유용한 패키지이다. Android, iOS, 웹, 데스크탑 환경에서 동일한 API로 사용할 수 있으며, 비동기적으로 데이터를 저장하고 불러오는 작업을 쉽게 할 수 있다. 간단한 데이터 저장에 적합하지만 대용량 데이터에는 적합하지 않으며, 필요한 경우 데이터베이스를 사용하는 것이 좋다.