반응형
flutter에서 자식 위젯이 부모 위젯 함수 호출하기를 샘플로 구현해 보았습니다.
구조를 조금 복잡하게 구성해 보았습니다.
<조건>
StatefulWidget A
A의 자식인 StatefulWidget B
B의 자식인 StatelessWidget C
C의 자식인 StatelessWidget D 인 구조에서
D 리스트 뷰 클릭 시 A 내 call 함수 실행하게 만드는 샘플
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: StatefulWidgetA(),
),
),
);
}
}
class StatefulWidgetA extends StatefulWidget {
@override
_StatefulWidgetAState createState() => _StatefulWidgetAState();
}
class _StatefulWidgetAState extends State<StatefulWidgetA> {
void callFunction() {
print("Function called from StatefulWidget A");
}
@override
Widget build(BuildContext context) {
return StatefulWidgetB(callFunction: callFunction);
}
}
class StatefulWidgetB extends StatefulWidget {
final Function callFunction;
StatefulWidgetB({required this.callFunction});
@override
_StatefulWidgetBState createState() => _StatefulWidgetBState();
}
class _StatefulWidgetBState extends State<StatefulWidgetB> {
@override
Widget build(BuildContext context) {
return StatelessWidgetC(callFunction: widget.callFunction);
}
}
class StatelessWidgetC extends StatelessWidget {
final Function callFunction;
StatelessWidgetC({required this.callFunction});
@override
Widget build(BuildContext context) {
return StatelessWidgetD(callFunction: callFunction);
}
}
class StatelessWidgetD extends StatelessWidget {
final Function callFunction;
StatelessWidgetD({required this.callFunction});
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
callFunction();
},
child: Container(
padding: EdgeInsets.all(20.0),
color: Colors.blue,
child: Text(
'Click me (D)',
style: TextStyle(color: Colors.white),
),
),
);
}
}
dartpad 결과 화면
반응형
'프로그램 개발해서 돈벌기 > flutter' 카테고리의 다른 글
[초보자 게임 만들기 기초] flutter flame 구조와 사각형 위에서 아래로 떨어뜨리기 (0) | 2024.04.30 |
---|---|
유튜브 처럼 플레이 화면과 하단에 동영상 리스트가 보일때 동영상 리스트를 클릭 시 상단 플레이에 플레이 되게 만들기 (0) | 2024.03.04 |
[flutter] Build failed due to use of deprecated Android v1 embedding. 를 만났을때 에러 수정 방법 (0) | 2024.01.31 |
flutter iOS에 권한 요청 방법 : 주소록에 접근 권한 요청하기 (0) | 2023.09.20 |
flutter에서 iOS 기기에 릴리즈(Release) 모드로 커맨드라인(command line)에서 실행하기 (0) | 2023.09.15 |
댓글