Flutter로 시작하기: SharedPreferences 및 UserDefaults 작업

부울, 문자열 또는 정수와 같은 간단한 값을 저장해야 하는 경우가 있을 수 있습니다. 이 매우 쉬운 작업은 파일이나 데이터베이스에 저장하면 쓸데없는 복잡함을 초래할 수 있습니다. 작고 쉬운 작업을 통해 쉽고 빠른 솔루션을 사용할 수 있어야 합니다. 그럼 shared_preferences를 소개하겠습니다!

Android와 iOS는 작은 데이터를 영구 저장하는 방법이 다릅니다. Android에는 키-값 요소가 있는 앱 관리 XML 파일(또는 더 많은 파일)을 나타내는 SharedPreferences 클래스가 있으며 다른 애플리케이션에서 공유할 수도 있습니다. UserDefaults는 간단한 데이터를 저장하는 iOS 방식으로, 캐시 기능이 있는 간단한 동기식 데이터베이스를 나타냅니다.

Flutter에는 이러한 인터페이스에 액세스할 수 있는 기본 제공 방법이 없지만 Flutter 개발자가 직접 만든 플러그인이 지원됩니다(shared_preferences ). 이 간단한 플러그인을 사용하면 앱이 실행되는 플랫폼에 대해 걱정하지 않고 SharedPreferences 및 UserDefaults를 사용할 수 있습니다! 사용 방법을 더 잘 알기 위해 간단한 예를 봅시다!

여기에는 텍스트 상자, 2개의 버튼 및 텍스트가 있는 간단한 앱이 있습니다. 버튼으로 입력을 저장하고 다른 버튼으로 표시하려고 합니다.

final textController = TextEditingController();

@override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          backgroundColor: Colors.red,
          title: Text('Some Awesome Flutter App'),
        ),
        body: Center(
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              SizedBox(
                width: 300,
                child: TextField(
                  controller: textController,
                  decoration: InputDecoration(
                      border: OutlineInputBorder(
                      borderSide: BorderSide(color: Colors.black, width: 1.0),
                    ),
                    hintText: 'Enter some data'
                  ),
                ),
              ),
              RaisedButton(
                child: Text('Save', style: TextStyle(color: Colors.white)),
                onPressed: null
              ),
              RaisedButton(
                child: Text('Show', style: TextStyle(color: Colors.white)),
                onPressed: null
              ),
              Text(
                ''
              )
            ],
          )
        )
    );
  }


onPressed 메서드를 채워서 '저장' 버튼에 몇 가지 작업을 지정해 보겠습니다.

RaisedButton(
     child: Text('Save', style: TextStyle(color: Colors.white)),
     onPressed: () => saveText()
),


void saveText(){
    String text = textController.text;
    //Here we'll save our text
  }


이제 saveText 메서드를 shared_preferences 메서드로 채울 수 있습니다.

먼저 클래스를 인스턴스화한 다음 비동기 메서드인 setString으로 데이터를 쓸 때까지 기다려야 합니다. SharedPreference 개체에는 데이터 유형에 따라 setInt , setBool ... 심지어 setStringList와 같이 다양한 방법이 있습니다. 또한 데이터가 올바르게 저장되었는지 인쇄하고 싶습니다. 모든 "설정"메서드는 Future를 반환하므로 모든 것이 잘 되었는지 알 수 있습니다. 텍스트를 키 "OurText"로 지정해 봅시다.
코드는 다음과 같습니다.

RaisedButton(
     child: Text('Save', style: TextStyle(color: Colors.white)),
     onPressed:() async {
          print(await saveText());
     },
),

Future<bool> saveText() async{
    String text = textController.text;
    SharedPreferences prefs = await SharedPreferences.getInstance();
    return prefs.setString('OurText', text);
  }


TextField에 무언가를 쓴 다음 "저장"을 클릭하면 다음과 같은 결과가 나타납니다.

[+12369 ms] I/flutter ( 9987): true


이제 텍스트를 보여줘야 합니다. '표시' 버튼 작업 시간:

저장과 마찬가지로 SharedPreferences를 인스턴스화한 다음... getString(박수...)을 사용하여 문자열을 가져옵니다. SharedPreferences.getInstance()는 미래이므로 비동기 메서드에서 문자열을 가져와야 합니다.

String ourText = '';

RaisedButton(
      child: Text('Show', style: TextStyle(color: Colors.black)),
      onPressed: () async {
          ourText = await getText();
          setState(() {
          });
      },
),
Text(
   ourText
)

Future<String> getText() async{
    SharedPreferences prefs = await SharedPreferences.getInstance();
    return prefs.getString('OurText');
  }


그리고 우리는:



이제 텍스트가 SharedPreferences 및 UserDefaults에 저장되므로 앱을 종료하더라도 기록하지 않고 표시할 수 있습니다.

좋은 웹페이지 즐겨찾기