异常:构建观察者时发生错误,但自从disableErrorBoundaries==true后就被捕获了

问题描述 投票:0回答:1

我在 flutter 应用程序中 StatefulWidget 类的构建方法中返回以下小部件:

return Stack(
  children: [
    Observer(
      builder: (context) {
        return SingleChildScrollView(
          scrollDirection: Axis.vertical,
          child: Column(
            children: [
              _dashboardStore.showFirstPageLoading == false
                  ? _buildDashboardTableDataWidgets()
                  : Container(),
              _dashboardStore.showFirstPageLoading == false
                  ? _buildFactAndFigureWidget()
                  : Container(),
              //_showSearchAndSummaryList(),
            ],
          ),
        );
      },
    ),
    _showRetryButton(),
    _showLoader()
  ],
);

你可以注意到我在flutter中使用了Observer并使用了mobx状态管理。这里,_dashboardStore是与mixin Store一起初始化的类,如下所示:

_dashboardStore = Provider.of<DashboardStore>(context, listen: false);

在上面的小部件中,我使用以下可观察字段,它们在 DashboardStore 中为:

@observable
  DashboardTableDataRes? dashboardTableDataRes;

  @observable
  FactAndFigureDataRes? dashboardFactAndFigureRes;

但是我在运行应用程序时遇到以下异常:

构建观察者时抛出以下_Exception(脏): 异常:构建Observer时发生错误,但被捕获 因为disableErrorBoundaries==true

导致错误的相关小部件是:Observer 观察者:文件:///home/growexx/StudioProjects/flutter-mobile-app/lib/ui/dashboard/dashboard_view.dart:92:9

下面是我在 pubspec.yaml 文件中使用的依赖项:

mobx: ^2.0.1
  flutter_mobx: ^2.0.0
  provider: ^6.0.0

以下是开发依赖项:

  mobx_codegen: ^2.0.1+3
  build_runner: ^2.0.3

我在这里做错了什么或者可能是什么问题?

flutter dart mobx observer-pattern provider
1个回答
0
投票

您在没有首先确保null安全的情况下直接返回singleChildScrollView可能是问题所在。

所以,您可以尝试以下方法来避免这个错误

Observer(
  builder: (context) {
    // check for null safety first
    if (_dashboardStore.dashboardTableDataRes == null && 
        _dashboardStore.dashboardFactAndFigureRes == null) {
     return Container(); // Return loading or any Other error widget you want
    }

    // Continue to build your UI without null data
    // your widget
    return SingleChildScrollView(
    );
  },
),

而且我也假设

_dashboardStore.showFirstPageLoading == false
在您的商店(控制器)中,您使用默认值进行初始化。

如果没有,那么也尝试对

_dashboardStore.showFirstPageLoading == false
进行空安全,并返回加载或代码中您想要的内容。

希望这对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.