diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 4fee4b5e..0d6b0c95 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -6,12 +6,15 @@
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
+
- android:usesCleartextTraffic="true">
+ android:icon="@mipmap/ic_launcher"
+ android:usesCleartextTraffic="true"
+ android:enableOnBackInvokedCallback="true">
+
onDesignationChanged;
+
+ const CustomAppBar({
+ Key? key,
+ required this.curr_desig,
+ required this.headerTitle,
+
+ required this.onDesignationChanged,
+ }) : super(key: key);
+
+ @override
+ _CustomAppBarState createState() => _CustomAppBarState();
+
+ @override
+ Size get preferredSize => Size.fromHeight(kToolbarHeight);
+}
+
+class _CustomAppBarState extends State {
+ late List designations;
+ late String current;
+ var service = locator();
+
+ @override
+ void initState() {
+ super.initState();
+ designations = (service!.getFromDisk('designations') as List)
+ .map((dynamic item) => item.toString())
+ .toList();
+
+ current = service!.getFromDisk(
+ 'Current_designation'); // Ensure designations is not null before accessing index 0
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return AppBar(
+ iconTheme: IconThemeData(color: Colors.white),
+ backgroundColor: kPrimaryColor,
+ title: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Flexible(
+ child: Padding(
+ padding: EdgeInsets.only(right: 20.0), // Add some right padding to ensure space for the dropdown
+ child: Text(
+ widget.headerTitle, // Example of a long title
+ overflow: TextOverflow.ellipsis, // Prevents overflow by adding ellipsis
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 20,
+ fontWeight: FontWeight.bold,
+ ),
+ ),
+ ),
+ ),
+ DropdownButtonHideUnderline(
+ child: DropdownButton(
+ padding: const EdgeInsets.all(15),
+ borderRadius: BorderRadius.circular(5),
+ value: current,
+ icon: Icon(Icons.arrow_drop_down, color: Colors.white),
+ iconSize: 24,
+ style: TextStyle(color: Colors.white, fontSize: 18),
+ dropdownColor:
+ kPrimaryColor, // Set the dropdown background color to orange
+ onChanged: (String? newValue) {
+ widget.onDesignationChanged(newValue!);
+ setState(() {
+ current = newValue!;
+ service!.saveToDisk('Current_designation', current);
+ });
+ },
+ items: designations.map>((String value) {
+ return DropdownMenuItem(
+ value: value,
+ child: Text(
+ value,
+ style: TextStyle(
+ color: Colors.white), // Set the text color to white
+ ),
+ );
+ }).toList(),
+ onTap: () {
+ // Find the index of the selected value
+ int index = designations.indexOf(current);
+ // Scroll the dropdown to the selected value
+ Scrollable.ensureVisible(context,
+ alignment: 0.5, duration: Duration(milliseconds: 300));
+ },
+ ),
+ ),
+ ],
+ ),
+ actions: [],
+ );
+ }
+}
\ No newline at end of file
diff --git a/lib/Components/bottom_navigation_bar.dart b/lib/Components/bottom_navigation_bar.dart
new file mode 100644
index 00000000..f95ad3c3
--- /dev/null
+++ b/lib/Components/bottom_navigation_bar.dart
@@ -0,0 +1,148 @@
+import 'package:flutter/material.dart';
+
+class MyBottomNavigationBar extends StatefulWidget {
+ @override
+ _MyBottomNavigationBarState createState() => _MyBottomNavigationBarState();
+}
+
+class _MyBottomNavigationBarState extends State {
+ bool _notificationsBool = false;
+ bool _announcementsBool = false;
+ bool _newsBool = false;
+ bool _homeBool = false;
+
+ @override
+ Widget build(BuildContext context) {
+ return SizedBox(
+ height: 100.0,
+ child: Padding(
+ padding: EdgeInsets.only(bottom: 40),
+ child: Card(
+ color: Colors.deepOrangeAccent,
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(17.0),
+ ),
+ child: Padding(
+ padding: const EdgeInsets.only(
+ left: 13.0, right: 10.0, top: 5.0, bottom: 5.0),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceEvenly,
+ children: [
+ GestureDetector(
+ onTap: () {
+ _notificationsBool = false;
+ _announcementsBool = false;
+ _newsBool = false;
+ _homeBool = true;
+ setState(() {
+ _notificationsBool = false;
+ _announcementsBool = false;
+ _newsBool = false;
+ _homeBool = true;
+ });
+ Navigator.pushReplacementNamed(context, "/dashboard");
+
+ },
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Icon(
+ Icons.home_rounded,
+ color: Colors.white,
+ size: _homeBool ? 30.0 : 25.0,
+ ),
+ ],
+ ),
+ ),
+ GestureDetector(
+ onTap: () {
+ _newsBool = true;
+ _announcementsBool = false;
+ _notificationsBool = false;
+ _homeBool = false;
+
+ setState(() {
+ _newsBool = true;
+ _announcementsBool = false;
+ _notificationsBool = false;
+ _homeBool = false;
+ });
+ Navigator.pushReplacementNamed(context, "/news");
+ },
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Icon(
+ Icons.newspaper_rounded,
+ color: Colors.white,
+ size: _newsBool ? 30.0 : 25.0,
+ ),
+ ],
+ ),
+ ),
+ GestureDetector(
+ onTap: () {
+ _announcementsBool = false;
+ _newsBool = false;
+ _notificationsBool = true;
+ _homeBool = false;
+
+ setState(() {
+ _announcementsBool = false;
+ _newsBool = false;
+ _notificationsBool = true;
+ _homeBool = false;
+ });
+ Navigator.pushReplacementNamed(context, "/notification");
+ },
+ child: Padding(
+ padding: const EdgeInsets.only(right: 16.0),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Icon(
+ Icons.notifications_active_rounded,
+ color: Colors.white,
+ size: _notificationsBool ? 30.0 : 25.0,
+ ),
+ ],
+ ),
+ ),
+ ),
+ GestureDetector(
+ onTap: () {
+ _announcementsBool = true;
+ _newsBool = false;
+ _notificationsBool = false;
+ _homeBool = false;
+
+ setState(() {
+ _announcementsBool = true;
+ _newsBool = false;
+ _notificationsBool = false;
+ _homeBool = false;
+ });
+ Navigator.pushReplacementNamed(context, "/announcement");
+ },
+ child: Padding(
+ padding: const EdgeInsets.only(right: 16.0),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Icon(
+ Icons.campaign_rounded,
+ color: Colors.white,
+ size: _announcementsBool ? 30.0 : 25.0,
+ ),
+ ],
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/lib/Components/side_drawer.dart b/lib/Components/side_drawer.dart
index be08db0e..c6250f9a 100644
--- a/lib/Components/side_drawer.dart
+++ b/lib/Components/side_drawer.dart
@@ -121,6 +121,11 @@ class _SideDrawerState extends State {
pageMover: '/programme_curriculum_home',
isActive: true,
),
+ ModulesPadding(
+ line: 'Department Module',
+ pageMover: '/department_home_page',
+ isActive: true,
+ ),
ModulesPadding(
line: 'Gymkhana Module',
pageMover: '/gymkhana_homepage'),
diff --git a/lib/Components/side_drawer2.dart b/lib/Components/side_drawer2.dart
new file mode 100644
index 00000000..0577b4aa
--- /dev/null
+++ b/lib/Components/side_drawer2.dart
@@ -0,0 +1,291 @@
+import 'package:flutter/material.dart';
+import 'package:fusion/services/login_service.dart';
+import 'package:fusion/services/service_locator.dart';
+import 'package:fusion/services/storage_service.dart';
+
+class SideDrawer extends StatefulWidget {
+ final String curr_desig;
+
+ const SideDrawer({
+ Key? key,
+ required this.curr_desig,
+ }) : super(key: key);
+
+ @override
+ _SideDrawerState createState() => _SideDrawerState();
+}
+
+class _SideDrawerState extends State {
+ bool _loading = false;
+ int count = 0;
+ late String name;
+ late String depttype;
+ late String type;
+ @override
+ void initState() {
+ super.initState();
+ var service = locator();
+ print(service.profileData);
+ name = service.profileData.user!["first_name"] +
+ " " +
+ service.profileData.user!["last_name"];
+ depttype = service.profileData.profile!['department']!['name'];
+
+ type = service.profileData.profile!['user_type'];
+ print(depttype);
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return SafeArea(
+ child: Container(
+ margin: const EdgeInsets.only(right: 50.0),
+ height: MediaQuery.of(context).size.height,
+ color: Colors.white,
+ child: ListView(
+ shrinkWrap: true,
+ physics: ClampingScrollPhysics(),
+ children: [
+ Column(
+ children: [
+ Card(
+ elevation: 2.0,
+ margin:
+ EdgeInsets.symmetric(horizontal: 12.0, vertical: 30.0),
+ // shadowColor: Colors.black,
+ color: Colors.white,
+
+ child: Column(
+ children: [
+ Container(
+ margin: EdgeInsets.only(top: 0.0),
+ width: 270.0,
+ height: 120.0,
+ decoration: BoxDecoration(
+ image: DecorationImage(
+ image: AssetImage('assets/profile_pic.png'),
+ fit: BoxFit.contain,
+ ),
+ ),
+ ),
+ SizedBox(
+ height: 10.0,
+ ),
+ Text(
+ name, //Display name of User
+ style: TextStyle(
+ fontSize: 20.0,
+ color: Colors.black,
+ fontWeight: FontWeight.bold),
+ ),
+ SizedBox(
+ height: 10.0,
+ ),
+ Text(
+ depttype +
+ " " +
+ widget.curr_desig, // Display Type of User
+ style: TextStyle(
+ fontSize: 17.0,
+ color: Colors.black,
+ fontWeight: FontWeight.bold),
+ ),
+ SizedBox(
+ height: 10.0,
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ModulesCard(cardLine: 'DashBoard', pageMover: '/dashboard'),
+
+ if ((type != "staff" ||
+ widget.curr_desig == "acadmin" ||
+ widget.curr_desig == "corelabcaretaker"))
+ ModulesCard(
+ cardLine: 'Academics Module',
+ pageMover: '/academic_home_page',
+ ),
+
+ if ((type == "student" || widget.curr_desig == "acadmin"))
+ ModulesCard(
+ cardLine: 'Programme Curriculum',
+ pageMover: '/programme_curriculum_home',
+ ),
+
+ if ((type == "student" || type == "faculty"))
+ ModulesCard(
+ cardLine: 'Department Module',
+ pageMover: '/department_home_page',
+ ),
+
+ if ((type == "student") ||
+ widget.curr_desig == "Dean_s" ||
+ widget.curr_desig == "DeanPnD" ||
+ widget.curr_desig == "dean_rspc" ||
+ widget.curr_desig == "dean_s")
+ ModulesCard(
+ cardLine: 'Gymkhana Module',
+ pageMover: '/gymkhana_homepage',
+ ),
+
+ if ((type == "student" ||
+ widget.curr_desig == "mess_manager" ||
+ widget.curr_desig == "mess_warden"))
+ ModulesCard(
+ cardLine: 'Central Mess Module',
+ pageMover: '/central_mess_home'),
+
+ ModulesCard(
+ cardLine: 'Health Center Module',
+ pageMover: '/health_center',
+ ),
+ if ((type == "student")) ModulesCard(cardLine: 'Leave Module'),
+
+ if ((type == "student"))
+ ModulesCard(cardLine: 'Purchase and Store'),
+
+ if ((type == "student")) ModulesCard(cardLine: 'Human Resource'),
+
+ if (type == "student" ||
+ widget.curr_desig == "placement chairman" ||
+ widget.curr_desig == "placement officer")
+ ModulesCard(cardLine: 'Placement Module'),
+
+ ModulesCard(
+ cardLine: 'Visitors Hostel Module',
+ pageMover: '/visitor_hostel'),
+
+ if (type != "student")
+ ModulesCard(
+ cardLine: 'File Tracking Module', pageMover: '/compose_file'),
+
+ ModulesCard(
+ cardLine: 'Establishment Module', pageMover: '/establishment'),
+
+ ModulesCard(
+ cardLine: 'Library Module', pageMover: '/library_homepage'),
+
+ if (type == "student" ||
+ widget.curr_desig == "spacsconvenor" ||
+ widget.curr_desig == "spacsassistant")
+ ModulesCard(cardLine: 'Awards & Scholarship Module'),
+
+ ModulesCard(cardLine: 'Complaint Module', pageMover: '/complaint'),
+
+ ModulesCard(cardLine: 'Research Module'),
+
+ ModulesCard(cardLine: 'Counselling Cell'),
+
+ if ((type == "faculty" || widget.curr_desig == "acadadmin"))
+ ModulesCard(
+ cardLine: 'Examination Module',
+ pageMover: '/examination',
+ ),
+
+ if ((widget.curr_desig == "Executive Engineer (Civil)" ||
+ widget.curr_desig == "EE" ||
+ widget.curr_desig == "Admin IWD" ||
+ widget.curr_desig == "Electrical_AE" ||
+ widget.curr_desig == "mess_manager" ||
+ widget.curr_desig == "Electrical_JE" ||
+ widget.curr_desig == "Civil_AE" ||
+ widget.curr_desig == "Civil_JE" ||
+ widget.curr_desig == "Director" ||
+ widget.curr_desig == "dean_s" ||
+ widget.curr_desig == "Dean_s" ||
+ widget.curr_desig == "DeanPnD"))
+ ModulesCard(cardLine: 'IWD', pageMover: '/iwd/home_page'),
+
+ ModulesCard(
+ cardLine: 'Courses Module',
+ pageMover: '/registered_courses',
+ ),
+ ModulesCard(
+ cardLine: 'HR Module',
+ pageMover: '/hr_homepage',
+ ),
+
+ // ModulesCard(
+ // cardLine: 'Profile',
+ // icon: Icons.account_circle,
+ // pageMover: '/profile'),
+
+ // ModulesCard(cardLine: 'Office Of Dean Students'),
+ // ModulesCard(cardLine: 'Office Of Dean Academics'),
+ // ModulesCard(cardLine: 'Director Office'),
+ // ModulesCard(cardLine: 'Office Of Purchase Officer'),
+ // ModulesCard(cardLine: 'Office Of Registrar'),
+ // ModulesCard(cardLine: 'Office Of P&D'),
+ // ModulesCard(cardLine: 'Office Of HOD (Branch)'),
+ // ModulesCard(cardLine: 'Finance & Accounts'),
+ // ModulesCard(cardLine: 'Meet Our Team'),
+ ModulesCard(cardLine: 'Log Out', icon: Icons.logout),
+ ],
+ ),
+ ),
+ );
+ }
+
+ String _getGymkhanaPage() {
+ // Determine the pageMover based on designation
+ print(widget.curr_desig);
+ if (widget.curr_desig == 'co-ordinator') {
+ return '/gymkhana_coordinator';
+ } else if (widget.curr_desig == 'Counsellor') {
+ return '/gymkhana_counsellor';
+ } else if (widget.curr_desig == 'Convenor') {
+ return '/gymkhana_convenor';
+ } else if (widget.curr_desig == 'Dean Academic') {
+ return '/gymkhana_dean';
+ } else
+ return '/gymkhana_homepage';
+ }
+// ignore: must_be_immutable
+}
+
+class ModulesCard extends StatelessWidget {
+ final String? cardLine;
+ final String? pageMover;
+ IconData? icon;
+ ModulesCard({this.cardLine, this.icon, this.pageMover});
+ @override
+ Widget build(BuildContext context) {
+ return GestureDetector(
+ //behaviour to translucent to get Tap even on blank or empty space within container
+ behavior: HitTestBehavior.translucent,
+ child: Card(
+ color: Colors.white,
+ margin: const EdgeInsets.all(10.0),
+ child: Padding(
+ padding: const EdgeInsets.all(16.0),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Text(
+ cardLine!,
+ style: TextStyle(fontSize: 16.0, color: Colors.black),
+ ),
+ Icon(
+ icon,
+ color: Colors.deepOrangeAccent,
+ ),
+ ],
+ ),
+ ),
+ ),
+ onTap: () async {
+ var _prefs = await StorageService.getInstance();
+ String token = _prefs!.userInDB?.token ?? "";
+ if (cardLine == 'Log Out') {
+ LoginService auth = LoginService();
+ auth.logout();
+ Navigator.pushReplacementNamed(context, "/landing");
+ }
+ if (pageMover != null)
+ Navigator.pushReplacementNamed(context, pageMover!, arguments: token);
+ },
+ );
+ }
+}
diff --git a/lib/DesignationProvider.dart b/lib/DesignationProvider.dart
new file mode 100644
index 00000000..34031248
--- /dev/null
+++ b/lib/DesignationProvider.dart
@@ -0,0 +1,12 @@
+import 'package:flutter/material.dart';
+
+class DesignationProvider extends ChangeNotifier {
+ late String _designation;
+
+ String get designation => _designation;
+
+ void updateDesignation(String newDesignation) {
+ _designation = newDesignation;
+ notifyListeners(); // Notify listeners about the change
+ }
+}
\ No newline at end of file
diff --git a/lib/api.dart b/lib/api.dart
index 73d1c6bc..24d6c50b 100644
--- a/lib/api.dart
+++ b/lib/api.dart
@@ -1,10 +1,12 @@
//Server and local links
String klocalLink = "127.0.0.1:8000";
-String kserverLink = "172.27.16.214:8000";
+// String kserverLink = "172.27.16.214:8000";
+String kserverLink = "192.168.137.1:8000";
//Login Service
-String kAuthUrl = "172.27.16.214:8000";
String kAuthLogin = "/api/auth/login/";
+// String kAuthUrl = "172.27.16.214:8000";
+String kAuthUrl = "192.168.137.1:8000";
// String kAuthLogin = "/accounts/login";
//Profile Service
@@ -13,6 +15,11 @@ String kProfile = "/api/profile/";
//Academic Procedures
String kAcademicProcedures = "/academic-procedures/api/stu/";
+//Department details
+String kDepMain = "/dep/api/dep-main/";
+String kAllStudents = "/dep/api/all-students/";
+String kDepartmentAnnouncements = "/dep/api/announcements/";
+
//Complaint
String kComplaintService = "/complaint/api/studentcomplain";
String kComplaintNew = "/complaint/api/newcomplain";
@@ -21,6 +28,7 @@ String kComplaintRemove = "/complaint/api/removecomplain/";
//Dashboard
String kDashboard = "/api/dashboard/";
+String kNotification = "/api/notification/";
String kNotificationRead = "/api/notification/read/";
//Gymkhana
diff --git a/lib/main.dart b/lib/main.dart
index 9ca81ff8..21353309 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -9,7 +9,10 @@ import 'package:fusion/screens/Library/Book_Search.dart';
import 'package:fusion/screens/Library/dues.dart';
import 'package:fusion/screens/Library/issued_items.dart';
import 'package:fusion/screens/Library/lib_home_screen.dart';
+import 'package:fusion/screens/LoginandDashboard/DashboardComponents/news.dart';
import 'package:fusion/screens/LoginandDashboard/dashboard.dart';
+import 'package:fusion/screens/LoginandDashboard/DashboardComponents/notify.dart';
+import 'package:fusion/screens/LoginandDashboard/DashboardComponents/announcement.dart';
import 'package:fusion/screens/LoginandDashboard/login_page.dart';
import 'package:fusion/screens/Academic/academic_home_page.dart';
import 'package:fusion/screens/Academic/Current_Semester/current_semester_home_page.dart';
@@ -35,6 +38,12 @@ import 'package:fusion/screens/Programme_Curriculum/Discipline/discipline.dart';
import 'package:fusion/screens/Programme_Curriculum/Programme/programme_home_page.dart';
import 'package:fusion/screens/Programme_Curriculum/Programme_Info/programme_info.dart';
import 'package:fusion/screens/Programme_Curriculum/programme_curriculum_home.dart';
+import 'package:fusion/screens/Department/department_homepage.dart';
+import 'package:fusion/screens/Department/Student_details/student_details.dart';
+import 'package:fusion/screens/Department/Alumni_details/alumni_details.dart';
+import 'package:fusion/screens/Department/Announcements/make_announcement.dart';
+import 'package:fusion/screens/Department/Announcements/browse_announcement.dart';
+
import 'package:fusion/screens/landing_page.dart';
import 'package:fusion/screens/Healthcenter/healthcentermodule.dart';
import 'package:fusion/screens/Healthcenter/feedback.dart';
@@ -60,10 +69,12 @@ class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
MediaQueryData windowData =
- MediaQueryData.fromWindow(WidgetsBinding.instance.window);
+ MediaQueryData.fromView(WidgetsBinding.instance.window);
windowData = windowData.copyWith(
- textScaleFactor: 1,
+ textScaler: TextScaler.linear(1),
);
+ var selectedProgramme;
+ Map selectedDepartmentData;
return MediaQuery(
data: windowData,
child: MaterialApp(
@@ -71,16 +82,19 @@ class MyApp extends StatelessWidget {
title: 'Fusion',
debugShowCheckedModeBanner: false,
theme: ThemeData(
- // primarySwatch: Colors.blueGrey,
+ // primarySwatch: Colors.blueGrey,
// colorSchemeSeed: Color(0xFF2085D0),
colorSchemeSeed: Color(0xFFF36C35),
- fontFamily: 'Nunito',
+ fontFamily: 'Nunito',
useMaterial3: true,
),
initialRoute: '/landing',
routes: {
'/landing': (context) => LandingPage(),
'/login_page': (context) => LoginPage(),
+ '/notification':(context)=>Notify(),
+ '/news':(context)=>News(),
+ '/announcement':(context)=>Announcement(),
'/dashboard': (context) => Dashboard(),
'/academic_home_page': (context) => AcademicHomePage(
ModalRoute.of(context)!.settings.arguments.toString()),
@@ -104,6 +118,12 @@ class MyApp extends StatelessWidget {
ProgrammeInfo(),
'/programme_curriculum_home/courses': (context) => Courses(),
'/programme_curriculum_home/courses_info': (context) => CoursesInfo(),
+ '/department_home_page': (context) => DepartmentScreen(
+ ModalRoute.of(context)!.settings.arguments.toString()),
+ '/student_details': (context) => StudentDetails(),
+ '/alumni_details': (context) => AlumniDetails(),
+ '/browse_announcement': (context) => BrowseAnnouncement(),
+ '/make_announcement': (context) => MakeAnnouncement(),
'/establishment': (context) => Establishment(),
'/gymkhana_homepage': (context) => GymkhanaHomepage(),
'/gymkhana_homepage/apply': (context) => Apply(),
@@ -131,4 +151,4 @@ class MyApp extends StatelessWidget {
),
);
}
-}
+}
\ No newline at end of file
diff --git a/lib/models/department.dart b/lib/models/department.dart
new file mode 100644
index 00000000..66cdf4f2
--- /dev/null
+++ b/lib/models/department.dart
@@ -0,0 +1,199 @@
+class DepartmentData {
+ List students;
+ List alumni;
+ List faculty;
+ List announcements;
+
+ DepartmentData({
+ required this.students,
+ required this.alumni,
+ required this.faculty,
+ required this.announcements,
+ });
+
+ factory DepartmentData.fromJson(Map json) {
+ return DepartmentData(
+ students: List.from(
+ json['students'].map((student) => StudentData.fromJson(student))),
+ alumni: List.from(
+ json['alumni'].map((alumni) => AlumniData.fromJson(alumni))),
+ faculty: List.from(
+ json['faculty'].map((faculty) => FacultyData.fromJson(faculty))),
+ announcements: List.from(json['announcements']
+ .map((announcement) => Announcement.fromJson(announcement))),
+ );
+ }
+
+ Map toJson() {
+ return {
+ 'students': students.map((student) => student.toJson()).toList(),
+ 'alumni': alumni.map((alumni) => alumni.toJson()).toList(),
+ 'faculty': faculty.map((faculty) => faculty.toJson()).toList(),
+ 'announcements':
+ announcements.map((announcement) => announcement.toJson()).toList(),
+ };
+ }
+}
+
+class StudentData {
+ var id;
+ var name;
+ var batchId;
+ var programme;
+ var batch;
+ var department;
+
+ StudentData({
+ this.id,
+ this.name,
+ this.batchId,
+ this.programme,
+ this.batch,
+ this.department,
+ });
+
+ factory StudentData.fromJson(Map json) {
+ return StudentData(
+ id: json['id'],
+ name: json['name'],
+ batchId: json['batchId'],
+ programme: json['programme'],
+ batch: json['batch'],
+ department: json['department'],
+ );
+ }
+
+ Map toJson() {
+ return {
+ 'id': id,
+ 'name': name,
+ 'batchId': batchId,
+ 'programme': programme,
+ 'batch': batch,
+ 'department': department,
+ };
+ }
+}
+
+class AlumniData {
+ var id;
+ var name;
+ var batchId;
+ var programme;
+ var batch;
+ var department;
+
+ AlumniData({
+ this.id,
+ this.name,
+ this.batchId,
+ this.programme,
+ this.batch,
+ this.department,
+ });
+
+ factory AlumniData.fromJson(Map json) {
+ return AlumniData(
+ id: json['id'],
+ name: json['name'],
+ batchId: json['batchId'],
+ programme: json['programme'],
+ batch: json['batch'],
+ department: json['department'],
+ );
+ }
+
+ Map toJson() {
+ return {
+ 'id': id,
+ 'name': name,
+ 'batchId': batchId,
+ 'programme': programme,
+ 'batch': batch,
+ 'department': department,
+ };
+ }
+}
+
+class FacultyData {
+ var id;
+ var facultyName;
+ var sex;
+ var dateOfBirth;
+ var address;
+ var phoneNumber;
+
+ FacultyData({
+ this.id,
+ this.facultyName,
+ this.sex,
+ this.dateOfBirth,
+ this.address,
+ this.phoneNumber,
+ });
+
+ factory FacultyData.fromJson(Map json) {
+ return FacultyData(
+ id: json['id'],
+ facultyName: json['facultyName'],
+ sex: json['sex'],
+ dateOfBirth: json['dateOfBirth'],
+ address: json['address'],
+ phoneNumber: json['phoneNumber'],
+ );
+ }
+
+ Map toJson() {
+ return {
+ 'id': id,
+ 'facultyName': facultyName,
+ 'sex': sex,
+ 'dateOfBirth': dateOfBirth,
+ 'address': address,
+ 'phoneNumber': phoneNumber,
+ };
+ }
+}
+
+class Announcement {
+ final String maker_id;
+ final DateTime ann_date;
+ final String message;
+ final String batch;
+ final String department;
+ final String programme;
+ final String? upload_announcement;
+
+ Announcement({
+ required this.maker_id,
+ required this.ann_date,
+ required this.message,
+ required this.batch,
+ required this.department,
+ required this.programme,
+ this.upload_announcement,
+ });
+ factory Announcement.fromJson(Map json) {
+ return Announcement(
+ maker_id: json['maker_id'],
+ ann_date: json['ann_date'],
+ message: json['message'],
+ batch: json['batch'],
+ department: json['department'],
+ programme: json['programme'],
+ upload_announcement: json['upload_announcement'],
+ );
+ }
+
+ Map toJson() {
+ return {
+ 'maker_id': maker_id,
+ 'ann_date': ann_date,
+ 'message': message,
+ 'batch': batch,
+ 'department': department,
+ 'programme': programme,
+ 'upload_announcement': upload_announcement,
+ };
+ }
+}
diff --git a/lib/screens/Department/Alumni_details/alumni_details.dart b/lib/screens/Department/Alumni_details/alumni_details.dart
new file mode 100644
index 00000000..71dbe88c
--- /dev/null
+++ b/lib/screens/Department/Alumni_details/alumni_details.dart
@@ -0,0 +1,193 @@
+import 'package:flutter/material.dart';
+import 'package:fusion/Components/appBar2.dart';
+import 'package:fusion/Components/side_drawer2.dart';
+import 'package:fusion/constants.dart';
+import 'package:fusion/services/service_locator.dart';
+import 'package:fusion/services/storage_service.dart';
+
+class AlumniDetails extends StatefulWidget {
+ @override
+ _AlumniDetailsState createState() => _AlumniDetailsState();
+}
+
+class _AlumniDetailsState extends State
+ with SingleTickerProviderStateMixin {
+ var service = locator();
+ late String curr_desig = service.getFromDisk("Current_designation");
+
+ late TabController _tabController;
+ List departmentOptions = [
+ 'CSE Department',
+ 'ECE Department',
+ 'ME Department',
+ 'SM Department'
+ ];
+ String selectedDepartment = 'CSE Department';
+ Color outlineColor = Colors.grey;
+
+ List