dart 异常:构建Observer时出错,但由于disableErrorBoundaries==true而被捕获

ddrv8njm  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(116)

我在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中使用了Observermobx状态管理。这里,_dashboardStore是mixinStore的类,初始化如下:

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

在我上面的Widget中,我使用了下面的可观察字段,这是他们在DashboardStore中的内容:

@observable
  DashboardTableDataRes? dashboardTableDataRes;

  @observable
  FactAndFigureDataRes? dashboardFactAndFigureRes;

但我在运行应用程序时遇到以下异常:
在构建Observer(dirty)时抛出了以下_Exception:异常:构建Observer时出错,但由于disableErrorBoundaries==true而被捕获
导致错误的相关小部件为:Observer观察者:file:/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

我做错了什么或者可能有什么问题?

jmo0nnb3

jmo0nnb31#

您直接返回singleChildScrollView而没有首先确保null安全可能是问题所在。
所以,你可以尝试下面的方法来避免这个错误:

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使用null safe,并返回loading或您希望在代码中返回的内容。

相关问题