From 5fa773032acabcc127afb99d9eaae9291f4a28ff Mon Sep 17 00:00:00 2001 From: SayedZeeshanHyder Date: Sat, 20 Jul 2024 23:28:49 +0530 Subject: [PATCH 1/2] Changed the Functions to be simple into the AttendanceServices File --- .../attendance_screen/attendance_screen.dart | 49 +++++++++++-------- .../widgets/attendanceservice.dart | 28 ++++++++--- 2 files changed, 51 insertions(+), 26 deletions(-) diff --git a/lib/new_ui/screens/attendance_screen/attendance_screen.dart b/lib/new_ui/screens/attendance_screen/attendance_screen.dart index 8cee401..6dbd1b1 100644 --- a/lib/new_ui/screens/attendance_screen/attendance_screen.dart +++ b/lib/new_ui/screens/attendance_screen/attendance_screen.dart @@ -21,12 +21,12 @@ class _AttendanceScreenState extends State { int totalLectures = 0; int attendedLectures = 0; - @override + /*@override void initState() { super.initState(); _fetchAndSetAttendance(); - } + }*/ Future _fetchAndSetAttendance() async { var attendanceData = await fetchAttendanceData(); @@ -112,11 +112,7 @@ class _AttendanceScreenState extends State { } var data = documentSnapshot.data() as Map; List attendanceList = data['attendance']; - List> attendanceList2 = attendanceList.cast>(); - - - - + //List> attendanceList2 = attendanceList.cast>(); return ListView.builder( shrinkWrap: true, @@ -201,8 +197,15 @@ class _AttendanceScreenState extends State { int totalLectures = int.parse(totalLecturesController.text); int attendedLectures = int.parse(attendedLecturesController.text); - // Fetch the document to get the current data - DocumentSnapshot doc = await FirebaseFirestore.instance + Map updatedSubject = { + "subject_name":subjectName, + "total":totalLectures, + "present":attendedLectures + }; + + await AttendanceService.updateSubject(attendanceList,index,updatedSubject); + + /*DocumentSnapshot doc = await FirebaseFirestore.instance .collection("Attendance") .doc(FirebaseAuth.instance.currentUser!.uid) .get(); @@ -227,17 +230,18 @@ class _AttendanceScreenState extends State { .doc(FirebaseAuth.instance.currentUser!.uid) .update({'attendance': attendanceList}); } - } + }*/ Navigator.of(context).pop(); - _fetchAndSetAttendance(); }, child: Text('Update', style: TextStyle(color: Colors.blue)), ), TextButton( onPressed: () async { - // Fetch the document to get the current data - DocumentSnapshot doc = await FirebaseFirestore.instance + + await AttendanceService.deleteSubject(attendanceList, index); + + /*DocumentSnapshot doc = await FirebaseFirestore.instance .collection("Attendance") .doc(FirebaseAuth.instance.currentUser!.uid) .get(); @@ -254,7 +258,7 @@ class _AttendanceScreenState extends State { .doc(FirebaseAuth.instance.currentUser!.uid) .update({'attendance': attendanceList}); } - _fetchAndSetAttendance(); + _fetchAndSetAttendance();*/ Navigator.of(context).pop(); }, child: Text('Delete', style: TextStyle(color: Colors.red)), @@ -319,7 +323,7 @@ class _AttendanceScreenState extends State { ElevatedButton( onPressed: () { AttendanceService.markPresent(attendanceList, index); - _fetchAndSetAttendance(); + /*_fetchAndSetAttendance();*/ }, child: const Text('Present', style: TextStyle(color: Colors.white),), style: ElevatedButton.styleFrom( @@ -331,7 +335,7 @@ class _AttendanceScreenState extends State { ElevatedButton( onPressed: () { AttendanceService.markAbsent(attendanceList, index); - _fetchAndSetAttendance(); + /*_fetchAndSetAttendance();*/ }, child: const Text('Absent', style: TextStyle(color: Colors.white),), style: ElevatedButton.styleFrom( @@ -449,13 +453,18 @@ class _AttendanceScreenState extends State { child: Text('Cancel', style: TextStyle(color: Colors.red)), ), TextButton( - onPressed: () { + onPressed: () async{ String subjectName = subjectNameController.text; int totalLectures = int.parse(totalLecturesController.text); int attendedLectures = int.parse(attendedLecturesController.text); - // Define your action here to handle the input data - FirebaseFirestore.instance + Map updatedSubject = { + "subject_name":subjectName, + "total":totalLectures, + "present":attendedLectures + }; + await AttendanceService.addSubject(updatedSubject); + /*FirebaseFirestore.instance .collection("Attendance") .doc(FirebaseAuth.instance.currentUser!.uid) .set({ @@ -465,7 +474,7 @@ class _AttendanceScreenState extends State { 'present': attendedLectures }]) }, SetOptions(merge: true)); - _fetchAndSetAttendance(); + _fetchAndSetAttendance();*/ Navigator.of(context).pop(); }, child: Text('Add', style: TextStyle(color: Colors.blue)), diff --git a/lib/new_ui/screens/attendance_screen/widgets/attendanceservice.dart b/lib/new_ui/screens/attendance_screen/widgets/attendanceservice.dart index e064bf6..9650939 100644 --- a/lib/new_ui/screens/attendance_screen/widgets/attendanceservice.dart +++ b/lib/new_ui/screens/attendance_screen/widgets/attendanceservice.dart @@ -6,17 +6,33 @@ class AttendanceService{ static FirebaseAuth auth = FirebaseAuth.instance; static CollectionReference firestore = FirebaseFirestore.instance.collection("Attendance"); - static markPresent(List attendanceList,int index){ + static markPresent(List attendanceList,int index)async{ attendanceList[index]['present']++; attendanceList[index]['total']++; - print(attendanceList[index]['present']); - firestore.doc(auth.currentUser!.uid).set({"attendance":attendanceList}); + await firestore.doc(auth.currentUser!.uid).set({"attendance":attendanceList}); } - static markAbsent(List attendanceList,int index){ + static markAbsent(List attendanceList,int index)async{ attendanceList[index]['total']++; - print(attendanceList[index]['total']); - firestore.doc(auth.currentUser!.uid).set({"attendance":attendanceList}); + await firestore.doc(auth.currentUser!.uid).set({"attendance":attendanceList}); + } + + static updateSubject(List attendanceList,int index,Map updatedSubject)async{ + attendanceList[index] = updatedSubject; + await firestore.doc(auth.currentUser!.uid).set({"attendance":attendanceList}); + } + + static deleteSubject(List attendanceList,int index)async{ + attendanceList.removeAt(index); + await firestore.doc(auth.currentUser!.uid).set({"attendance":attendanceList}); + } + + static addSubject(Map updatedSubject)async{ + final get = await firestore.doc(auth.currentUser!.uid).get(); + final data = get.data() as Map; + List attendanceList = data['attendance']; + attendanceList.add(updatedSubject); + await firestore.doc(auth.currentUser!.uid).set({"attendance":attendanceList}); } } \ No newline at end of file From fe3a3f3b162cdc8bf698a2ae57dc039e85aad236 Mon Sep 17 00:00:00 2001 From: SayedZeeshanHyder Date: Sat, 20 Jul 2024 23:36:25 +0530 Subject: [PATCH 2/2] Added Asyn Await --- .../attendance_screen/attendance_screen.dart | 11 +++++---- pubspec.lock | 24 +++++++++---------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/lib/new_ui/screens/attendance_screen/attendance_screen.dart b/lib/new_ui/screens/attendance_screen/attendance_screen.dart index 782cab7..4570dd9 100644 --- a/lib/new_ui/screens/attendance_screen/attendance_screen.dart +++ b/lib/new_ui/screens/attendance_screen/attendance_screen.dart @@ -336,8 +336,8 @@ class _AttendanceScreenState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ ElevatedButton( - onPressed: () { - AttendanceService.markPresent(attendanceList, index); + onPressed: () async{ + await AttendanceService.markPresent(attendanceList, index); /*_fetchAndSetAttendance();*/ }, child: const Text('Present', style: TextStyle(color: Colors.white, fontSize: 12),), @@ -348,8 +348,8 @@ class _AttendanceScreenState extends State { ), ElevatedButton( - onPressed: () { - AttendanceService.markAbsent(attendanceList, index); + onPressed: () async{ + await AttendanceService.markAbsent(attendanceList, index); /*_fetchAndSetAttendance();*/ }, child: const Text('Absent', style: TextStyle(color: Colors.white, fontSize: 12),), @@ -385,6 +385,9 @@ class _AttendanceScreenState extends State { }, ); }), + SizedBox( + height: 20, + ), ], ), ), diff --git a/pubspec.lock b/pubspec.lock index 3304b00..38701d0 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -788,26 +788,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" url: "https://pub.dev" source: hosted - version: "10.0.4" + version: "10.0.0" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "2.0.1" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "2.0.1" linkify: dependency: transitive description: @@ -860,10 +860,10 @@ packages: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.11.0" mime: dependency: transitive description: @@ -1249,10 +1249,10 @@ packages: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.6.1" textfield_search: dependency: "direct main" description: @@ -1377,10 +1377,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "13.0.0" watcher: dependency: transitive description: