|
@@ -1,96 +1,128 @@
|
|
|
|
|
+import 'dart:async';
|
|
|
|
|
+
|
|
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/material.dart';
|
|
|
-import 'package:physigo/database.dart';
|
|
|
|
|
-import '../models/user.dart';
|
|
|
|
|
|
|
|
|
|
class MyDataTable extends StatefulWidget {
|
|
class MyDataTable extends StatefulWidget {
|
|
|
- const MyDataTable({Key? key}) : super(key: key);
|
|
|
|
|
|
|
|
|
|
|
|
+ const MyDataTable( {
|
|
|
|
|
+ required this.name, Key? key}):super(key: key);
|
|
|
|
|
+ final String name;
|
|
|
@override
|
|
@override
|
|
|
State<MyDataTable> createState() => _MyDataTableState();
|
|
State<MyDataTable> createState() => _MyDataTableState();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
class _MyDataTableState extends State<MyDataTable> {
|
|
class _MyDataTableState extends State<MyDataTable> {
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
|
|
+ CollectionReference usersList =
|
|
|
|
|
+ FirebaseFirestore.instance.collection("Users");
|
|
|
@override
|
|
@override
|
|
|
Widget build(BuildContext context) {
|
|
Widget build(BuildContext context) {
|
|
|
|
|
+ Future<List> userList = getUsersList();
|
|
|
|
|
|
|
|
- return Scaffold(
|
|
|
|
|
- body: Center(
|
|
|
|
|
- child: StreamBuilder<dynamic>(
|
|
|
|
|
- stream: DatabaseManager().getUsersList(),
|
|
|
|
|
- builder: (context, snapshot) {
|
|
|
|
|
- if(snapshot.connectionState == ConnectionState.waiting){
|
|
|
|
|
- return const Text('Wait a moment');
|
|
|
|
|
- }
|
|
|
|
|
- else if(snapshot.hasData) {
|
|
|
|
|
- return buildDataTable(snapshot.data);
|
|
|
|
|
- }
|
|
|
|
|
- return const Text("Something went wrong");
|
|
|
|
|
- },
|
|
|
|
|
- ),
|
|
|
|
|
- ),
|
|
|
|
|
- );
|
|
|
|
|
|
|
+ return Container(
|
|
|
|
|
+ height: 450,
|
|
|
|
|
+ alignment: const Alignment(0,-1),
|
|
|
|
|
+ child: Scrollbar(
|
|
|
|
|
+ child:SingleChildScrollView(
|
|
|
|
|
+ child: FutureBuilder<dynamic>(
|
|
|
|
|
+ future: userList,
|
|
|
|
|
+ builder: (context, snapshot) {
|
|
|
|
|
+ if(snapshot.connectionState == ConnectionState.waiting){
|
|
|
|
|
+ return const Text('Wait a moment');
|
|
|
|
|
+ }
|
|
|
|
|
+ if(snapshot.connectionState == ConnectionState.done) {
|
|
|
|
|
+ return buildDataTable(snapshot.data, widget.name);
|
|
|
|
|
+ }
|
|
|
|
|
+ if(snapshot.hasError) {
|
|
|
|
|
+ return const Text('Something went wrong');
|
|
|
|
|
+ }
|
|
|
|
|
+ return const Text(" ");
|
|
|
|
|
+ },
|
|
|
|
|
+ ),
|
|
|
|
|
+ ),
|
|
|
|
|
+ ),
|
|
|
|
|
+ );
|
|
|
}
|
|
}
|
|
|
@override
|
|
@override
|
|
|
void initState() {
|
|
void initState() {
|
|
|
super.initState();
|
|
super.initState();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // fetchUsers() async{
|
|
|
|
|
- // dynamic users = await DatabaseManager().getUsersList();
|
|
|
|
|
- //
|
|
|
|
|
- // if(users == null){
|
|
|
|
|
- // print("Wrong");
|
|
|
|
|
- // }
|
|
|
|
|
- // else{
|
|
|
|
|
- // setState(() {
|
|
|
|
|
- // userList = users;
|
|
|
|
|
- // });
|
|
|
|
|
- // }
|
|
|
|
|
|
|
+
|
|
|
|
|
+ Future<List> getUsersList() async {
|
|
|
|
|
+ var querySnapshot = await usersList.orderBy(widget.name, descending: true).get();
|
|
|
|
|
+ return querySnapshot.docs;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- Widget buildDataTable(snapshotData) {
|
|
|
|
|
- final columns = ['ID', 'Name', 'points'];
|
|
|
|
|
|
|
+ Widget buildDataTable(snapshotData, String name) {
|
|
|
|
|
+ final columns = ['Place', 'ID', 'Name', 'points'];
|
|
|
|
|
|
|
|
return DataTable(
|
|
return DataTable(
|
|
|
|
|
+ columnSpacing: 10.0,
|
|
|
columns: getColumns(columns),
|
|
columns: getColumns(columns),
|
|
|
- rows: getRows(snapshotData),
|
|
|
|
|
|
|
+ rows: getRows(snapshotData, name),
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
|
- // Columns of ranking
|
|
|
|
|
List<DataColumn> getColumns(List<String> columns) {
|
|
List<DataColumn> getColumns(List<String> columns) {
|
|
|
return columns.map((String column) {
|
|
return columns.map((String column) {
|
|
|
return DataColumn(
|
|
return DataColumn(
|
|
|
|
|
+
|
|
|
label: Text(column),
|
|
label: Text(column),
|
|
|
);
|
|
);
|
|
|
}).toList();
|
|
}).toList();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- //Rows of ranking(id, name, total_points)
|
|
|
|
|
- List<DataRow> getRows(dynamic snapshotData) {
|
|
|
|
|
|
|
+ List<DataRow> getRows(dynamic snapshotData, String name) {
|
|
|
List<DataRow> rows = [];
|
|
List<DataRow> rows = [];
|
|
|
-
|
|
|
|
|
- snapshotData.forEach((user) {
|
|
|
|
|
|
|
+ int length = snapshotData.length;
|
|
|
|
|
+ for(int i = 0; i < length; i++){
|
|
|
|
|
+ dynamic user = snapshotData[i];
|
|
|
|
|
+ bool anonymous = user["anonymous"];
|
|
|
|
|
+ if (anonymous) {
|
|
|
|
|
+ rows.add(
|
|
|
|
|
+ DataRow(
|
|
|
|
|
+ cells: [
|
|
|
|
|
+ DataCell(
|
|
|
|
|
+ Text("${i+1}")
|
|
|
|
|
+ ),
|
|
|
|
|
+ const DataCell(
|
|
|
|
|
+ Text("anonym"),
|
|
|
|
|
+ ),
|
|
|
|
|
+ const DataCell(
|
|
|
|
|
+ Text("name"),
|
|
|
|
|
+ ),
|
|
|
|
|
+ DataCell(
|
|
|
|
|
+ Text("${user[name]}"),
|
|
|
|
|
+ ),
|
|
|
|
|
+ ]
|
|
|
|
|
+ )
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
rows.add(
|
|
rows.add(
|
|
|
DataRow(
|
|
DataRow(
|
|
|
cells: [
|
|
cells: [
|
|
|
|
|
+ DataCell(
|
|
|
|
|
+ Text("${i+1}")
|
|
|
|
|
+ ),
|
|
|
DataCell(
|
|
DataCell(
|
|
|
Text("${user["shared_id"]}"),
|
|
Text("${user["shared_id"]}"),
|
|
|
),
|
|
),
|
|
|
DataCell(
|
|
DataCell(
|
|
|
- Text(user["name"],)
|
|
|
|
|
|
|
+ Text(user["name"]),
|
|
|
),
|
|
),
|
|
|
DataCell(
|
|
DataCell(
|
|
|
- Text("${user["total_points"]}"),
|
|
|
|
|
|
|
+ Text("${user[name]}"),
|
|
|
),
|
|
),
|
|
|
]
|
|
]
|
|
|
)
|
|
)
|
|
|
);
|
|
);
|
|
|
- });
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
return rows;
|
|
return rows;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|