[Flutter] Shared preferences

2021-06-06 hit count image

이번 블로그 포스트에서는 Flutter에서 로컬에 간단한 데이터를 저장하기 위해 Shared preferences 패키지를 사용하는 방법에 대해서 알아봅시다.

개요

Flutter로 앱을 개발하다보면, 웹의 localStorage나 리액트 네이티브의 AsyncStorage처럼, 사용자의 단말기에 간단하게 데이터를 저장하고 싶을 경우가 생깁니다. 이때, Flutter에서 사용할 수 있는 패키지가 Shared preferences입니다.

Flutter의 공식문서에서도 사용법이 자세히 나와 있으니 참고하시기 바랍니다.

Shared preferences 패키지 설치

Shared preferences는 사용자의 단말기에 key-value 형태로 간단하게 데이터를 저장할 수 있도록 도와줍니다. 그럼 Shared preferences를 사용하기 위해, 다음 명령어를 실행하여 패키지를 설치합니다.

flutter pub add shared_preferences

Shared preferences의 사용법

Shared preferences에는 int, double, bool, string, 그리고 List<String> 데이터를 저장할 수 있습니다. 그럼, Shared preferences을 사용해서 데이터의 읽기/쓰기/삭제에 대해서 알아봅시다.

데이터 저장

Shared preferences를 사용하여 다음과 같이 데이터를 저장할 수 있습니다.

...
import 'package:shared_preferences/shared_preferences.dart';
...
final prefs = await SharedPreferences.getInstance();
prefs.setInt('counter', 0);
prefs.setDouble('width', 20.5);
prefs.setBool('isAdmin', true);
prefs.setString('userName', 'dev-yakuza');
prefs.setStringList('alphabet', ['a', 'b', 'c', 'd']);

데이터 읽기

Shared preferences를 사용하여 다음과 같이 데이터를 읽을 수 있습니다.

...
import 'package:shared_preferences/shared_preferences.dart';
...
final prefs = await SharedPreferences.getInstance();
final counter = prefs.getInt('counter') ?? 0;
final width = prefs.getDouble('width') ?? 10.5;
final isAdmin = prefs.getBool('isAdmin') ?? false;
final userName = prefs.getString('userName') ?? '';
final alphabet = prefs.getStringList('alphabet') ?? [];
final data = prefs.get('userInfo') : {};

데이터 삭제

다음과 같이 Shared preferences을 사용하여 저장한 데이터를 삭제할 수 있습니다.

...
import 'package:shared_preferences/shared_preferences.dart';
...
final prefs = await SharedPreferences.getInstance();
prefs.remove('counter');

또는 다음과 같이 모든 데이터를 삭제할 수 있습니다.

prefs.clear();

유닛 테스트

Shared preferences 패키지를 사용하는 코드를 유닛 테스트(Unit Test)할 때, 다음과 같이 Shared preferences가 제공하는 setMockInitialValues을 사용하여 데이터를 초기화 할 수 있습니다.

...
import 'package:shared_preferences/shared_preferences.dart';
...
setUp(() {
  SharedPreferences.setMockInitialValues({});
});

완료

이것으로 Flutter에서 간단한 데이터를 사용자 단말기에 저장하기 위해 Shared preferences를 사용하는 방법에 대해서 알아보았습니다. Shared preferences 패키지는 기본적으로 간단한 데이터를 저장하기 위해 설계되었습니다. 따라서 큰 데이터를 저장하기에는 적합하지 않습니다. 단순히 사용자가 선택한 설정 옵션 등을 저장할 때, 사용하시는 것을 추천드립니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

책 홍보

저도 블로그를 시작한지 1년만에...책을 다 써봅니다...인생에서 이런 날도 오는군요...타국에서 책 출판도 할 수 있고, 참 좋은 세상입니다.

이번에 쓴 책은 스무디 한 잔 마시며 끝내는 React Native입니다. 다양한 예제를 통해 리액트 네이티브를 공부할 수 있도록 구성해 보았습니다. 또한 설치부터 배포까지 실전에서도 사용할 수 있는 내용들을 담고 있습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
Posts