inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

TableCalender 질문입니다..!

758

wjdgus003

작성한 질문수 5

0

사진 올린것같이 state 에다 selectedDay값을 받고 onDaySelected함수에 setState를 실행시켰습니다.

다하고 나서 에뮬레이터를 확인해보니 선택한 날짜에 동그라미가 안생기더라구요.. 그래서 print를 이용하여 this.selectedDay 가 파라미터의 selectedDay가 같은 지 확인을 해봤더니 다른 값으로 false가 나옵니다.

onDaySelected란 함수가 달력의 날짜를 선택하면 selectedDay와 focusedDay의 값이 선택한 날짜가 되는것 아닌가요?? 문제의 원인이 뭔지 이해가 안됩니다 ㅠ

확인해보니 selectedDay의 값이 바뀌지 않고 계속 null 인것으로 나옵니다.ㅜ

flutter 클론코딩 클론코딩 Flutter

답변 1

0

코드팩토리

안녕하세요!

현재 코드만으로는 원인파악이 어렵습니다.

전체 코드를 보여주시면 문제파악을 좀 더 쉽게 할 수 있을 것 같습니다.

감사합니다!

0

wjdgus003

import 'package:calender/component/calender.dart';
import 'package:calender/component/schedule_card.dart';
import 'package:calender/component/today_banner.dart';
import 'package:flutter/material.dart';

class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key}) : super(key: key);

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  DateTime selectedDay =
      DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day);
  DateTime focusedDay = DateTime.now();

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: Column(
          children: [
            Calender(
              onDaySelected: onDaySelected,
              selectedDay: selectedDay,
              focusedDay: focusedDay,
            ),
            SizedBox(
              height: 8,
            ),
            TodayBanner(selectedDay: selectedDay, scheduleCount: 3),
            ScheduleCard(
                color: Colors.black,
                content: 'content',
                endTime: 10,
                startTime: 8)
          ],
        ),
      ),
    );
  }

  void onDaySelected(DateTime selectedDay, DateTime focusedDay) {
    setState(() {
      this.selectedDay == selectedDay;
      this.focusedDay == selectedDay;
    });
  }
}

0

wjdgus003

import 'package:flutter/material.dart';
import 'package:table_calendar/table_calendar.dart';

import '../const/colors.dart';

class Calender extends StatelessWidget {
  final OnDaySelected onDaySelected;
  final DateTime selectedDay;
  final DateTime focusedDay;

  const Calender(
      {required this.onDaySelected,
      required this.selectedDay,
      required this.focusedDay,
      Key? key})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    final defaultBoxDeco = BoxDecoration(
        //테두리 둥글게 깎기
        borderRadius: BorderRadius.circular(6),
        color: Colors.grey[200]);

    final defaultTextStyle =
        TextStyle(color: Colors.grey[600], fontWeight: FontWeight.w700);

    return TableCalendar(
      locale: 'ko_KR',
      focusedDay: this.focusedDay,
      firstDay: DateTime(1800),
      lastDay: DateTime(3000),
      headerStyle: HeaderStyle(
          formatButtonVisible: false,
          titleCentered: true,
          titleTextStyle:
              TextStyle(fontWeight: FontWeight.w700, fontSize: 16.0)),
      calendarStyle: CalendarStyle(
          isTodayHighlighted: false,
          //날짜의 컨테이너의 데코레이션션
          defaultDecoration: BoxDecoration(
              //테두리 둥글게 깎기
              borderRadius: BorderRadius.circular(6),
              color: Colors.grey[200]),
          weekendDecoration: defaultBoxDeco,
          selectedDecoration: defaultBoxDeco,
          outsideDecoration: BoxDecoration(shape: BoxShape.rectangle),
          defaultTextStyle: defaultTextStyle,
          weekendTextStyle: defaultTextStyle,
          selectedTextStyle: defaultTextStyle.copyWith(color: PrimayColor)),
      onDaySelected: this.onDaySelected,
      selectedDayPredicate: (DateTime date) {
        if (this.selectedDay == null) {
          return false;
        }

        return date.year == this.selectedDay!.year &&
            date.month == this.selectedDay!.month &&
            date.day == this.selectedDay!.day;
      },
    );
  }
}

0

wjdgus003

homeScreen과 calender 코드입니다..! 영상을 보면서 다음내용으로 조금 진행한 상태입니다

0

코드팩토리

현재 상태에서 특정 날짜를 누르면 this.selectedDay가 null로 표현된다는 말슴이신가요?

코드상에서는 문제가 없어보입니다.

0

wjdgus003

네! 날짜를 눌러도 this.selectedDay가 바뀌지 않습니다!

혹시 플러그인 버전을 제일 최신 버전으로 사용하고있는데 그게 문제가 될 수 있을까요?

0

코드팩토리

그럴수도 잇을 것 같아요! 한번 버전을 제가 사용하는 버전으로 변경해보시고 그래도 안되면 레포지토리 공유해주시면 제가 직접 봐드리겠습니다!

0

wjdgus003

구 버전으로 변경해도 안됩니다.. ㅠ 어디로 공유해드리면 될까요?

0

코드팩토리

GitHub에 업로드하시고 저한테 링크 공유해주시면 제가 직접 디버깅 해보겠습니다

0

wjdgus003

https://github.com/miniDevel/calender

이렇게 올리면 될까요...!

0

코드팩토리

lib 폴더만 올리셨습니다. 전체 프로젝트를 올려주세요!

0

wjdgus003

나머지 파일은 다 올렷는데

.dart_tool, .idea 폴더는 'This file is hidden.' 라는 문구가 뜨구

build 폴더는 'Yowza, that’s a lot of files. Try uploading fewer than 100 at a time.'

라는 문구가 뜹니다 .. build 폴더는 압축해서 올리려해도 용량이 커서 안올라가네요 ㅠㅠ..

0

코드팩토리

.gitignore 파일을 무시하고 올리셔서 그런 것 같습니다. 저희 카카오 커뮤니티로 오셔서 원격 신청해주시는게 빠를 것 같아요. 감사합니다.

198강 (){onTap(e);}의 이해 돕기

0

39

1

video_call 플러그인 설치후 에러 발생

0

47

1

SDK 안드로이드 설치 질문!

0

62

1

코드팩토리 디스코드 링크 다시 부탁드려요~

0

94

1

Webview를 이용해서 URL 상의 페이지 출력 불가

0

71

1

홈스크린 함수를 함축해서 main.dart에 옮기는 문제

0

57

1

플레이스토어

0

62

1

아고라 엔진 init 함수의 반환타입이 Future<void> 이것의 의미는 무엇인가요?

0

56

1

가이드라인 질문

0

59

0

emulator 에러 환경설정 뭐가 문제 일까요??

0

78

1

emulator 실행 오류

0

95

3

Column을 가로방향 최대 사이즈를 차지하도록 하는 방법에 관련

0

73

1

pubspec.yaml에서 font를 추가하면서 weight 값을 지정하는 것이 의미가 있는 것인지 문의

0

44

1

setState()를 호출하지 않으면 build가 실행 안되는 건가요?

0

54

1

video_call 플러그인 설치시 에러문제

0

67

1

children 안의 if 문에서 { } 못쓰는 이유?

0

51

1

이렇게 오류가 떠요

0

67

1

AppBar 사용했는데

0

64

2

[문제해결] '오늘도 출첵!' 의 171번 강의에서 중요한 문제를 발견했습니다

0

59

1

StatefulWidget 실습 에러가 발생합니다.[해결완료]

0

65

1

Video Player 프로젝트에 대한 추가 질문

0

54

0

Row위젯이나 column위젯의 위치는 누가 정하나요??

0

43

1

geolocator 오류때문에 개발진행이 불가능입니다

0

64

1

API 관련 이슈

0

89

2