작성
·
289
0
강사님 안녕하세요?
강의 너무 잘 듣고 있습니다.
코드 정리 관련하여 질문이 있습니다!
(전공자(또는 현업 개발자)가 아니라 질문이 이상해도 양해의 말씀 부탁 드립니다.)
코드정리 시 StatelessWidget 클래스로 정리하는 것(아래 코드 중 #2)과 Return 타입을 Widget으로 하는 함수로 정리하는 것(아래 코드 중 #3)의 차이가 궁금합니다.
#1
class _HomeScreenState extends State<HomeScreen> {
List<int> numbers = [123, 456, 789];
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: PRIMARY_COLOR,
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 5),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
header(),
middle(numbers: numbers.toList()),
bottom(context, onCreateNumbers),
],
),
),
);
}
#2
class header extends StatelessWidget {
const header({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text(
'랜덤숫자 생성기',
style: TextStyle(
color: Colors.white,
fontSize: 40,
),
),
IconButton(
icon: const Icon(Icons.settings),
color: RED_COLOR,
onPressed: () {},
),
],
);
}
}
#3
Widget header() {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text(
'랜덤숫자 생성기',
style: TextStyle(
color: Colors.white,
fontSize: 40,
),
),
IconButton(
icon: const Icon(Icons.settings),
color: RED_COLOR,
onPressed: () {},
),
],
);
}
답변 1
1
안녕하세요!
일단 차이는 명확합니다. 위젯 기반으로 새로운 UI를 만들게되면 독립적인 라이프사이클을 가져갈 수 있습니다. 즉, 해당 클래스에 국한되게 build() 함수를 실행해서 렌더링 사이클을 가져갈 수 있습니다.
하지만 함수형으로 구현할경우 그렇지 않습니다. 클래스에 종속되는 위젯을 반환하는 함수는 어쨋든 해당 위젯의 build() 함수가 실행될때 함수가 재실행 될 수밖에 없습니다. 독립적인 라이프사이클을 가져가지 못하는거죠.
그러니 퍼포먼스적으로 봤을때 부분적으로 렌더링 할 수 있는 여지가 있다면 새로운 위젯을 생성해서 UI를 작업하시는게 제일 유리합니다.
다만 가장 큰 단점은 역시 새로운 위젯을 생성했을때 많은 템플릿 코드가 생성된다는 점이죠!
감사합니다.