Flutter – const widget 사용

onPress() 순간에 알수있음import 'package:flutter/material.dart';

class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key}) : super(key: key);

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        width: MediaQuery.of(context).size.width,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            /*
            * const 로 위젯을 인스턴스화하면 setState() > build()시에, 다시 선언하지않는다.
            * 앱이 실행하는 동안 한번만 그려놓고, 다음에 build() 가 실행되었을때 이미 그려놨던 위젯을 그대로 사용한다.
            * 빌드마다 모든 위젯들을 다시 인스턴스화하면 폰 리소스를 많이 차지하고, 효율적이지 않음
            * */

            const TestWidget(label: 'test1'), // test1 build 실행 (최초 그려질때만 실행됨)
            const TestWidget(label: 'test2'), // test2 build 실행 (최초 그려질때만 실행됨)
            ElevatedButton( // onPressed 순간에 값을 알수 있고, build 타임에 값을 알 수 없으므로 const 사용 불가
              onPressed: () {
                setState(() {

                }); // 버튼을 누르면 해당 class의 build()가 재실행되면서 TestWidget 의 build 도 재실행 되어야하지만, const 라 최초 한번만 실행
              },
              child: const Text('빌드!'), 
            ),
          ],
        ),
      ),
    );
  }
}

class TestWidget extends StatelessWidget {
  final String label;

  const TestWidget({
    required this.label,
    Key? key,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    print('$label build 실행');
    return Container(
      child: Text(
        label,
      ),
    );
  }
}