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

유하님의 프로필 이미지

작성한 질문수

Flutter 앱 개발 실전

CartBottomSheet

late final 속성

해결된 질문

24.09.08 23:50 작성

·

9

1

part 'theme_color.dart';
part 'theme_deco.dart';
part 'theme_typo.dart';

abstract class ThemeCore{
  late final Brightness theme;
  late final ThemeColor color;
  late final ThemeDeco deco;
  late final ThemeTypo typo;

}

코드를 복사해서 클래스 이름만 바꿔서 붙여 넣었습니다

import 'package:custom_house/theme/foundation/theme_core.dart';
import 'package:custom_house/theme/res/base_typo.dart';
import 'package:custom_house/theme/res/palette.dart';
import 'package:flutter/material.dart';

class LightTheme implements ThemeCore {
  @override
  Brightness brightness = Brightness.light;

  @override
  ThemeColor color = ThemeColor(
    surface: Palette.grey100,
    background: Palette.black.withOpacity(0.55),
    text: Palette.black,
    subtext: Palette.grey700,
    toastContainer: Palette.black.withOpacity(0.85),
    onToastContainer: Palette.grey100,
    hint: Palette.grey300,
    hintContainer: Palette.grey150,
    onHintContainer: Palette.grey500,
    inactive: Palette.grey400,
    inactiveContainer: Palette.grey250,
    onInactiveContainer: Palette.white,
    primary: Palette.green,
    onPrimary: Palette.white,
    secondary: Palette.red,
    onSecondary: Palette.white,
    tertiary: Palette.yellow,
    onTertiary: Palette.white,
  );

  @override
  late ThemeTypo typo = ThemeTypo(
    typo: const NotoSans(),
    fontColor: color.text,
  );

  @override
  ThemeDeco deco = ThemeDeco(
    shadow: [
      BoxShadow(
        color: Palette.black.withOpacity(0.1),
        blurRadius: 35,
      ),
    ],
  );
}

이렇구요

 

기존 아래와 같은 코드에서

  @override
  Brightness brightness = Brightness.light;

다음과 같이 바꿔봤는데

  @override
  late final Brightness brightness = Brightness.light;

에러가 나는데 이해가 되지 않습니다.

어차피 나중에 초기화를 해도 되니까 late를 붙인거고 , 밝다라는 속성은 바꾸지 않을 거니까 final 키워드까지 썼는데
에러가 나는 이유를 모르겠습니다. implements로 구현하니까 이런 현상이 생기네요..

 

 

 

답변 1

2

DevStory님의 프로필 이미지
DevStory
지식공유자

2024. 09. 09. 11:53

안녕하세요.

말씀해 주신 문제를 해결하는 두 가지 방법이 있습니다.

방법1. AppTheme 클래스의 brightness를 Getter 함수로 변경한다.

abstract interface class AppTheme {
  Brightness get brightness;
  late final AppColor color;
  late final AppDeco deco;
  late final AppTypo typo;
}

방법2. LightTheme 클래스의 생성자를 통해서 brightness의 초기값을 전달한다.

class LightTheme implements AppTheme {
  LightTheme({this.brightness = Brightness.light});

  @override
  late final Brightness brightness;

또는

class LightTheme implements AppTheme {
  LightTheme() : brightness = Brightness.light;

  @override
  late final Brightness brightness;

위와 같은 방법으로 처리를 해야하는 근거는 링크에서 확인하실 수 있는데, Dart 언어 스팩이 이렇게 구현되어 있다고 이해하시면 될 것 같습니다.

 

감사합니다 :)

유하님의 프로필 이미지

작성한 질문수

질문하기