import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:frontend/Screens/group/group.dart'; import 'package:go_router/go_router.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:http/http.dart' as http; import 'package:responsive_builder/responsive_builder.dart'; import '../../config/apiUrl.dart'; import '../../routes/custom_appBar.dart'; import '../../routes/custom_drawer.dart'; import '../../services/apiService.dart'; import '../../utils/auth_utils.dart'; import 'groupDetails.dart'; class GroupListBackUp extends StatefulWidget { @override _GroupListBackUpState createState() => _GroupListBackUpState(); } class _GroupListBackUpState extends State { final ApiService apiService = ApiService(); List? apiAllGroups; Color? layoutColor; Color? bodyColor; @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) { loadAllGroups(); loadInitialData(); }); } void loadInitialData() async { String? layoutString = await getLayoutColor(); String? bodyStringColor = await getBodyColor(); setState(() { layoutColor = layoutString != null ? Color(int.parse(layoutString)) : Colors.redAccent; bodyColor = bodyStringColor != null ? Color(int.parse(bodyStringColor)) : Colors.white; }); } Future loadAllGroups() async { try { final result = await apiService.fetchAllGroup(context); setState(() { apiAllGroups = result; }); print("Fetched services: $apiAllGroups"); } catch (e) { print('Error fetching role list: $e'); } } void handleActiveStatus( Map groupData, String groupId, String currentStatus, ) async { print("Toggling user status - $groupId (Current: $currentStatus)"); final String apiUrlData = '$apiUrl/api/groups/update/$groupId'; // API for updating user final String? token = await getToken(); if (token == null) { print("Error: Token not found"); return; } // Toggle status: If active ("1"), set to inactive ("0"); otherwise, activate ("1") String newStatus = (currentStatus == "1") ? "0" : "1"; print("STatus 1 - $newStatus"); try { final response = await http.put( Uri.parse(apiUrlData), headers: { 'Authorization': 'Bearer $token', 'Content-Type': 'application/json', 'app-signature': 'ts-traveltool-2025-signature-123456', }, body: jsonEncode({ "is_active": newStatus, // Set new status dynamically }), ); if (response.statusCode == 200 || response.statusCode == 201) { print("User status updated successfully to $newStatus!"); loadAllGroups(); // Refresh users list after update } else { print("Failed to update user status. Status: ${response.statusCode}"); print("Error: ${response.body}"); } } catch (e) { print("Error updating user status: $e"); } } void deleteGroup(Map groupdata, groupId, status) { print("GroupId : $groupId"); print("Groupstatus: $status"); print("GroupsData: $groupdata"); // handleActiveStatus(groupdata, groupId, status); print("Calling handleActiveStatus with: id=$groupId, status=$status"); handleActiveStatus(groupdata, groupId.toString(), status.toString()); } Future refreshData() async { loadAllGroups(); } // Future deleteGroupFromApi(int groupId) async { // try { // await apiService.deleteGroup(groupId); // your delete API call // deleteGroup(groupId); // remove from UI list // } catch (e) { // print('Error deleting group: $e'); // } // }' @override Widget build(BuildContext context) { return ResponsiveBuilder( builder: (context, sizingInfo) { bool isDesktop = sizingInfo.deviceScreenType == DeviceScreenType.desktop; return Scaffold( // backgroundColor: Colors.white, backgroundColor: Color(0xFFf5f5f5), appBar: CustomAppBar(isDesktop: isDesktop), drawer: CustomDrawer(isDesktop: false), body: Padding( padding: isDesktop ? EdgeInsets.symmetric( horizontal: MediaQuery.of(context).size.width * 0.1, // 30% of screen width as horizontal padding vertical: MediaQuery.of(context).size.height * 0, // 5% of screen height as vertical padding ) : EdgeInsets.all(8), child: Row( children: [ // if (isDesktop) CustomDrawer(isDesktop: true), Expanded(child: buildGroupListLayout(isDesktop)), ], ), ), ); }, ); } Widget buildGroupListLayout(bool isDesktop) { return Container( margin: isDesktop ? const EdgeInsets.only(top: 10.0, bottom: 10.0) : null, padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: isDesktop ? Colors.white : Color(0xFFFCFCFC), ), // decoration: BoxDecoration( // // color: Colors.amber, // // color: bodyColor, // color: Color(0xFFE1F5FE), // border: Border.all( // color: Colors.white, // // color: Color(0xFFF7F7FB), // width: 3.5)), child: buildGroupData(isDesktop), ); } // Widget buildGroupListView(bool isDesktop) { // return Container( // child: Text("DAta"), // ); // } Widget buildGroupData(isDesktop) { return Container( // margin: isDesktop // ? EdgeInsets.all(10.0) // : EdgeInsets.only(left: 20.0, bottom: 20.0, top: 10.0, right: 20.0), // padding: const EdgeInsets.all(10), height: isDesktop ? MediaQuery.of(context).size.height * 0.98 : MediaQuery.of(context).size.height, // decoration: BoxDecoration( // border: isDesktop // ? Border.all( // width: 2, // color: Colors.white, // // color: Color(0xFFF7F7FB), // ) // : null, // color: Colors.white, // // color: Color(0xFFF7F7FB), // // // color: Colors.amber, // ), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( children: [ Text( 'Group List', style: GoogleFonts.poppins( fontSize: isDesktop ? 16 : 14, fontWeight: FontWeight.w600, color: Colors.black, ), ), IconButton( icon: const Icon(Icons.keyboard_arrow_down), onPressed: () {}, ), ], ), ElevatedButton( style: ElevatedButton.styleFrom( foregroundColor: Colors.white, backgroundColor: Color(0xFF114D8B), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), // side: BorderSide(color: , width: 1), ), padding: EdgeInsets.symmetric(horizontal: 20, vertical: 12), ), onPressed: () async { // List users = await futureUsers; // context.go('/CreateGroup'); showDialog( context: context, builder: (context) => GroupData( isDesktop: isDesktop, groupId: null, layoutColor: layoutColor!, fetchGetGroup: refreshData, ), ); }, child: Row( children: [ Text('New Group', style: GoogleFonts.poppins(fontSize: 12)), SizedBox(width: 5), Icon(Icons.add_circle_outline_rounded, color: Colors.white), ], ), ), ], ), SizedBox(height: 5), Row( children: [ Expanded( child: Container( height: MediaQuery.of(context).size.height * 0.75, padding: const EdgeInsets.all(10), // margin: const EdgeInsets.only(bottom: 10), color: Colors.white, // color: Colors.red.shade100, child: SingleChildScrollView( scrollDirection: Axis.vertical, child: Column(children: [buildGroupListView(isDesktop)]), ), ), ), ], ), ], ), ); } Widget buildGroupListView(bool isDesktop) { if (apiAllGroups == null || apiAllGroups!.isEmpty) { return Center(child: Text("No groups found.")); } return ListView.builder( shrinkWrap: true, physics: NeverScrollableScrollPhysics(), itemCount: apiAllGroups!.length, itemBuilder: (context, index) { final group = apiAllGroups![index]; return Card( // color: bodyColor, // color: Color(0xFFF5F5F5), color: Colors.white, margin: EdgeInsets.symmetric(vertical: 6, horizontal: 10), child: Padding( padding: const EdgeInsets.all(12.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Expanded( child: Text( "Group Name", style: GoogleFonts.poppins( fontSize: 11.5, fontWeight: FontWeight.w400, ), ), ), Expanded( child: Text( "Domestic Policy", style: GoogleFonts.poppins( fontSize: 11.5, fontWeight: FontWeight.w400, ), ), ), Expanded( child: Text( "International Policy", style: GoogleFonts.poppins( fontSize: 11.5, fontWeight: FontWeight.w400, ), ), ), Expanded( child: Text( "Description", style: GoogleFonts.poppins( fontSize: 11.5, fontWeight: FontWeight.w400, ), ), ), ], ), SizedBox(height: 4), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Text( "${group['name']}", style: GoogleFonts.poppins( fontSize: 13, fontWeight: FontWeight.w600, ), ), ), Expanded( child: Text( "${group['domestic_policy_name'] ?? 'N/A'}", style: GoogleFonts.poppins( fontSize: 13, fontWeight: FontWeight.w600, ), ), ), Expanded( child: Text( "${group['international_policy_name']}", style: GoogleFonts.poppins( fontSize: 13, fontWeight: FontWeight.w600, ), ), ), Expanded( child: Text( "${group['description'] ?? 'N/A'}", style: GoogleFonts.poppins( fontSize: 13, fontWeight: FontWeight.w600, ), ), ), ], ), Row( mainAxisAlignment: MainAxisAlignment.end, children: [ GestureDetector( onTap: () async { if (group['group_id'] != null) { final newGroupID = int.tryParse( group['group_id'].toString(), ); if (newGroupID != null) { final data = await apiService.getGroupDetailsFind( context, newGroupID, ); // ✅ Always an int showDialog( context: context, builder: (context) => GroupData( isDesktop: isDesktop, groupId: newGroupID, // Pass the ID groupData: data, layoutColor: layoutColor!, fetchGetGroup: refreshData, ), ); } } else { print("something went wrong check properly"); } }, // onTap: () { // context.go("/CreateGroup", extra: group); // }, child: Image.asset( 'assets/images/IconsImg/edit.png', width: 20, height: 15, ), ), SizedBox(width: 5), GestureDetector( onTap: () { final idStr = group['group_id']; final id = int.tryParse(idStr.toString()); if (id == null) { print("group_id is null"); return; } final status = group['is_active']; // print("GroupId : ${group['group_id']} "); deleteGroup(group, id, status); }, child: Image.asset( 'assets/images/IconsImg/delete.png', width: 20, height: 15, ), ), ], ), ], ), ), ); }, ); } }