[Flutter]-Stateless, Stateful 위젯

최준영·2021년 1월 5일
0

Flutter

목록 보기
2/10

Stateless 위젯

Stateless 위젯은 화면 표시용 위젯이다.
위젯이 로딩되어 화면에 표시된 이후에는 사용자 이벤트나 동작이 있어도 내용을 변경할 수 없습니다.

import 'package:flutter/material.dart';

void main()=>runApp(MaterialApp(
  title: 'Learn Stateless Widget',
  home: Scaffold(
    appBar: AppBar(title: Text('Stateless widget'),),
    body: _FirstStatelessWidget(),
  ),
));

class _FirstStatelessWidget extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return Text('stateless 위젯');
  }
}
  • body: _FirstStatelessWidget()
    body속성에 _FirstStatelessWidget 위젯을 생성

  • class _FirstStatelessWidget extends StatelessWidget
    _FirstStatelessWidget 클래스는 StatelessWidget 클래스를 상속

Stateless 위젯 요약

  • 화면 표시용 위젯
  • 내용을 변경할 수 없는 위젯
  • Stateless 위젯을 만들기 위해서는 먼저 StatelessWidget 클래스를 상속하고 build() 메서드에서 원하는 위젯을 반환
  • 안드로이드 스튜디오에서 stless치고 나오는 자동완성을 하면 자동으로 완성됨

Stateful 위젯

Stateful 위젯은 버튼을 누르거나 터치했을 때 화면에 변경된 내용을 표시할 수 있습니다.
플러터는 최대한 고정부와 변동부를 구별하도록 설계되어 있습니다.

import 'package:flutter/material.dart';

void main()=>runApp(MaterialApp(
  title: 'Learn Stateless Widget',
  home: Scaffold(
    appBar: AppBar(title: Text('Stateless widget'),),
    body: _FirstStatefulWidget(),
  ),
));

class _FirstStatefulWidget  extends StatefulWidget {
  
  State createState() => _FirstStatefulWidgetState();
}

class _FirstStatefulWidgetState extends State<_FirstStatefulWidget> {
  
  Widget build(BuildContext context) {
    return Text('stateful 위젯');
  }
}
  • class _FirstStatefulWidget extends StatefulWidget {
    Stateful 위젯은 상태(State)를 가집니다.
    따라서 새로 만든 _FirstStatefulWidget 클래는 build() 메서드 대신에 상태를 생성하는 createState() 메서드를 구현합니다.
    이 메서드는 _FirstStatefulWidgetState 객체를 반환합니다.

Stateful 위젯 생명주기

  • createState()
    상태를 생성.
    플러터가 StatefulWidget을 빌드하도록 지시하면 즉시 createState()가 호출된다.
    이 메서드는 반드시 존재해야 한다.

  • mounted 변수가 true가 됨
    화면에 위젯이 부착된 상태

  • initState()
    위젯이 생성될때 처음으로 호출되는 메서드.
    생성된 위젯 인스턴스의 BuildContext에 의존적인 것들의 데이터 초기화
    동일 위젯트리내에 부모위젯에 의존하는 속성 초기화
    Stream 구독, 알림변경, 또는 위젯의 데이터를 변경할 수 있는 다른 객체 핸들링.

  • didChangeDependencies
    상태 객체의 의존성이 변경되면 호출

  • build()
    위젯을 화면에 표시하는 메서드
    화면에 표시할 위젯을 반환 해야한다

  • didUpdateWidget()
    위젯의 설정이 변경될 때 호출됨

  • setState()
    위젯의 상태를 갱신
    이 메서드를 실행하면 위젯을 처음부터 다시 만들지만 initState() 메서드는 호출되지 않음
    데이터가 변경되었음을 프레임워크에 알리는데 사용되며 build context의 위젯을 다시 빌드하게 함

  • deactivate()
    상태 객체가 위젯 트리에서 제거됨.
    경우에 따라 다시 위젯 트리에 추가될 수도 있음

  • dispose()
    상태 객체가 위젯 트리에서 완전히 제거됨
    이 메서드가 호출되면 상태 객체는 더 이상 재사용할 수 없음

  • mounted가 false로 설정됨
    최종적으로 위젯이 화면에서 탈착됨

profile
Flutter 공부합니다

0개의 댓글