[Flutter] 입력한 데이터를 간단하게 저장하고 불러오는 패키지를 소개합니다.(shared_preferences)
간단한 데이터를 위한 플랫폼별 영구 스토리지를 저장합니다.
(예: 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('삭제'), ), ], ), ], ), ), ); } }
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형식으로 저장하는것도 선호합니다.
그것도 다음시간에....
즐거운 코딩되세요.
댓글
댓글 쓰기