datatable.dart 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import 'package:cloud_firestore/cloud_firestore.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:physigo/database.dart';
  4. import '../models/user.dart';
  5. class MyDataTable extends StatefulWidget {
  6. const MyDataTable({Key? key}) : super(key: key);
  7. @override
  8. State<MyDataTable> createState() => _MyDataTableState();
  9. }
  10. class _MyDataTableState extends State<MyDataTable> {
  11. @override
  12. Widget build(BuildContext context) {
  13. return Scaffold(
  14. body: Center(
  15. child: StreamBuilder<dynamic>(
  16. stream: DatabaseManager().getUsersList(),
  17. builder: (context, snapshot) {
  18. if(snapshot.connectionState == ConnectionState.waiting){
  19. return const Text('Wait a moment');
  20. }
  21. else if(snapshot.hasData) {
  22. return buildDataTable(snapshot.data);
  23. }
  24. return const Text("Something went wrong");
  25. },
  26. ),
  27. ),
  28. );
  29. }
  30. @override
  31. void initState() {
  32. super.initState();
  33. }
  34. // fetchUsers() async{
  35. // dynamic users = await DatabaseManager().getUsersList();
  36. //
  37. // if(users == null){
  38. // print("Wrong");
  39. // }
  40. // else{
  41. // setState(() {
  42. // userList = users;
  43. // });
  44. // }
  45. }
  46. Widget buildDataTable(snapshotData) {
  47. final columns = ['ID', 'Name', 'points'];
  48. return DataTable(
  49. columns: getColumns(columns),
  50. rows: getRows(snapshotData),
  51. );
  52. }
  53. // Columns of ranking
  54. List<DataColumn> getColumns(List<String> columns) {
  55. return columns.map((String column) {
  56. return DataColumn(
  57. label: Text(column),
  58. );
  59. }).toList();
  60. }
  61. //Rows of ranking(id, name, total_points)
  62. List<DataRow> getRows(dynamic snapshotData) {
  63. List<DataRow> rows = [];
  64. snapshotData.forEach((user) {
  65. rows.add(
  66. DataRow(
  67. cells: [
  68. DataCell(
  69. Text("${user["shared_id"]}"),
  70. ),
  71. DataCell(
  72. Text(user["name"],)
  73. ),
  74. DataCell(
  75. Text("${user["total_points"]}"),
  76. ),
  77. ]
  78. )
  79. );
  80. });
  81. return rows;
  82. }