인프런 커뮤니티 질문&답변

lee si jun님의 프로필 이미지
lee si jun

작성한 질문수

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

TodayBanner 설계

build 함수안에 선언하는 것과 밖에 선언하는 것의 차이가 무엇인가요?

해결된 질문

작성

·

402

0

이번 강의에서 textStyle을 build 함수 안에 선언하는데

그냥 밖에다가 밑에처럼 하면 안되는 건가요?

안된다면 차이가 뭔가요?

import 'package:calendar_scheduler/const/colors.dart';
import 'package:flutter/material.dart';

class TodayBanner extends StatelessWidget {
  final DateTime selectedDay;
  final int scheduleCount;


  const TodayBanner({
    required this.selectedDay,
    required this.scheduleCount,
    Key? key,
  }) : super(key: key);

  static const textStyle = TextStyle(
    fontWeight: FontWeight.w600,
    color: Colors.white,
  ); // 이부부부부분

  @override
  Widget build(BuildContext context) {
//원래 선언 자리

    return Padding(
      padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
      child: Container(
        color: PRIMARY_COLOR,
        child: Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: [
            Text(
              '${selectedDay.year}년 ${selectedDay.month}월 ${selectedDay.day}일',
              style: textStyle,
            ),
            Text(
              '$scheduleCount개',
              style: textStyle,
            )
          ],
        ),
      ),
    );
  }
}

답변 1

2

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

build() 함수 내부에 선언하면 build() 함수의 사이클과 함게 변수가 갱신되고, 삭제되고, 생성됩니다. static const로 선언할경우 build() 함수의 사이클과 전혀 관계가 없게됩니다. 그러니 build() 함수가 재실행 될때마다 변수값이 갱신돼야한다면 build() 함수 내부에 선언하는게 맞겠습니다.

또한 static으로 선언하면 외부에서 TodayBanner.textStyle로 액세스가 가능해집니다. build() 함수 내부는 불가능합니다.

이런 차이점들이 있지만 이 차이점들이 단점이 되지 않는다면 어느곳에 선언해도 로직은 동일하게 작동 할 수 있습니다. 공집합이 없는 요소가 아니기때문이죠.

감사합니다!

lee si jun님의 프로필 이미지
lee si jun

작성한 질문수

질문하기