[Flutter] BuildContext

2020년 10월 04일 by 진아사랑해

    [Flutter] BuildContext 목차
반응형

Context를 사용하면서 문제가 될 수 있는 부분을 정리하였다

 

1. Stateful Widget 내에서 context를 사용하는 것은 아무런 문제가 없다

class _MyHomePageState extends State<MyHomePage> {

  void showDialog() {

    context;  <= 에러가 나지 않음

  }

 

2. Stateless Widget 내에서 context 사용

class _MyHomePage extends StatelessWidget {

  void showDialog() {

    context;  <= 에러가 발생함

 

=>   void showDialog( BuildContext context) {

       즉, 함수를 호출할 때 context를 넣어주어야 한다.

 

3. Stateful Widget에 있는 initState() 함수에서 context를 사용해야 하는 경우

1) void initState() {

     super.initState();

     context;    <= Build를 하면 준비가 되지 않은 context를 사용한다고 에러가 발생

2) 사용할 수 있는 방법은

  @override

  void initState() {

     super.initState();

     Future.delayed(Duration.zero).then((_) {

       final color = Theme.of(context).primaryColor;

     });

  }

  Future를 사용함으로 Stateful 위젯내에 있는 내용을 실행한 후에 Futre가 동작함으로 context 내용이 

  채워져 있다

 

  @override

  void didChangeDependencies() {

    super.didChangeDependencies();

    final color =  Theme.of(context).primaryColor;

  }

  context나 위젯의 inheritance가 변경되면 자동으로 콜백되는 함수를 사용해도 된다

 

4. Scaffold.of(context)  등의 of(context)를 사용하는데 context가 맞지 않다고 니오는 경우는

Scaffold.of(context).showSnackBar(

  SnackBar(

=>

Builder(

  builder:(context) {

    return 

    ....

    Scaffold.of(context).showSnackBar(

      SnackBar( 

    ....

Builder( )를 사용하여 SnackBar에서 사용하고자 하는 context를 만들어 주면 된다

 

참고 영상) www.youtube.com/watch?v=gWOkEh3GJ3g&t=134s

 

 

 

 

 

반응형

'flutter' 카테고리의 다른 글

[Flutter] SafeArea 위젯  (0) 2020.10.11
Dart map() 함수 & ... 함수  (0) 2020.10.07
[Flutter] Stream 사용법  (0) 2020.10.04
[Flutter] Future async & await 사용법  (0) 2020.10.04
[Flutter] ChangeNotifier provider 사용법  (0) 2020.10.03