나는 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변수로 한번만 로드되게끔 처리해줬다.. 이게 맞는지는 모르겠다 ㅜ
결과
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 |
댓글