为什么BuildContext仅在StatelessWidget.build中可用,使用它的好方法是什么?

时间:2020-10-08 09:26:09

标签: flutter

我已经知道,构建上下文可以在StatefulWidget中的任何地方使用,但仅在使用Stateless Widget时可以在构建函数中使用。小部件中有太多内容需要引用构建上下文,例如ThemeshowDialogNavigatorProvider ... 例如,我在StatelessWidget中有以下代码:

@override
Widget build(BuildContext context){
  ...
  _getFirstWidget();
  ...
}

...
Widget _getFirstWidget(){
  return _getSecondWidget();
}

Widget _getSecondWidget(){
  return _getThirdWidget();
}

Widget _getThirdWidget(){
  // use build context here
}
...

如果我想在小部件的末尾使用构建上下文,我想到了三种方法:

  1. 逐层传递构建上下文
  2. 转换为StatefulWidget
  3. 将最后一个小部件转换为无状态小部件本身(并在构建中使用构建上下文)

为什么Flutter在StatelessWidget中设置了此限制?

1 个答案:

答案 0 :(得分:0)

我不太确定,但是我想您想使用函数'_getThirdWidget()'中的build方法的BuildContext。您可以将其作为如下参数传递:


Widget _getThirdWidget(BuildContext context) {
    // Use the context here
}

// Call the function like this in the parent widget
@override
Widget build(BuildContext context) {
    return _getThirdWidget(context);
}

让我知道这是否回答了您的问题!