簡體   English   中英

期望一個“用戶”類型的值,但在嘗試將 Firestore 數據獲取到 flutter web 上的 PaginatedDataTable 時得到一個“Null”類型的值?

[英]Expected a value of type 'User', but got one of type 'Null' while trying to get firestore data in to PaginatedDataTable on flutter web?

我正在嘗試在 flutter web 應用程序上的 PaginatedDataTable 上顯示我的 Firestore 收集數據之一。 但得到錯誤。 請在下面修改我的代碼和調試錯誤。 如果以下方法不正確,請告訴我最佳方法。 我想在 PaginatedDataTable 上將我的 Firestore 字段顯示為 stream 構建器方法。 需要幫助如何做到這一點? 如果在 PaginatedDataTable 中不可能,如果有其他方法請告訴我。

下面是我的示例代碼:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';

class AdminDashboard extends StatefulWidget {
  const AdminDashboard({Key? key}) : super(key: key);

  @override
  _AdminDashboardState createState() => _AdminDashboardState();
}

class _AdminDashboardState extends State<AdminDashboard> {
  //final DataTableSource _allUsers = UsersData();

  @override
  Widget build(BuildContext context) {
    List<User>? users;
    return StreamBuilder(
        //padding: const EdgeInsets.all(16),
        stream: FirebaseFirestore.instance.collection("users").snapshots(),
        builder: (context, AsyncSnapshot<QuerySnapshot> snap) {
          users = snap.data!.docs.map((e) => User.fromMap(e.data)).cast<User>().toList();
          final DataTableSource _allUsers = UsersData(users!);
          if (snap.hasData) {
            return PaginatedDataTable(
              header: const Text("Header Text"),
              rowsPerPage: 9,
              columns: const [
                DataColumn(label: Text('Uid')),
                DataColumn(label: Text('Name')),
                DataColumn(label: Text('Email')),
                DataColumn(label: Text('Role'))
              ],
              source: _allUsers,
            );
          } else {
            return const Text('No data...');
          }
        });
  }
}

class User {
  
  late String name;

  late String email;

  late String role;

  late String uid;

  static fromMap(Object? Function() data) {}
}

class UsersData extends DataTableSource {
  final List<User> users;

  UsersData(this.users);

  @override
  DataRow getRow(int index) {
    return DataRow.byIndex(cells: [
      DataCell(Text(users[index].uid)),
      DataCell(Text(users[index].name)),
      DataCell(Text(users[index].email)),
      DataCell(Text(users[index].role)),
    ], index: index);
  }

  @override
  bool get isRowCountApproximate => false;

  @override
  int get rowCount => users.length;

  @override
  int get selectedRowCount => 0;
}

下面是調試控制台錯誤:

Launching lib\main.dart on Chrome in debug mode...
This app is linked to the debug service: ws://127.0.0.1:54737/8r23hBREOEg%3D/ws
Debug service listening on ws://127.0.0.1:54737/8r23hBREOEg=/ws
 Running with sound null safety
Connecting to VM Service at ws://127.0.0.1:54737/8r23hBREOEg=/ws

════════ Exception caught by widgets library ═══════════════════════════════════
The following TypeErrorImpl was thrown building StreamBuilder<QuerySnapshot<Map<String, dynamic>>>(dirty, state: _StreamBuilderBaseState<QuerySnapshot<Map<String, dynamic>>, AsyncSnapshot<QuerySnapshot<Map<String, dynamic>>>>#58793):
Unexpected null value.

The relevant error-causing widget was
StreamBuilder<QuerySnapshot<Map<String, dynamic>>>
When the exception was thrown, this was the stack
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 251:49      throw_
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 528:63  nullCheck
packages/pma/admin_dir/admin_dashboard.dart 21:81                                                                              <fn>
packages/flutter/src/widgets/async.dart 545:81                                                                                 build
packages/flutter/src/widgets/async.dart 124:48                                                                                 build
packages/flutter/src/widgets/framework.dart 4782:27                                                                            build
packages/flutter/src/widgets/framework.dart 4665:15                                                                            performRebuild
packages/flutter/src/widgets/framework.dart 4840:11                                                                            performRebuild
packages/flutter/src/widgets/framework.dart 4355:5                                                                             rebuild
packages/flutter/src/widgets/framework.dart 4643:5                                                                             [_firstBuild]
packages/flutter/src/widgets/framework.dart 4831:11                                                                            [_firstBuild]
packages/flutter/src/widgets/framework.dart 4638:5                                                                             mount
packages/flutter/src/widgets/framework.dart 3673:13                                                                            inflateWidget
packages/flutter/src/widgets/framework.dart 3425:18                                                                            updateChild
packages/flutter/src/widgets/framework.dart 4690:16                                                                            performRebuild
packages/flutter/src/widgets/framework.dart 4355:5                                                                             rebuild
packages/flutter/src/widgets/framework.dart 5020:5                                                                             update
packages/flutter/src/widgets/framework.dart 3412:14                                                                            updateChild
packages/flutter/src/widgets/framework.dart 4690:16                                                                            performRebuild
packages/flutter/src/widgets/framework.dart 4840:11                                                                            performRebuild
packages/flutter/src/widgets/framework.dart 4355:5                                                                             rebuild
packages/flutter/src/widgets/framework.dart 2620:31                                                                            buildScope
packages/flutter/src/widgets/binding.dart 882:9                                                                                drawFrame
packages/flutter/src/rendering/binding.dart 319:5                                                                              [_handlePersistentFrameCallback]
packages/flutter/src/scheduler/binding.dart 1143:15                                                                            [_invokeFrameCallback]
packages/flutter/src/scheduler/binding.dart 1080:9                                                                             handleDrawFrame
packages/flutter/src/scheduler/binding.dart 996:5                                                                              [_handleDrawFrame]
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/platform_dispatcher.dart 1003:13               invoke
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/platform_dispatcher.dart 157:5                 invokeOnDrawFrame
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine.dart 440:45                                    <fn>
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by widgets library ═══════════════════════════════════
Expected a value of type 'User', but got one of type 'Null'
The relevant error-causing widget was
StreamBuilder<QuerySnapshot<Map<String, dynamic>>>
════════════════════════════════════════════════════════════════════════════════ 

錯誤日志表明User.fromMap(e.data)沒有返回用戶(而是返回 null)。 我發現你的User.fromMap(e.data)實現是空的:

class User {
  
  late String name;

  late String email;

  late String role;

  late String uid;

  static fromMap(Object? Function() data) {}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM