플러터에서 작동할 때에 다른 변경되지 않은 위젯까지 재렌더링을 하는 경우가 생길 수 있습니다. 예로 들면, 여러 위젯 안에 하나의 위젯에 데이터만 변경(렌더링)되기만 하면 되는데 그 위젯을 변경하기 위해 관련된 부모, 친구 위젯까지 모두 재렌더링이 발생할 수 있는 것이죠.
플러터로 개발을 하다 보면, const를 붙이게 되면 암묵적으로 렌더링에서 다시 그리지 않습니다. 비슷한 유형이라고 보시면 될 것 같습니다.
언제 사용해야할까?
해당 위젯이 복잡한 레이아웃과 그래픽(애니메이션)등이 포함되어 있어 렌더링 비용이 많이 들것이라고 예상이 된다면, `RepaintBoundary`를 사용하여 렌더링 성능을 최적화할 수 있습니다.
`RepaintBoundary`를 사용하게 되면, 수치는 낮지만 일부분의 CPU와 메모리 영역을 사용하게 됩니다. 즉, 모든 위젯에 감싸는 것은 오히려 CPU, 메모리를 사용하게 되기 때문에 특정 복잡한 위젯에서만 사용하는 것을 추천합니다.
예제
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: RepaintBoundary(
child: MyExpensiveToPaintWidget(),
),
),
),
);
}
}
class MyExpensiveToPaintWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
// This widget is expensive to paint because it contains a lot of complex
// layout and graphics.
return Container(
width: 200,
height: 200,
decoration: BoxDecoration(
color: Colors.red,
borderRadius: BorderRadius.circular(10),
),
child: Text('Expensive to paint'),
);
}
}
참고 링크
728x90
사업자 정보 표시
레플라 | 홍대기 | 경기도 부천시 부일로 519 화신오피스텔 1404호 | 사업자 등록번호 : 726-04-01977 | TEL : 070-8800-6071 | Mail : support@reafla.co.kr | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기
'Dart > Flutter' 카테고리의 다른 글
[Flutter] 플러터 성능향상을 위한 지연로딩 하기 (0) | 2022.12.24 |
---|---|
[Flutter] 플러터 성능향상을 위한 `AutomaticKeepAliveClientMixin` 위젯 캐싱하기 (0) | 2022.12.24 |
[Flutter] 플러터 파이어베이스(Firebase)를 통한 구글(Google) 소셜 로그인 설정하기 (0) | 2022.12.24 |
[Flutter] 플러터 `Rive` 적용하기 (0) | 2022.12.23 |
[Flutter] `TextField`, `TextFormField` 특정 포커스(Focus) 위치하기 (0) | 2022.12.23 |