[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 패키지는 기본적으로 간단한 데이터를 저장하기 위해 설계되었습니다. 따라서 큰 데이터를 저장하기에는 적합하지 않습니다. 단순히 사용자가 선택한 설정 옵션 등을 저장할 때, 사용하시는 것을 추천드립니다.

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

책 홍보

스무디 한 잔 마시며 끝내는 React Native 책을 출판한지 벌써 2년이 다되었네요.
이번에도 좋은 기회가 있어서 스무디 한 잔 마시며 끝내는 리액트 + TDD 책을 출판하게 되었습니다.

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

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