본문 바로가기
프로그래밍/Flutter-Dart

[Flutter] Shared preferences

by 채연2 2021. 3. 25.

나는 get과 좀 더 친해지고 싶어서 참고한 블로그 코드에서 get 패턴으로 수정했다.!!!!

 

pubspec.yaml

dependencies:
  flutter:
    sdk: flutter
  shared_preferences:
  get:

 

 

 

MaterialApp ▶ GetMaterialApp

void main() =>
    runApp(GetMaterialApp(
      home: MyHomePage(title: 'Shared preferences demo'),
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
    ));

 

 

 

Controller class

class Controller extends GetxController {
  var _counter = 0.obs;
  bool _isFirst = true;

  _incrementCounter() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    _counter++;
    prefs.setInt('counter', _counter.value);
  }

  //시작할 때 counter 값 로드
  _loadCounter() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    _counter.value = (prefs.getInt('counter') ?? 0);
  }
}

- 여기서 _counter에 바로 (prefs.getInt('counter') ?? 0)을 넣어버리면 type 에러가 난다.

- .obs로 관찰 가능한 변수로 만들었을 경우, _counter.value에 값을 대입하자.

 

 

 

StatefulWidget ▶ StatelessWidget

class MyHomePage extends StatelessWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  Controller c = Get.put(Controller());
  bool _isFirst = true;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Obx(() => getText(context)),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: c._incrementCounter,
        child: Icon(Icons.add),
      ), // 이 마지막 콤마는 build 메서드에 자동 서식이 잘 적용될 수 있도록 도와줍니다.
    );
  }

  Text getText(context) {
    if(_isFirst) {
      c._loadCounter();
      _isFirst = false;
    }

    return Text(
      '${c._counter}',
      style: Theme
          .of(context)
          .textTheme
          .display1,
    );
  }
}

- initState() 대신에 bool변수로 한번만 로드되게끔 처리해줬다.. 이게 맞는지는 모르겠다 ㅜ

 

 

 

결과

 

 

 

 

참고 : blog.naver.com/PostView.nhn?blogId=getinthere&logNo=221753995883&parentCategoryNo=34&categoryNo=&viewDate=&isShowPopularPosts=false&from=postList

 

flutter 챕터3 - Flutter 40강 shared_preferences

의존성main.dart실행재실행3으로 시작한다.참고https://flutter-ko.dev/docs/cookbook/persistence/key-val...

blog.naver.com

 

320x100

'프로그래밍 > Flutter-Dart' 카테고리의 다른 글

[Flutter] Unsound null safety 관련  (0) 2021.03.25
[Flutter] Dice App  (0) 2021.03.25
[Flutter] cached_network_image  (0) 2021.03.25
[Flutter] get package (2)  (0) 2021.03.25
[Flutter] get package (1)  (0) 2021.03.24

댓글