커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
pubspec.yaml 파일에 39번째 라인이 안 생깁니다.
[왕초보] 플러터(Flutter)로 시작하는 앱개발 종합반 v0
3주차
북마크
이*훈
댓글
3
추천
0
조회수
9
조회수
9
답변 완료

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

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



03. 상태 관리 패키지 Provider 준비하기 - 에서,

터미널에 이 클립을 flutter pub add provider 입력했는데요.

스파르타 즉문즉답

PS C:\flutter\mymemo> flutter pub add provider

 collection 1.17.1 (1.17.2 available)

 matcher 0.12.15 (0.12.16 available)

 material_color_utilities 0.2.0 (0.8.0 available)

+ nested 1.0.0

+ provider 6.0.5

 source_span 1.9.1 (1.10.0 available)

 stack_trace 1.11.0 (1.11.1 available)

 stream_channel 2.1.1 (2.1.2 available)

 test_api 0.5.1 (0.6.1 available)

Changed 2 dependencies!



 pubspec.yaml에 이 행이 추가가 안 되고요.


dependencies:  provider: ^6.0.5

스파르타 즉문즉답

화면 전체를 캡처해 주시면, 튜터님들이 빠르게 상황을 이해할 수 있어요.



상단 홈페이지 영역이 이동할때마다 깜빡이네요.

영상 교육 선생님 화면과 달라서요...


참고로요.


따라하다가 계속 다르게 되는 부분이 있어서, 다 지우고,

스파르타 즉문즉답스파르타 즉문즉답


완성 코드로 해 보았는데도 그렇습니다.



작성한 코드 및 에러 메세지

import 'package:flutter/cupertino.dart';

import 'package:flutter/material.dart';


void main() {

  runApp(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<HomePage> createState() => _HomePageState();

}


class _HomePageState extends State<HomePage> {

  List<String> memoList = ['장보기 목록: 사과, 양파', '새 메모']; // 전체 메모 목록


  @override

  Widget build(BuildContext context) {

    return Scaffold(

      appBar: AppBar(

        title: Text("mymemo"),

      ),

      body: memoList.isEmpty

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

          : ListView.builder(

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

              itemBuilder: (context, index) {

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

                return ListTile(

                  // 메모 고정 아이콘

                  leading: IconButton(

                    icon: Icon(CupertinoIcons.pin),

                    onPressed: () {

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

                    },

                  ),

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

                  title: Text(

                    memo,

                    maxLines: 3,

                    overflow: TextOverflow.ellipsis,

                  ),

                  onTap: () {

                    // 아이템 클릭시

                    Navigator.push(

                      context,

                      MaterialPageRoute(

                        builder: (_) => DetailPage(

                          index: index,

                          memoList: memoList,

                        ),

                      ),

                    );

                  },

                );

              },

            ),

      floatingActionButton: FloatingActionButton(

        child: Icon(Icons.add),

        onPressed: () {

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

          String memo = ''; // 빈 메모 내용 추가

          setState(() {

            memoList.add(memo);

          });

          Navigator.push(

            context,

            MaterialPageRoute(

              builder: (_) => DetailPage(

                index: memoList.indexOf(memo),

                memoList: memoList,

              ),

            ),

          );

        },

      ),

    );

  }

}


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

class DetailPage extends StatelessWidget {

  DetailPage({super.key, required this.memoList, required this.index});


  final List<String> memoList;

  final int index;


  TextEditingController contentController = TextEditingController();


  @override

  Widget build(BuildContext context) {

    contentController.text = memoList[index];


    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: () {

                          memoList.removeAt(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) {

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

            memoList[index] = value;

          },

        ),

      ),

    );

  }

}





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