期望值类型为"用户",但在尝试将火库数据放入颤振网络上的分页数据表时获得了类型为"Null"的值之一?



我正试图在flutter web应用程序的PaginatedDataTable上显示我的一个firestore集合数据。但是得到了错误。请在下面对我的代码进行微调并调试错误。如果下面的方法不正确,请让我知道一个最好的方法。我想将我在PaginatedDataTable上的Firestore字段显示为流生成器方法。需要帮助如何做到这一点?如果在PaginatedDataTable中不可能,如果有其他方法,请告诉我。如何实现User类?

下面是我的示例代码:

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 libmain.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)没有返回User(而是返回null(。我发现您的User.fromMap(e.data)实现是空的:

class User {

late String name;
late String email;
late String role;
late String uid;
static fromMap(Object? Function() data) {}
}

最新更新