此为个人理解:以简单的案例做解释
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的父级结构中的层级
发生变化时(Scaffold
、Container
、C
、B
=> Scaffold
、Container
、C
、SizedBox
、B
), 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)
网友评论