반응형
// 이곳에 쓴 내용은 앱 만들기라는 버킷리스트를 달성하기 위해 플러터를 공부하면서 정리하고 있는 내용입니다.
플러터에 대해 아는 것이 거의 없기 때문에 정리하면서 오류가 있을 수 있습니다.
오류를 발견하신 분은 댓글 남겨 주시면 감사하겠습니다.
공유 환경 설정에 데이터 저장하기
pubspec.yaml에 shared_preferences 패키지 등록 후, 아래처럼 main다트 파일에 코드를 입력했는데, 작동을 안 한다. 취지는 앱을 종료하고 다시 켰을 때 기존에 카운트 됐던 내용이 그대로 살아있어야 하는데, 여전히 0으로 나온다.
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
),
home: const MyHomePage(title: 'Flutter Demo Home Page',),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
_setData(_counter);
});
}
@override
void initState() {
super.initState();
_loadData();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Center(
// Center is a layout widget. It takes a single child and positions it
// in the middle of the parent.
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headlineMedium,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
void _setData(int value) async {
var key = "count";
SharedPreferences pref = await SharedPreferences.getInstance();
pref.setInt(key, value);
}
void _loadData() async {
var key = "count";
SharedPreferences pref = await SharedPreferences.getInstance();
setState(() {
var value = pref.getInt(key);
if (value == null) {
_counter = 0;
} else {
_counter = value;
}
});
}
}
그리고, 다시 깃허브 3.X버전으로 위처럼 타이핑해서 결국 해결했다. 중간에 {를 잘못 넣은 부분도 있고, 코드의 순서가 완전히 다른 느낌이었다. 물론, 내가 책을 잘못 해석해서 코드를 넣었을 수도 있을 것이다.
책에는 '생략'이라고 표시되어 있는 부분이 있는데 그런 것 때문에 위치를 잘못 넣은 것일 수도 있겠다.
오늘은 불금이니 여기까지만..
반응형
'버킷리스트 > 앱 만들기' 카테고리의 다른 글
오공완 (with Do it! 플러터 앱 프로그램밍) #10_1 (0) | 2024.05.12 |
---|---|
오공완 (with Do it! 플러터 앱 프로그램밍) #9_2 (0) | 2024.05.12 |
오공완 (with Do it! 플러터 앱 프로그램밍) #8_1 (0) | 2024.05.09 |
오공완 (with Do it! 플러터 앱 프로그램밍) #7_1 (0) | 2024.05.07 |
오공완 (with Do it! 플러터 앱 프로그램밍) #5_2 (0) | 2024.05.06 |