반응형

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 문서

 

SharedPreferences 패키지 문서

 

 

반응형

+ Recent posts