flutter - 为什么在initState()之前调用有状态的小部件build()函数?

标签 flutter dart

我创建了一个包装器,以使用无状态小部件调用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稳定

最佳答案

你误会了。您自己的构建函数不会在initState之前调用而不是
但是您的小部件需要一个完整的子代和一个init函数。
这就要求先构建子项以将其作为参数传递。
那就是你所看到的。

关于flutter - 为什么在initState()之前调用有状态的小部件build()函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64536002/

相关文章:

dart - 在 Flutter 中按下回车键时始终保持软键盘打开

class - 如何从 Flutter 中的另一个类访问全局数据?

javascript - ChartJs beforeDraw 方法在发布版本中没有被调用

flutter - 应用启动时如何清除应用缓存

flutter - Cloud Firestore 子集合访问

flutter - 如何在 Flutter 中检测虚拟键盘事件

flutter - 显示/隐藏小部件而不重新创建它

flutter :错误:由于sliding_up_panel-1.0.2,非抽象类 'RenderParagraphX'缺少这些成员的实现

string - 如何在没有迭代的情况下在 Dart 中将 list<String> 转换为 String?

rest - Neo4J Rest API理解