What is the difference between didChangeDependencies and initState?

后端 未结 8 947
刺人心
刺人心 2021-01-31 17:09

I am new to flutter and when I want to call my context in InitState it throws an error : which is about BuildContext.inheritFromWidgetOfExactType but then I use did

8条回答
  •  难免孤独
    2021-01-31 18:13

    This is a supplemental answer showing what the OP described.

    The State class of a StatefulWidget has a context property. This build context is first available in didChangeDependencies. Trying to use context in initState will cause an error.

    class HomeWidget extends StatefulWidget {
      const HomeWidget({Key key}) : super(key: key);
    
      @override
      _HomeWidgetState createState() => _HomeWidgetState();
    }
    
    class _HomeWidgetState extends State {
      @override
      void initState() {
        print('initState');
        // print(Theme.of(context));        // ERROR!
        super.initState();
      }
    
      @override
      void didChangeDependencies() {
        print('didChangeDependencies');
        print(Theme.of(context));           // OK
        super.didChangeDependencies();
      }
    
      @override
      Widget build(BuildContext context) {
        print('build');
        print(Theme.of(context));           // OK
        return Container();
      }
    }
    

    Running that gives the print statements in the following order:

    initState
    didChangeDependencies
    ThemeData#93b06
    build
    ThemeData#93b06
    

    See also Working with didChangeDependencies() in Flutter

提交回复
热议问题