반응형
간단한 데이터를 위한 플랫폼별 영구 스토리지를 저장합니다.
(예: iOS 및 macOS NSUserDefaults, Android SharedPreferences 등).
데이터는 비동기적으로 디스크에 저장되며 삭제 후 재설치 하면 데이터가 삭제되는 패키지입니다. 따라서 이 플러그인은 중요한 데이터를 저장하는데 사용되어서는 안됩니다.
지원하는 데이터 유형은 int, double, bool, String, List <String>입니다.
일시적으로 데이터를 저장하는 방법만 권장하고, 영구적으로 데이터를 저장한다면 SqfLite나 Hive 등에도 있는 것 같습니다만, 로컬 DB를 사용하는 것이 추천되고 있습니다.(이건 추후에 소개시켜 드릴께요.)
home/home_page.dart
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key);
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
String textInit = "초기화";
// 값을 입력 받는 변수
final TextEditingController _nameController = TextEditingController();
// prefs.setString으로、String형식의 데이터 저장
_saveData() async {
String nameValue = _nameController.text;
final prefs = await SharedPreferences.getInstance();
// nameValue의 값을 name변수에 저장한다. prefs.setString을 사용
await prefs.setString("name", nameValue);
}
//데이터 가져오기
_getData() async {
final prefs = await SharedPreferences.getInstance();
setState(() {
textInit = prefs.getString("name") ?? "아무것도없다.";
});
}
//이제 슬슬 느낌 오시죠? name라는 키의 데이터를 삭제합니다.
_removeData() async {
final prefs = await SharedPreferences.getInstance();
prefs.remove("name");
setState(() {
textInit = "";
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.blueGrey,
title: Text("shared_preferences을 사용해보자"),
),
body: Container(
padding: EdgeInsets.all(32),
child: Column(
children: [
Text(
textInit,
style: TextStyle(
fontSize: 20,
),
),
TextField(
keyboardType: TextInputType.text,
decoration: InputDecoration(labelText: "이름을 입력해주세요."),
controller: _nameController,
),
Row(
children: [
const SizedBox(width: 30),
ElevatedButton(
style: ElevatedButton.styleFrom(
primary: Colors.blue, // background
onPrimary: Colors.white, // foreground
),
onPressed: _saveData,
child: Text('저장'),
),
const SizedBox(width: 30),
ElevatedButton(
style: ElevatedButton.styleFrom(
primary: Colors.green, // background
onPrimary: Colors.white, // foreground
),
onPressed: _getData,
child: Text('불러오기'),
),
const SizedBox(width: 30),
ElevatedButton(
style: ElevatedButton.styleFrom(
primary: Colors.red, // background
onPrimary: Colors.white, // foreground
),
onPressed: _removeData,
child: Text('삭제'),
),
],
),
],
),
),
);
}
}
main.dart
import 'package:flutter/material.dart';
import 'package:local_save/screen/home_page.dart';
void main() {
runApp(const MyApp());
// runApp(ProviderScope(child: const MyApp()));
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const MaterialApp(
title: 'SharedPreferences Demo',
home: Home(),
);
}
}
자료형이
await prefs.setInt('cnt', 10);
await prefs.setBool('repeat', true);
await prefs.setDouble('decimal', 1.5);
await prefs.setString('action', 'Start');
await prefs.setStringList('items', <String>['Earth', 'Moon', 'Sun']);
등등의 형식이 있습니다. 필요에 따라서 골라서 사용하시면 되겠습니다.
살짝 복잡한 자료 형식이라면 아예 데이터베이스 형식의 SqfLite를 사용하셔도 되겠지만
저는 setString을 이용해서 json형식으로 저장하는것도 선호합니다.
그것도 다음시간에....
즐거운 코딩되세요.
반응형
'프로그래밍 월드 > 플로터(Flutter)' 카테고리의 다른 글
플로터를 공부하면서 일정 알림 기능이 있는 앱을 만들어 보았습니다. (0) | 2025.01.21 |
---|---|
Flutter의 로컬 Alert를 위한 flutter_local_notifications의 사용방법 (0) | 2025.01.21 |
Flutter의 Android의 targetSdkVersion 설정 위치 정보 (0) | 2025.01.21 |
Flutter 버전 코드는 이미 사용되었습니다. 다른 버전 코드를 사용해 보세요. (0) | 2025.01.21 |
Flutter로 만든 AAB파일에 서명하기 (0) | 2025.01.21 |