sharedPreferences는 Flutter에서 간단한 키-값 쌍을 영구적으로 저장하는 데 사용되는 패키지입니다.
이 패키지는 Android의 SharedPreferences와 iOS의 NSUserDefaults를 래핑합니다.
작은 데이터를 영구적으로 저장하고자 할 때 유용합니다.
주요 기능
• 데이터 저장: 문자열, 정수, 부울, 더블 등의 간단한 데이터를 저장할 수 있습니다.
• 데이터 읽기: 저장된 데이터를 읽어올 수 있습니다.
• 데이터 삭제: 특정 키에 해당하는 데이터를 삭제할 수 있습니다.
• 모든 데이터 삭제: 모든 데이터를 삭제할 수 있습니다.
1. 패키지 추가
pubspec.yaml 파일에 shared_preferences 패키지를 추가합니다.
dependencies:
flutter:
sdk: flutter
shared_preferences: ^2.0.6
2. 패키지 가져오기
Dart 파일에서 shared_preferences 패키지를 가져옵니다.
import 'package:shared_preferences/shared_preferences.dart';
3. 데이터 저장
데이터를 저장하는 예제입니다.
Future<void> saveData() async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString('username', 'John Doe');
await prefs.setInt('age', 30);
await prefs.setBool('isLoggedIn', true);
await prefs.setDouble('height', 1.75);
}
4. 데이터 읽기
저장된 데이터를 읽어오는 예제입니다.
Future<void> readData() async {
final prefs = await SharedPreferences.getInstance();
String? username = prefs.getString('username');
int? age = prefs.getInt('age');
bool? isLoggedIn = prefs.getBool('isLoggedIn');
double? height = prefs.getDouble('height');
print('Username: $username');
print('Age: $age');
print('Is Logged In: $isLoggedIn');
print('Height: $height');
}
5. 데이터 삭제
특정 키에 해당하는 데이터를 삭제하는 예제입니다.
Future<void> removeData() async {
final prefs = await SharedPreferences.getInstance();
await prefs.remove('username');
}
6. 모든 데이터 삭제
모든 데이터를 삭제하는 예제입니다.
Future<void> clearData() async {
final prefs = await SharedPreferences.getInstance();
await prefs.clear();
}
예시
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late SharedPreferences _prefs;
String _username = "";
final TextEditingController _userController = TextEditingController();
@override
void initState() {
super.initState();
_getUsername();
}
_saveUsername() {
setState(() {
_username = _userController.text;
_prefs.setString("currentUsername", _username);
});
}
_getUsername() async {
_prefs = await SharedPreferences.getInstance();
setState(() {
_username = _prefs.getString("currentUsername") ?? "";
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("test title"),
),
body: Container(
child: Column(
children: [
Text("현재 사용자 이름 : $_username" ),
Container(
child: TextField(
controller: _userController,
textAlign: TextAlign.left,
decoration: const InputDecoration(
border: InputBorder.none,
hintText: 'Input your username'
),
),
),
TextButton(
onPressed: () => _saveUsername()
, child: Text('저장')
)
],
),
)
);
}
}
다른 예제 앱
간단한 예제 앱을 만들어 보겠습니다.
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
late SharedPreferences prefs;
String username = '';
int age = 0;
bool isLoggedIn = false;
double height = 0.0;
@override
void initState() {
super.initState();
_loadData();
}
Future<void> _loadData() async {
prefs = await SharedPreferences.getInstance();
setState(() {
username = prefs.getString('username') ?? '';
age = prefs.getInt('age') ?? 0;
isLoggedIn = prefs.getBool('isLoggedIn') ?? false;
height = prefs.getDouble('height') ?? 0.0;
});
}
Future<void> _saveData() async {
await prefs.setString('username', 'John Doe');
await prefs.setInt('age', 30);
await prefs.setBool('isLoggedIn', true);
await prefs.setDouble('height', 1.75);
_loadData();
}
Future<void> _removeData() async {
await prefs.remove('username');
_loadData();
}
Future<void> _clearData() async {
await prefs.clear();
_loadData();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SharedPreferences Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Username: $username'),
Text('Age: $age'),
Text('Is Logged In: $isLoggedIn'),
Text('Height: $height'),
SizedBox(height: 20),
ElevatedButton(
onPressed: _saveData,
child: Text('Save Data'),
),
ElevatedButton(
onPressed: _removeData,
child: Text('Remove Username'),
),
ElevatedButton(
onPressed: _clearData,
child: Text('Clear All Data'),
),
],
),
),
);
}
}
주요 포인트
• SharedPreferences: 간단한 키-값 쌍을 영구적으로 저장하는 데 사용됩니다.
• getInstance(): SharedPreferences의 인스턴스를 얻기 위해 사용됩니다.
• setString, setInt, setBool, setDouble: 데이터를 저장하는 메서드입니다.
• getString, getInt, getBool, getDouble: 데이터를 읽어오는 메서드입니다.
• remove: 특정 키에 해당하는 데이터를 삭제하는 메서드입니다.
• clear: 모든 데이터를 삭제하는 메서드입니다.
SharedPreferences 문서
'프론트엔드 > Flutter' 카테고리의 다른 글
dart 언어 개요 - dart란 (0) | 2024.07.18 |
---|---|
flutter navigaion bar 네이게이션 바 사용하기 (0) | 2024.07.18 |
flutter json 데이터 가져오기 (0) | 2024.07.17 |
flutter youtube 영상 가져오기 (0) | 2024.07.17 |
flutter navigator 을 활용한 화면 이동 (0) | 2024.07.17 |