
3-5 강의 14:27부분 질문
왜 saveMemo를 notifyListeners() 뒤에 쓰는 건가요?
RAM이 빨라서 그렇게 하는건가요? 궁금합니다.
어짜피 다시 로드하는데 강사님이 왜 그렇게 짰는지 궁금합니다.
memoList 저장 -> 새로고침 -> 기기 저장 -> 화면 바뀜(?)
로드되는게 느려서 정상적으로 실행이 되는건가요? 궁금합니다.
제 생각엔 memoList 저장 -> 기기 저장 -> 새로 고침 -> 화면 바뀜
이 순서가 맞는 것 같은데 궁금합니다.
실제로 제 코드로 짜면 RAM에도 저장되고 ROM에도 저장되어 시간이 느려서 이렇게 짠거인지 궁금합니다.
작성한 코드 및 에러 메세지
import 'dart:convert';
import 'package:flutter/material.dart';
import 'main.dart';
// Memo 데이터의 형식을 정해줍니다. 추후 isPinned, updatedAt 등의 정보도 저장할 수 있습니다.
class Memo {
Memo({
required this.content,
});
String content;
Map toJson() {
return {'content': content};
}
factory Memo.fromJson(json) {
return Memo(content: json['content']);
}
}
// Memo 데이터는 모두 여기서 관리
class MemoService extends ChangeNotifier {
MemoService() {
loadMemoList();
}
List<Memo> memoList = [
Memo(content: '장보기 목록: 사과, 양파'), // 더미(dummy) 데이터
Memo(content: '새 메모'), // 더미(dummy) 데이터
];
createMemo({required String content}) {
Memo memo = Memo(content: content);
memoList.add(memo);
notifyListeners(); // Consumer<MemoService>의 builder 부분을 호출해서 화면 새로고침
saveMemoList();
}
updateMemo({required int index, required String content}) {
Memo memo = memoList[index];
memo.content = content;
notifyListeners();
saveMemoList();
}
deleteMemo({required int index}) {
memoList.removeAt(index);
notifyListeners();
saveMemoList();
}
saveMemoList() {
List memoJsonList = memoList.map((memo) => memo.toJson()).toList();
// [{"content": "1"}, {"content": "2"}]
String jsonString = jsonEncode(memoJsonList);
// '[{"content": "1"}, {"content": "2"}]'
prefs.setString('memoList', jsonString);
}
loadMemoList() {
String? jsonString = prefs.getString('memoList');
// '[{"content": "1"}, {"content": "2"}]'
if (jsonString == null) return; // null 이면 로드하지 않음
List memoJsonList = jsonDecode(jsonString);
// [{"content": "1"}, {"content": "2"}]
memoList = memoJsonList.map((json) => Memo.fromJson(json)).toList();
}
}
