본문 바로가기
카테고리 없음

[Flutter] Dialog 띄우기

by 리드맥 2022. 4. 14.
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는 최대한 위에 보관해주는게 좋다.  

댓글