작성
·
322
0
isDetail 여부에 따라 String? detail 을 적용시켜주는 부분에서 질문 드립니다.
팩토리를 만들때 원래 클래스에서 받는 내용을 그대로 받는 것으로 알고 있었는데 RestaurantCard 에서 선언한
final String? detail;
과
컨스트럭터 parameter 인
this.detail;
이 factory 에서는 받아오지 않아도 되는 것인가요?
factory RestaurantCard.fromModel({
required RestaurantModel model,
bool isDetail = false,
String? detail, <-이부분
}) {
return RestaurantCard(
image: Image.network(
model.thumbUrl,
fit: BoxFit.cover,
),
name: model.name,
tags: model.tags,
ratings: model.ratings,
ratingsCount: model.ratingsCount,
deliveryTime: model.deliveryTime,
deliveryFee: model.deliveryFee,
isDetail: isDetail,
detail: detail, <-이부분
);
}
스스로 해볼때
<- 이부분 이라고 표시한 부분도 포함해서 저는 작성해보았었습니다. 작동도 잘 되구요..
굳이 입력을 하지 않아도 되는 이유가 알듯말듯한데 확실하지가 않습니다. 그리고 저처럼 했을때 어떤 문제가 있는 것인가요?
감사합니다.
답변 2
0
안녕하세요!
그렇게 작업하셔도 문제 없지만 사실상 중복입니다.
나중에 아래와같이 코드를 변경합니다.
factory RestaurantCard.fromModel({
required RestaurantModel model,
bool isDetail = false,
}) {
return RestaurantCard(
image: Image.network(
model.thumbUrl,
fit: BoxFit.cover,
),
heroKey: model.id,
name: model.name,
tags: model.tags,
ratingsCount: model.ratingsCount,
deliveryTime: model.deliveryTime,
deliveryFee: model.deliveryFee,
ratings: model.ratings,
isDetail: isDetail,
detail: model is RestaurantDetailModel ? model.detail : null,
);
}
detail은 모델에 있는 값이기때문에 추가로 입력해줄 필요가 없습니다.
0
그리고 추가로, 해당 detail 을 적용 할때 if 조건문이
if(detail != null && isDetail)
에서 그냥...
if(isDetail)
만 해도 되는 것이 아닌가 생각되는데 이렇게 하면 어떤 잘못이나 파생되는 문제가 있는지도 추가로 여쭤보고 싶습니다. 감사합니다.
boolean과 null은 다른값입니다. if(null)은 다트언어에서 불가능한 문법입니다. JS에서 오셨다면 헷갈리실 수 있으나 이부분은 사실 JS가 특이한 부분이고 대부분의 언어가 Dart언어와 같습니다.