首页 > 解决方案 > Flutter - 更新了所有 Firebase 依赖项 - 错误状态:无法获取 DocumentSnapshotPlatform 上不存在的字段

问题描述

我有一个颤振项目,我想迁移到最新的依赖项(Firestore、FirebaseAuth、FirebaseStorage 等)。

我迁移了所有代码并更新了我的库以便能够启动应用程序。在我的许多 firebase 集合中,我没有定义字段,以前当我从 Firebase 请求该字段时,它只返回 null。现在相反,它会创建一个不存在的错误Bad state: cannot get a field on a DocumentSnapshotPlatform,并且应用程序无法正常运行。

我将不胜感激允许我更新我的依赖项但不会改变代码库的解决方案。

Pubspec.yaml 文件中的依赖项:

  cupertino_icons: ^1.0.4
  cloud_firestore: ^3.1.0
  firebase_auth: ^3.2.0
  curved_navigation_bar: ^1.0.1
  grouped_list: ^4.1.0
  random_color: ^1.0.6-nullsafety
  intl: ^0.17.0
  firebase_storage: ^10.1.0
  image_picker: ^0.8.4+4
  flutter_staggered_grid_view: ^0.4.1
  carousel_slider: ^4.0.0
  csv: ^5.0.0
  path_provider: ^2.0.7
  excel: ^2.0.0-null-safety-3
  flutter_email_sender: ^5.0.2
  firebase_core: ^1.10.0
  firebase_messaging: ^11.1.0
  auto_size_text: ^3.0.0
  flutter_icons: ^1.1.0
  camera: ^0.9.4+4
  qr_code_scanner: ^0.6.1
  package_info: ^2.0.2
  url_launcher: ^6.0.13

示例 Streambuilder 代码:

StreamBuilder(
  stream: stream,
  builder: (ctx, queryDetailSnapShot) {
    if (queryDetailSnapShot.connectionState ==
        ConnectionState.waiting) {
      return Center(child: CircularProgressIndicator());
    }

    var priceDetail = queryDetailSnapShot.data.docs;
    return ListView.builder(
        reverse: false,
        itemCount: priceDetail.length,
        itemBuilder: (ctx, index) {
          if (_selectedBottomIndex == 1) {
            return CostExpenseRequestContainer(
              widget.storenameUser,
              widget.storeCostAcess,
              widget.userName,
              widget.userEmail,
              widget.userId,
              widget.userLanguage,
              priceDetail[index]['Storename'],
              priceDetail[index]['Created_dt'],
              priceDetail[index]['Expense_type_en'],
              priceDetail[index]['Expense_type_th'],
              priceDetail[index]['Expense_amount_org'],
              priceDetail[index]['Expense_amount_approved'],
              priceDetail[index]['Visible_to'],
              priceDetail[index]['Expense_status'],
              priceDetail[index]['Photo_url'],
              priceDetail[index]['Service_dt'],
              priceDetail[index]['Partner_account_number'],
              priceDetail[index]['Partner_value_th'],
              priceDetail[index]['Partner_value_en'],
              priceDetail[index].id,
              key: ValueKey(priceDetail[index].id,),
            );
          } else
            return CostExpenseTrContainer(
              widget.storenameUser,
              widget.storeCostAcess,
              widget.userName,
              widget.userEmail,
              widget.userId,
              widget.userLanguage,
              priceDetail[index]['Storename'],
              priceDetail[index]['Created_dt'],
              priceDetail[index]['Service_dt'],
              priceDetail[index]['Expense_type_en'],
              priceDetail[index]['Expense_type_th'],
              priceDetail[index]['Expense_amount'],
              priceDetail[index]['Reversal_flg'],
              priceDetail[index]['Visible_to'],
              priceDetail[index].id,
              priceDetail[index]['Parent_record_id'],
              priceDetail[index]['Partner_account_number'],
              key: ValueKey(
                priceDetail[index].id,
              ),
            );
        });
  }),

错误信息:

Bad state: cannot get a field on a DocumentSnapshotPlatform which does not exist

标签: firebasefluttergoogle-cloud-firestoreerror-handling

解决方案


早些时候,您必须像这样调用文档快照中的字段

docSnapshot['field']

但是在最近的版本中,您必须调用 data 函数以将数据作为地图获取,然后访问所需的字段。例子

docSnapshot.data()['field']

推荐阅读