当前位置: 首页 > news >正文

didChangeDependencies什么时候被调用

参考
我先上一个Demo,这个Demo也就是网上面传的比较广的,我们就以这个来举例子说明网上的结论:“父级结构中的层级发生变化时didChangeDependencies被调用“ 这个结论为什么是不完整

import 'package:flutter/material.dart';

class TestDidChangeDependencies2 extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => TestDidChangeDependencies2State();
}

class TestDidChangeDependencies2State extends State<TestDidChangeDependencies2> {
  bool bDependenciesShouldChange = true;

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {

    return Scaffold(
        body: bDependenciesShouldChange ?
            Container(
              height: 500,
              alignment: Alignment.centerLeft,
              child: C(child: B()),
            )
            : Container(
              height: 500,
              alignment: Alignment.centerLeft,
              child: C(child: SizedBox(width: 20, height: 50, child: B())),
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: _incrementCounter,
            tooltip: 'Increment',
            child: Icon(Icons.add),
          )
    );
  }

  void _incrementCounter(){
    setState(() {
      bDependenciesShouldChange = !bDependenciesShouldChange;
    });
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    debugPrint("AdidChangeDependencies");
  }
}

class B extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => BState();
}

class BState extends State<B> {
  @override
  Widget build(BuildContext context) {
    return Center(child: Text("Test"));
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    debugPrint("BdidChangeDependencies");
  }
}

class C extends StatefulWidget {
  final Widget child;

  C({Key? key, required this.child}) : super(key: key);

  @override
  State<StatefulWidget> createState() => CState();
}

class CState extends State<C> {
  @override
  Widget build(BuildContext context) {
    return widget.child;
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    debugPrint("CdidChangeDependencies");
  }
}

class D extends StatelessWidget{

  final Widget child_D;
  D({required this.child_D});

  @override
  Widget build(BuildContext context) {
    return child_D;
  }
}

这个是网上流传的Demo,我把它调试为比较好可运行状态,大家可以来观察下输出,首先刚运行的时候就会打印如下:

I/flutter (20121): AdidChangeDependencies
I/flutter (20121): CdidChangeDependencies
I/flutter (20121): BdidChangeDependencies

相关文章:

  • 【测试面试】2022年软件测试面试题大全(精品带回答的)
  • Java --- JVM年轻代与老年代
  • 制作地图的布局、元素和设计介绍
  • C/C++面试准备——运算符
  • 【华为机考】ACM输入输出(中等+)
  • 美团四年,字节三年这七年测试之路希望能让正在迷茫的你少走弯路
  • Vue 基础
  • Ts/Typescript基础运用
  • 嵌入注意力机制的多尺度深度可分离表情识别--2021.宋玉琴
  • 页面登录功能的思路
  • ShardingSphere 5.2.0:分片审计功能拦截多分片场景下的不合理请求
  • 毕业设计 单片机stm32智能大棚监控护理系统 - lora 远程通信
  • 关于QCefView的一些事
  • b站pink老师JavaScript的jQuery 案例代码——电梯导航案例
  • Python快速实现简易飞机大战小游戏
  • Angular 2 DI - IoC DI - 1
  • Apache Spark Streaming 使用实例
  • canvas绘制圆角头像
  • Docker入门(二) - Dockerfile
  • express.js的介绍及使用
  • javascript从右向左截取指定位数字符的3种方法
  • JavaScript实现分页效果
  • mysql innodb 索引使用指南
  • MySQL数据库运维之数据恢复
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • scrapy学习之路4(itemloder的使用)
  • Spring声明式事务管理之一:五大属性分析
  • 给github项目添加CI badge
  • 近期前端发展计划
  • 跨域
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 漂亮刷新控件-iOS
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 让你的分享飞起来——极光推出社会化分享组件
  • 深入 Nginx 之配置篇
  • 学习笔记:对象,原型和继承(1)
  • 一天一个设计模式之JS实现——适配器模式
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #每日一题合集#牛客JZ23-JZ33
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $().each和$.each的区别
  • (27)4.8 习题课
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二)pulsar安装在独立的docker中,python测试