我创建了一个包装器,以使用无状态小部件调用init():
class StatefulWrapper extends StatefulWidget {
StatefulWrapper({this.child, this.init});
final Widget child;
final void Function() init;
@override
_StatefulWrapperState createState() => _StatefulWrapperState();
}
class _StatefulWrapperState extends State<StatefulWrapper> {
@override
void initState() {
if (widget.init != null) widget.init();
super.initState();
}
@override
Widget build(BuildContext context) => widget.child ?? SizedBox();
}
这是一个使用它的简单示例:
class SomeView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StatefulWrapper(
init: () => print('---------- step 1'),
child: Scaffold(
body: generateWidget(),
),
);
}
}
Widget generateWidget() {
print('---------- step 2');
return Container(width: 50, height: 50);
}
输出:
I/flutter ( 2810): ---------- step 2
I/flutter ( 2810): ---------- step 1
为什么在步骤1之前打印步骤2?
Flutter 1.22.2稳定
答案 0 :(得分:0)
您误会了。您的 own 构建函数不会不会在initState之前被调用。
但是您的小部件需要一个完整的子代和一个init函数。
这需要先构建 child ,然后才能将其作为参数传递。
这就是你所看到的。