Builder 클래스의 의미

2019. 4. 16. 11:29Flutter

#1

단순할 줄 알았던 showDialog 사용하기 위해 어렵게 돌아서 왔다.

문제발생 : main.dart > build() > Scaffold > floatingActionButton 아래의 소스코드가 동작하지 않는다.

floatingActionButton: FloatingActionButton(
          onPressed: () {
            showDialog(
                context: context,
                builder: (context) {
                  return AlertDialog(
                    title: Text('푸시알림'),
                    content: Text('얍'),
                    actions: <Widget>[
                      FlatButton(
                        child: Text('OK'),
                        onPressed: () {
                          Navigator.of(context).pop();
                        },
                      )
                    ],
                  );
                },
            );
          },
          child: Icon(Icons.add),
        ),

 

#2

이유는 'context' 때문. 

쉽게 말해 showDialog를 사용할때 전달해줘야 하는 context를 잘못 넘겨줬다. 

이 경우 Builder를 사용해 child의 context를 넘겨줄 것.

https://stackoverflow.com/questions/51304568/scaffold-of-called-with-a-context-that-does-not-contain-a-scaffold

 

#3

수정 (정상코드)

floatingActionButton: new Builder(
          builder: (context) => FloatingActionButton(
                onPressed: () {
                  showDialog(
                    context: context,
                    builder: (context) {
                      return AlertDialog(
                        title: Text('푸시알림'),
                        content: Text('얍'),
                        actions: <Widget>[
                          FlatButton(
                            child: Text('OK'),
                            onPressed: () {
                              Navigator.of(context).pop();
                            },
                          )
                        ],
                      );
                    },
                  );
                },
                child: Icon(Icons.add),
              ),
        ),

 

#4

Builder 클래스란, '자식 위젯의 context를 전달해 주는 객체'.

+ Flutter에서 모든 위젯은 builder() 함수를 가지고 인자값으로 context를 전달한다. (Flutter Framework Automatically).

 

참고 : https://stackoverflow.com/questions/52088889/can-someone-explain-to-me-what-the-builder-class-does-in-flutter

 

Can someone explain to me what the Builder Class does in Flutter?

The documentation is very confusing and vague. Here is what it states: Builder class A platonic widget that calls a closure to obtain its child widget. Here are my questions: What do they mea...

stackoverflow.com