首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PaginatedDataTable或datatable上显示firestore的所有文档字段作为flutter web上的streambuilder?

如何在PaginatedDataTable或datatable上显示firestore的所有文档字段作为flutter web上的streambuilder?
EN

Stack Overflow用户
提问于 2021-11-17 12:10:21
回答 1查看 256关注 0票数 4

我可以在PaginatedDataTable上显示普通的文本域。但是我想在PaginatedDataTable上显示我的Firestore字段作为流构建器方法。我已经在网上搜索过了,但我找不到与我的要求相关的信息。如何将firestore数据导入到PaginatedDataTable源中。还有没有别的办法请让我知道。寻找解决方案,这是非常有用的,如果有get上的磁带行或可选行也。我只想从firestore获取数据,而不是从firebase auth获取数据。并且我已经将firestore集合名称命名为"users“。如果可能不同也需要帮助怎么做呢?如果这在PaginatedDataTable中是不可能的,DataTable也可以。

下面是我的示例Firestore集合和文档结构:

代码语言:javascript
复制
firestore collection name: users

documentID1-
    email: 'email1'
    name : 'name1'
    role : 'role1'
    uid  : 'uid1'

documentID2-
    email: 'email2'
    name : 'name2'
    role : 'role2'
    uid  : 'uid2'   

(超过20份文件)

下面是我的示例代码,它通常可以用普通文本显示:

代码语言:javascript
复制
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) {
    return Scaffold(
      body: SingleChildScrollView(
        padding: const EdgeInsets.all(16),
        child: 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,
        ),


      ),
    );
  }
}

class UsersData extends DataTableSource {
  //final List<Map<String, dynamic>> _allUsers = [{}];
  @override
  DataRow getRow(int index) {
    return DataRow.byIndex(
      index: index,
      cells: [
        DataCell(Text('row #$index')),
        DataCell(Text('name #$index')),
        DataCell(Text('name #$index')),
        DataCell(Text('name #$index')),
      ],
    );
  }

  @override
  bool get isRowCountApproximate => false;

  @override
  int get rowCount => 9;

  @override
  int get selectedRowCount => 0;
}

按照@xBurnsed的答案编辑后,请找到下面的错误图像。

EN

回答 1

Stack Overflow用户

发布于 2021-11-18 14:55:28

我还没有机会测试这一点,但下面这样的内容应该会为您指明正确的方向:

代码语言:javascript
复制
@override
Widget build(BuildContext context) {
  
    List<User> users;
    return StreamBuilder(
        padding: const EdgeInsets.all(16),
        stream: Firestore.instance.collection("[YOUR_COLLECTION_NAME").snapshots(),
        builder: (context, AsyncSnapshot<QuerySnapshot> snap) {
            users = snap.data.docs.map((e) => User.fromMap(e.data)).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 new Text('No data...');
            }
    });
}


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

  UsersData(this.users);
  
  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 => 9;

  @override
  int get selectedRowCount => 0;
}

你将不得不创建你的用户类来工作,这样你就能够填充你的源代码,如果你不想,你可以在你的DataTableSource中使用List<DataRow>而不是List<User>,并手动映射每个单元格。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70004163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档