[플러터] Stateful Class 내부에 접근하기

2021. 1. 10. 00:16·Flutter/Flutter Tech
목차
  1. State Class
  2. 접근하기
  3. 비슷한 방법

State Class

플러터의 Stateful 클래스는 State와 Stateful Widget 두 가지의 클래스가 생성되는데, 기본으로 State 클래스가 private으로 정의된다.

일반적으로 변수와 함수를 build가 존재하는 State 클래스에 정의하게 되는데, 이렇게 정의된 것들은 외부에서는 사용할 수 없다.

이를 사용하기 위해서 기본 위젯 Stream을 활용하거나 패키지 GetX를 사용하긴 하지만 이 것들을 사용하고 싶지 않을 수도 있다.

이 포스팅에서는 State 클래스 내부에 접근할 수 있는 근본적인 방법을 설명한다.

이전에 자식 클래스에서 부모 클래스의 데이터에 접근하는 방법을 포스팅 한 적이 있는데, 이 방법을 사용해도 무방하다.

접근하기

class MyStatefulWidget extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => new MyStatefulWidgetState();

  //context를 반환하는 함수 'of'를 static으로 생성한다.
  static MyStatefulWidgetState of(BuildContext context) =>
      context.findAncestorStateOfType<MyStatefulWidgetState>();
}

class MyStatefulWidgetState extends State<MyStatefulWidget> {
  String _string = "please input text";

  set string(String value) => setState(() => _string = value);

  @override
  Widget build(BuildContext context) {
    return new Column(
      children: <Widget>[new Text(_string), MyChildClass()],
    );
  }
}

class MyChildClass extends StatelessWidget {
  MyChildClass();

  @override
  Widget build(BuildContext context) {
    return new Column(
      children: <Widget>[
        new RaisedButton(
          onPressed: () {
            MyStatefulWidget.of(context).string = "hello world";
          },
          child: new Text("Click"),
        )
      ],
    );
  }
}

 

예제 코드를 보며 바로 이해해보자.

Stateful을 자동 생성할 경우 State 클래스명 앞에 _(언더바)가 붙는다. _ 를 지워 클래스를 public로 만들어준다.

그리고 StatefulWidget 클래스 내부에서 State를 반환하는 함수를 Static으로 선언한다.

 

  static MyStatefulWidgetState of(BuildContext context) =>
      context.findAncestorStateOfType<MyStatefulWidgetState>();

함수 명이 of이고 context를 인자로 전달받는다. findAncestorStateOfType이라는 함수로 State 클래스 자체를 반환한다.

return값이 State 클래스이다.

 

    MyStatefulWidget.of(context).string = "hello world";

그리고 접근이 필요할 때 위와 같이 사용하면, State 클래스의 내부에 곧바로 접근할 수 있다.

위의 예제는 State 클래스 내부의 Set함수를 곧바로 호출한 것이다.

 

 

비슷한 방법

 

[플러터] 자식 클래스에서 부모 클래스에 데이터 전달

dart에서는 포인터가 존재하지 않는다. 따라서 부모 클래스에서 호출시킨 자식 클래스가 부모 클래스 내부 변수 값을 변화시키기 위해서는 부모 클래스에서 변수 값을 변화시키는 함수를 선언하

muhly.tistory.com

static으로 선언하기때문에 접근이 필요한 영역이 작거나, 자식 클래스에서만 호출하면 되는 경우라면 위와 같은 방법을 권장한다.

저작자표시 비영리 변경금지 (새창열림)

'Flutter > Flutter Tech' 카테고리의 다른 글

[플러터] 뒤로가기 버튼/제스쳐 금지  (0) 2021.01.20
[플러터] Splash 화면 변경하기 (로딩 화면)  (0) 2021.01.20
[플러터] 파일을 cache 저장소에 저장하기  (0) 2020.12.25
[플러터] 이미지를 cache 저장소에 저장하기  (0) 2020.12.22
[플러터] 위젯의 크기&위치를 반환받는 법  (0) 2020.12.15
  1. State Class
  2. 접근하기
  3. 비슷한 방법
'Flutter/Flutter Tech' 카테고리의 다른 글
  • [플러터] 뒤로가기 버튼/제스쳐 금지
  • [플러터] Splash 화면 변경하기 (로딩 화면)
  • [플러터] 파일을 cache 저장소에 저장하기
  • [플러터] 이미지를 cache 저장소에 저장하기
박유상의 개발블로그
박유상의 개발블로그
개발블로그
  • 박유상의 개발블로그
    박유상의 개발블로그
    박유상의 개발블로그
  • 전체
    오늘
    어제
    • 전체 (134)
      • Who am I (10)
        • Portfolio (4)
        • Reminiscence (5)
        • Oversea (1)
        • SiliconValley (0)
      • React (36)
        • React Basic (15)
        • React Tech (5)
        • JavaScript (7)
        • TypeScript (3)
        • CSS&HTML (3)
        • Firebase (3)
      • NodeJS (1)
        • NodeJS Basic (1)
      • Flutter (55)
        • Flutter Widget Design (5)
        • Flutter Widget Basic (8)
        • Flutter Tech (18)
        • Flutter Issue (7)
        • Flutter Web (6)
        • About Flutter (2)
        • Firebase (1)
        • Dev Env (1)
        • Dart (7)
      • Programming (31)
        • Web (1)
        • General (0)
        • Algorithm (25)
        • Python (1)
        • VS Code (2)
      • Django (0)
  • 블로그 메뉴

    • Who I AM
    • React
    • NodeJS
    • Flutter
    • Programming
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    플러터 웹
    플러터
    리액트
    JavaScript
    HTML
    포트폴리오
    DART
    useTranslation
    flutter web
    파이썬
    Lingory
    웹
    알고리즘
    TypeScript
    Firebase
    탐욕법
    JSON
    map
    자바스크립트
    useRef
    Flutter
    github
    CSS
    useState
    react
    링고리
    Python
    Redux
    DP
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
박유상의 개발블로그
[플러터] Stateful Class 내부에 접근하기

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.