본문 바로가기
Flutter

04. Flutter 상태 저장 shared_preferences

by NaHyungMin 2022. 9. 16.

Flutter로 Web에서 입력했던 내용을 종료하고 다시 실행 시 데이터를 꺼내오고 싶음.

 

Debug Web에서 데이터를 꺼내오기 위한 사전 처리 --web-port만 정해주면 된다.

dependencies:
  flutter:
    sdk: flutter

  shared_preferences: ^2.0.15

pub에서 추가.

import 'package:shared_preferences/shared_preferences.dart';

class SharedPreferencesSingleton {
  static late final _prefs;
  static final SharedPreferencesSingleton _sharedPreferences = SharedPreferencesSingleton._internal();

  factory SharedPreferencesSingleton() => _sharedPreferences;

  SharedPreferencesSingleton._internal() {
    _initialize();
  }

  Future<void> _initialize() async {
    _prefs = await SharedPreferences.getInstance();
  }

  static void setValue<T>(String key, Object value) {
    switch(T) {
      case int :
        _prefs.setInt(key, value);
        break;
      case bool :
        _prefs.setBool(key, value);
        break;
      case String :
        _prefs.setString(key, value);
        break;
    }
  }

  static T? getValue<T>(String key) {
    switch(T) {
      case int :
        return _prefs.getInt(key);
      case bool :
        return _prefs.getBool(key);
      case String :
        return _prefs.getString(key);
    }

    return null;
  }

  static void removeValue(String key) {
    _prefs.remove(key);
  }
}

귀찮아서 몇가지 기능만 대충 만들었음.

 

void main() {
  _initialize();
  runApp(const MyApp());
}

void _initialize() {
  SharedPreferencesSingleton();
}

Main

UserInformation.isLoginSuccess = true,
UserInformation.accessToken = "${value.data["accessToken"]}",

if(isRemember) {
  SharedPreferencesSingleton.setValue<String>("email", email),
  SharedPreferencesSingleton.setValue<bool>("isRemember", isRemember),
} else {
  SharedPreferencesSingleton.removeValue("email"),
  SharedPreferencesSingleton.removeValue("isRemember"),
},

로그인 시, 해당 값이 있으면 저장 없으면 삭제

@override
@mustCallSuper
void initState() {
  super.initState();

  if(!isServiceInitialize) {
    loginService = LoginService(context);
  }

  final bool? sharedRemember = SharedPreferencesSingleton.getValue<bool>("isRemember");
  rememberValue = sharedRemember == null ? false : true;

  WidgetsBinding.instance.addPostFrameCallback((_) {
    //저장 상태.
    if(rememberValue) {
      final String? sharedEmail = SharedPreferencesSingleton.getValue<String>("email");

      if(sharedEmail != null) {
        _emailTextEditController.text = sharedEmail;
      }
    }
  });
}

login screen

 

결과

'Flutter' 카테고리의 다른 글

06. Flutter Future build 이벤트 방지  (0) 2022.09.19
05. Flutter build 종료 후 이벤트  (0) 2022.09.16
03. Fultter Datatable 사용  (0) 2022.09.07
02. Flutter Dio 사용법  (0) 2022.08.28
01. 플러터 설치  (0) 2021.07.26