showDialog(context: context, builder: (context){
return Dialog(child: Text('안녕'),);
});
showDialog를 사용했을때 화면이 나오지 않는다,
커스텀 위젯 바깥으로 내보내야 다이알로그가 나옴
ex) MaterialApp()을 바깥으로 내보낸다.
Widget build return 부분에서 MaterialApp() 제거
void main() {
runApp(
MaterialApp(
home: MyApp())
);
}
main 부분에 MaterialApp을 설정하면 다이얼로그가 제대로 나온다
-> 왜 MaterialApp 부분을 밖으로 빼내야 잘 작동을 하는가? ->
context: 부모위젯의 정보를 담고있는변수
showDialog 는 부모가 MaterialApp 이 들어있어야 작동하는 함수
MateriallApp을 따로 빼는 이유는 build(context) 밑에 MaterialApp 가 있으면 MaterialApp의 부모가 호출됨
그래서 MaterialApp를 main함수로 빼는것
->다이얼로그에 다른 class에있는 변수는 마음대로 가져오지 못함
-> 부모 에서 자식으로 state 를 전송하면 됨
방법:
1. 보내고:
2. 등록하고:
3. 사용: 그냥 함수보내듯이 보내면 되는거네
return DialogUI(state: a);
class DialogUI extends StatelessWidget {
DialogUI({Key? key , this.state}) : super(key: key);
var state;
() 안에 {} 중괄호를 넣으면 옵셔널임 넣어도 되고 안넣어도됨.
DialogUI에서 MyApp()으로는 전송 불가능 자식이 부모에게 전송 불가
-> 중요한 state는 최대한 위에 보관해주는게 좋다.
댓글