dart에서는 포인터가 존재하지 않는다.
따라서 부모 클래스에서 호출시킨 자식 클래스가 부모 클래스 내부 변수 값을 변화시키기 위해서는
부모 클래스에서 변수 값을 변화시키는 함수를 선언하고, 해당 함수를 자식 클래스의 매개변수로 넘겨주어야한다.
단순하게 설명해서 set, get 형태의 함수를 일반 함수로 선언하고 이를 자식 클래스의 생성자에 넘겨주는 것이다.
단, set,get 형태는 인수로 넘기고 받을 수 없으니 Function의 형태로 넘겨주어야한다. (혹은 typedef로 별도 타입을 생성해준다)
아래는 두 가지 방법의 예시이다.
재사용 가능한 형태의 예시1과 조금 더 간결한 형태의 예시2이다.
예시1.
부모 클래스에서 함수를 생성하고, 함수를 인수로 자식 클래스로 넘겨주는 방법
class ParentClass extends StatefulWidget {
int _value;
//변수를 변경하는 함수
setter(int value) => setState(() {
_value = value;
});
...
//자식 클래스 생성
ChildClass(setter);
...
}
class ChildClass{
ChildClass(this.setter);
Function setter;
//부모에게 받은 함수 사용
setter(1);
}
예시2. 별도의 함수 없이 class 생성과 동시에 함수 동작을 선언
//함수가 무형이므로 형태를 지정해준다. 지정하지 않을 경우 매개변수를 줄 수 없다.
typedef void Callback(int val);
class ParentClass extends StatefulWidget {
int _value;
//자식 클래스를 생성하는 부분
ChildClass(callback : (val) => setState(() => _value = val))
...
}
class ChildClass{
ChildClass({this.callback}); //가독성을 위해 callback : 으로 매개변수명을 지정해주었다.
final Callback callback; //최상단에서 Callback이라는 타입을 지정해주었기에 이러한 형태로 선언 가능하다.
//사용, 아래 예시는 tap했을 때, 1을 부모 클래스의 _value에 저장.
onTap: () {
callback(1)
},
}
이 같은 방법을 하위 클래스에서 상위 클래스를 다시 호출한다고 해서 callback 함수라고 한다.
비슷한 방법
[플러터] Stateful Class 내부에 접근하기
State Class 플러터의 Stateful 클래스는 State와 Stateful Widget 두 가지의 클래스가 생성되는데, 기본으로 State 클래스가 private으로 정의된다. 일반적으로 변수와 함수를 build가 존재하는 State 클래스에..
muhly.tistory.com
여러 곳에서 내부에 접근해야하는 경우에 인수로 함수를 넘겨주는 방식 대신 사용할 수 있는 방법이다.
'Flutter > Flutter Tech' 카테고리의 다른 글
[플러터] 파일을 cache 저장소에 저장하기 (0) | 2020.12.25 |
---|---|
[플러터] 이미지를 cache 저장소에 저장하기 (0) | 2020.12.22 |
[플러터] 위젯의 크기&위치를 반환받는 법 (0) | 2020.12.15 |
[Flutter] 키보드 팝업 상태에서 뒤로가기 이벤트 처리 (0) | 2020.09.24 |
[Flutter] 선택된 위젯을 관리하는 Focusnode (0) | 2020.09.24 |