커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
왜 saveMemo를 notifyListeners() 뒤에 쓰는 건가요?
[왕초보] 플러터(Flutter)로 시작하는 앱개발 종합반 v0
3주차
북마크
이*희
댓글
6
추천
1
조회수
14
조회수
14
답변 완료

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();
  }
}




취소
 공유
취소
댓글 0
댓글 알림
나의얼굴