美文网首页
Flutter 关于 didChangeDependencies

Flutter 关于 didChangeDependencies

作者: 91阿生 | 来源:发表于2021-09-01 11:08 被阅读0次

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

    A:
    import 'package:flutter/material.dart';
    
    class A extends StatefulWidget {
      @override
      State<StatefulWidget> createState() => AState();
    }
    
    class AState extends State<A> {
      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

          本文链接:https://www.haomeiwen.com/subject/lzrxwltx.html