커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
메모를 수정해도 반영이 되지 않습니다
앱개발 종합반 - 플러터 v8
3주차
북마크
최*몬
댓글
1
추천
0
조회수
9
조회수
9
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.


실수로 질문해결 눌러서 다시 올립니다 174번째 줄 질문건입니다.


나머지는 전부 정상 구동하는데

174번째 줄

memoService.updateMemo(index: indexcontent: value);

수정하였으나 메모를 수정하고 뒤로 가더라도 반영이 되지 않습니다.

어느 부분이 잘못되었을까요?


import 'package:flutter/cupertino.dart';

import 'package:flutter/material.dart';

import 'package:provider/provider.dart';


import 'memo_service.dart';


void main() {

  runApp(

   MultiProvider(

    providers: [

     ChangeNotifierProvider(create: (context=> MemoService()),

   ],

    child: const MyApp(),

  ),

 );

}


class MyApp extends StatelessWidget {

  const MyApp({super.key});


  @override

  Widget build(BuildContext context) {

   return MaterialApp(

    debugShowCheckedModeBanner: false,

    home: HomePage(),

  );

 }

}


// 홈 페이지

class HomePage extends StatefulWidget {

  const HomePage({super.key});


  @override

  State<HomePagecreateState() => _HomePageState();

}


class _HomePageState extends State<HomePage> {

  @override

  Widget build(BuildContext context) {

   return Consumer<MemoService>(

    builder: (contextmemoServicechild) {

     // memoService로 부터 memoList 가져오기

     List<MemomemoList = memoService.memoList;


     return Scaffold(

      appBar: AppBar(

       title: Text("mymemo"),

     ),

      body: memoList.isEmpty

        ? Center(child: Text("메모를 작성해 주세요"))

        : ListView.builder(

          itemCount: memoList.length// memoList 개수 만큼 보여주기

          itemBuilder: (contextindex) {

           Memo memo = memoList[index]; // index에 해당하는 memo 가져오기

           return ListTile(

            // 메모 고정 아이콘

            leading: IconButton(

             icon: Icon(CupertinoIcons.pin),

             onPressed: () {

              print('$memo : pin 클릭 됨');

            },

           ),

            // 메모 내용 (최대 3줄까지만 보여주도록)

            title: Text(

             memo.content,

             maxLines: 3,

             overflow: TextOverflow.ellipsis,

           ),

            onTap: () {

             Navigator.push(

              context,

              MaterialPageRoute(

               builder: (_=> DetailPage(

                index: index,

              ),

             ),

            );

             // 아이템 클릭시

           },

          );

         },

        ),

      floatingActionButton: FloatingActionButton(

       child: Icon(Icons.add),

       onPressed: () {

        // + 버튼 클릭시 메모 생성 및 수정 페이지로 이동

        memoService.createMemo(content: '');

        Navigator.push(

         context,

         MaterialPageRoute(

          builder: (_=> DetailPage(

           index: memoService.memoList.length - 1,

         ),

        ),

       );

      },

     ),

    );

   },

  );

 }

}


// 메모 생성 및 수정 페이지

class DetailPage extends StatelessWidget {

  DetailPage({super.keyrequired this.index});


  final int index;


  TextEditingController contentController = TextEditingController();


  @override

  Widget build(BuildContext context) {

   MemoService memoService = context.read<MemoService>();

   Memo memo = memoService.memoList[index];


   contentController.text = memo.content;


   return Scaffold(

    appBar: AppBar(

     actions: [

      IconButton(

       onPressed: () {

        // 삭제 버튼 클릭시

        showDialog(

         context: context,

         builder: (context) {

          return AlertDialog(

           title: Text("정말로 삭제하시겠습니까?"),

           actions: [

            // 취소 버튼

            TextButton(

             onPressed: () {

              Navigator.pop(context);

            },

             child: Text("취소"),

           ),

            // 확인 버튼

            TextButton(

             onPressed: () {

              memoService.deleteMemo(index: index);

              Navigator.pop(context); // 팝업 닫기

              Navigator.pop(context); // HomePage 로 가기

            },

             child: Text(

              "확인",

              style: TextStyle(color: Colors.pink),

            ),

           ),

          ],

         );

        },

       );

      },

       icon: Icon(Icons.delete),

     )

    ],

   ),

    body: Padding(

     padding: const EdgeInsets.all(16),

     child: TextField(

      controller: contentController,

      decoration: InputDecoration(

       hintText: "메모를 입력하세요",

       border: InputBorder.none,

     ),

      autofocus: true,

      maxLines: null,

      expands: true,

      keyboardType: TextInputType.multiline,

      onChanged: (value) {

       // 텍스트필드 안의 값이 변할 때

       memoService.updateMemo(index: indexcontent: value);

     },

    ),

   ),

  );

 }

}


서비스 코드도 올려드립니다


import 'package:flutter/material.dart';


import 'main.dart';


// Memo 데이터의 형식을 정해줍니다. 추후 isPinned, updatedAt 등의 정보도 저장할 수 있습니다.

class Memo {

  Memo({

    required this.content,

  });


  String content;

}


// Memo 데이터는 모두 여기서 관리

class MemoService extends ChangeNotifier {

  List<Memo> memoList = [

    Memo(content: '장보기 목록: 사과, 양파'), // 더미(dummy) 데이터

    Memo(content: '새 메모'), // 더미(dummy) 데이터

  ];


  createMemo({required String content}) {

    Memo memo = Memo(content: content);

    notifyListeners(); // Consumer<MemoService>의 builder 부분을 호출해서 화면 새로고침

    memoList.add(memo);


    updateMemo({required int index, required String content}) {

      Memo memo = memoList[index];

      memo.content = content;

      notifyListeners();

    }

  }


  deleteMemo({required int index}) {

    memoList.removeAt(index);

    notifyListeners();

  }


  void updateMemo({required int index, required String content}) {}

}











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