Flutter 关于 didChangeDependencies 什么时候会调用

此为个人理解:以简单的案例做解释

A:
import 'package:flutter/material.dart';

class A extends StatefulWidget {
  @override
  State createState() => AState();
}

class AState extends State {
  bool bDependenciesShouldChange = false;

  @override
  void initState() {
    super.initState();
    Future.delayed(Duration(seconds: 10), () {
      bDependenciesShouldChange = true;
      setState(() {});
    });

 @override
  Widget build(BuildContext context) {
    
  }
第1种情况、
return bDependenciesShouldChange
        ? Scaffold(
            body: Container(
            height: 500,
            alignment: Alignment.centerLeft,
            child: C(child: B()),
          ))
        : Scaffold(
            body: Container(
            height: 500,
            alignment: Alignment.centerLeft,
            child: C(child: SizedBox(width: 20, height: 50, child: B())),
          ));
    }

B的父级结构中的层级发生变化时(ScaffoldContainerCB => ScaffoldContainerCSizedBoxB), B会执行didChangeDependencies

第2种情况、
  return bDependenciesShouldChange ? 
      Scaffold(body: Center(child: C(child: B())))
       : Scaffold(
           body: Container(
             height: 500,
             alignment: Alignment.centerLeft,
          child: C(child: B()),
       ));

C的父级结构中的任一节点的widget类型发生变化时(Container => Center), 先C执行didChangeDependencies(由于 C 的父级widget类型发生变化) 再B会执行didChangeDependencies(B属于 C 级的子 widget,所以只要 B 级父类(C)发生改变,则 B 都会执行didChangeDependencies)

第3种情况、
return bDependenciesShouldChange
        ? Scaffold(
           body: Container(
             // height: 200, 注释掉此高度属性
             alignment: Alignment.centerRight,
             child: C(child: B())
          ))
        : Scaffold(
            body: Container(
            height: 500,
            alignment: Alignment.centerLeft,
            child: C(child: B()),
          ));

C的父级的属性(非属性值)发生变化 height => // height , 先C执行didChangeDependencies, 再B会执行didChangeDependencies(B属于 C 级的子 widget,所以只要 B 级父类(C)发生改变,则 B 都会执行didChangeDependencies)

你可能感兴趣的:(Flutter 关于 didChangeDependencies 什么时候会调用)