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