Manage User added
This commit is contained in:
parent
1025ef60a1
commit
474606b488
BIN
assets/icons/drawer/manageuser.png
Normal file
BIN
assets/icons/drawer/manageuser.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 364 B |
@ -34,6 +34,7 @@ import 'package:uae_stat/presentation/routes/bottom_bar_routes/tab_routes/uae_nu
|
|||||||
import 'package:uae_stat/presentation/routes/bottom_bar_routes/tab_routes/uae_numbers_routes/sub_routes/social/_labor_force_body.dart';
|
import 'package:uae_stat/presentation/routes/bottom_bar_routes/tab_routes/uae_numbers_routes/sub_routes/social/_labor_force_body.dart';
|
||||||
import 'package:uae_stat/presentation/routes/bottom_bar_routes/tab_routes/uae_numbers_routes/sub_routes/social/_population_body.dart';
|
import 'package:uae_stat/presentation/routes/bottom_bar_routes/tab_routes/uae_numbers_routes/sub_routes/social/_population_body.dart';
|
||||||
import 'package:uae_stat/presentation/routes/drawer_routes/feedback_route.dart';
|
import 'package:uae_stat/presentation/routes/drawer_routes/feedback_route.dart';
|
||||||
|
import 'package:uae_stat/presentation/routes/drawer_routes/manage_user_router.dart';
|
||||||
import 'package:uae_stat/presentation/routes/drawer_routes/my_favorites_route.dart';
|
import 'package:uae_stat/presentation/routes/drawer_routes/my_favorites_route.dart';
|
||||||
import 'package:uae_stat/presentation/routes/drawer_routes/privacy_policy_route.dart';
|
import 'package:uae_stat/presentation/routes/drawer_routes/privacy_policy_route.dart';
|
||||||
import 'package:uae_stat/presentation/routes/drawer_routes/profile/reset_pw_route.dart';
|
import 'package:uae_stat/presentation/routes/drawer_routes/profile/reset_pw_route.dart';
|
||||||
@ -198,6 +199,7 @@ class _MyRouter {
|
|||||||
//DrawerItems.feedback => const FeedbackRoute(),
|
//DrawerItems.feedback => const FeedbackRoute(),
|
||||||
DrawerItems.feedback => FeedbackForm(),
|
DrawerItems.feedback => FeedbackForm(),
|
||||||
DrawerItems.privacyPolicy => const PrivacyPolicyRoute(),
|
DrawerItems.privacyPolicy => const PrivacyPolicyRoute(),
|
||||||
|
DrawerItems.manageuser => ManageUserRouter()
|
||||||
// DrawerItems.userGuide => const NotificationsRoute(),
|
// DrawerItems.userGuide => const NotificationsRoute(),
|
||||||
// DrawerItems.notifications => const UserGuideRoute(),
|
// DrawerItems.notifications => const UserGuideRoute(),
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
abstract class DrawerAssetIconPath {
|
abstract class DrawerAssetIconPath {
|
||||||
static const _basePath = 'assets/icons/drawer';
|
static const _basePath = 'assets/icons/drawer';
|
||||||
static const bell = '$_basePath/bell.png';
|
static const bell = '$_basePath/bell.png';
|
||||||
@ -5,4 +7,5 @@ abstract class DrawerAssetIconPath {
|
|||||||
static const favorites = '$_basePath/bookmarks.png';
|
static const favorites = '$_basePath/bookmarks.png';
|
||||||
static const message = '$_basePath/message.png';
|
static const message = '$_basePath/message.png';
|
||||||
static const scroll = '$_basePath/scroll.png';
|
static const scroll = '$_basePath/scroll.png';
|
||||||
|
static const manageuser = '$_basePath/manageuser.png';
|
||||||
}
|
}
|
||||||
|
|||||||
131
lib/main.dart
131
lib/main.dart
@ -22,75 +22,76 @@ void main() async {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
class MainApp extends StatelessWidget {
|
// class MainApp extends StatelessWidget {
|
||||||
const MainApp({super.key});
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return MaterialApp(
|
|
||||||
home: RegisterScreen(),
|
|
||||||
//home: ProfileScreen(),
|
|
||||||
debugShowCheckedModeBanner: false,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// class MainApp extends ConsumerWidget {
|
|
||||||
// const MainApp({super.key});
|
// const MainApp({super.key});
|
||||||
//
|
//
|
||||||
// @override
|
// @override
|
||||||
// Widget build(
|
// Widget build(BuildContext context) {
|
||||||
// BuildContext context,
|
// return MaterialApp(
|
||||||
// WidgetRef ref,
|
//
|
||||||
// ) {
|
// home: RegisterScreen(),
|
||||||
// const loading = Material(
|
// //home: ProfileScreen(),
|
||||||
// child: Center(
|
|
||||||
// child: CircularProgressIndicator(),
|
|
||||||
// ),
|
|
||||||
// );
|
|
||||||
// // waits to load preferences (language)
|
|
||||||
// // from local storage
|
|
||||||
// final languageFinalizedWidget = ref
|
|
||||||
// .watch(
|
|
||||||
// routerProvider,
|
|
||||||
// )
|
|
||||||
// .when(
|
|
||||||
// loading: () => loading,
|
|
||||||
// error: Error.throwWithStackTrace,
|
|
||||||
// data: (data) {
|
|
||||||
// final materialApp = MaterialApp.router(
|
|
||||||
// debugShowCheckedModeBanner: false,
|
// debugShowCheckedModeBanner: false,
|
||||||
// routerConfig: data,
|
|
||||||
// supportedLocales: LanguageLocale.values.map(
|
|
||||||
// (e) => e.toLocale(),
|
|
||||||
// ),
|
|
||||||
// localizationsDelegates: GlobalMaterialLocalizations.delegates,
|
|
||||||
// theme: ThemeData.from(
|
|
||||||
// colorScheme: ColorScheme.fromSeed(
|
|
||||||
// seedColor: MyTheme.topicColor(
|
|
||||||
// IndicatorTopic.economy,
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// textTheme: OldTheme.textTheme,
|
|
||||||
// ),
|
|
||||||
// );
|
// );
|
||||||
// return ColoredBox(
|
|
||||||
// color: Colors.white,
|
|
||||||
// child: materialApp,
|
|
||||||
// );
|
|
||||||
// },
|
|
||||||
// );
|
|
||||||
// // waits to load auth from local storage
|
|
||||||
// final authFinalizedWidget = ref
|
|
||||||
// .watch(
|
|
||||||
// authUseCaseProvider,
|
|
||||||
// )
|
|
||||||
// .when(
|
|
||||||
// loading: () => loading,
|
|
||||||
// error: Error.throwWithStackTrace,
|
|
||||||
// data: (data) => languageFinalizedWidget,
|
|
||||||
// );
|
|
||||||
// return authFinalizedWidget;
|
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
class MainApp extends ConsumerWidget {
|
||||||
|
const MainApp({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(
|
||||||
|
BuildContext context,
|
||||||
|
WidgetRef ref,
|
||||||
|
) {
|
||||||
|
const loading = Material(
|
||||||
|
child: Center(
|
||||||
|
child: CircularProgressIndicator(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
// waits to load preferences (language)
|
||||||
|
// from local storage
|
||||||
|
final languageFinalizedWidget = ref
|
||||||
|
.watch(
|
||||||
|
routerProvider,
|
||||||
|
)
|
||||||
|
.when(
|
||||||
|
loading: () => loading,
|
||||||
|
error: Error.throwWithStackTrace,
|
||||||
|
data: (data) {
|
||||||
|
final materialApp = MaterialApp.router(
|
||||||
|
debugShowCheckedModeBanner: false,
|
||||||
|
routerConfig: data,
|
||||||
|
supportedLocales: LanguageLocale.values.map(
|
||||||
|
(e) => e.toLocale(),
|
||||||
|
),
|
||||||
|
localizationsDelegates: GlobalMaterialLocalizations.delegates,
|
||||||
|
theme: ThemeData.from(
|
||||||
|
colorScheme: ColorScheme.fromSeed(
|
||||||
|
seedColor: MyTheme.topicColor(
|
||||||
|
IndicatorTopic.economy,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
textTheme: OldTheme.textTheme,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
return ColoredBox(
|
||||||
|
color: Colors.white,
|
||||||
|
child: materialApp,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
// waits to load auth from local storage
|
||||||
|
final authFinalizedWidget = ref
|
||||||
|
.watch(
|
||||||
|
authUseCaseProvider,
|
||||||
|
)
|
||||||
|
.when(
|
||||||
|
loading: () => loading,
|
||||||
|
error: Error.throwWithStackTrace,
|
||||||
|
data: (data) => languageFinalizedWidget,
|
||||||
|
);
|
||||||
|
return authFinalizedWidget;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -237,6 +237,12 @@ enum DrawerItems {
|
|||||||
titleAR: 'المفضلات',
|
titleAR: 'المفضلات',
|
||||||
imgPath: DrawerAssetIconPath.favorites,
|
imgPath: DrawerAssetIconPath.favorites,
|
||||||
),
|
),
|
||||||
|
manageuser(
|
||||||
|
routePath: 'manageuser',
|
||||||
|
titleEN: 'Manage User',
|
||||||
|
titleAR: 'شاركنا رأيك',
|
||||||
|
imgPath: DrawerAssetIconPath.manageuser,
|
||||||
|
),
|
||||||
feedback(
|
feedback(
|
||||||
routePath: 'feedback',
|
routePath: 'feedback',
|
||||||
titleEN: 'Feedback',
|
titleEN: 'Feedback',
|
||||||
|
|||||||
486
lib/presentation/routes/drawer_routes/manage_user_router.dart
Normal file
486
lib/presentation/routes/drawer_routes/manage_user_router.dart
Normal file
@ -0,0 +1,486 @@
|
|||||||
|
// import 'package:flutter/material.dart';
|
||||||
|
// import 'package:uae_stat/presentation/components/my_bottom_nav_bar.dart';
|
||||||
|
// import 'package:uae_stat/presentation/components/my_drawer.dart';
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// class ManageUserRouter extends StatefulWidget {
|
||||||
|
// @override
|
||||||
|
// State<ManageUserRouter> createState() => _ManageUserRouterState();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// class _ManageUserRouterState extends State<ManageUserRouter> {
|
||||||
|
// // Sample data for the table
|
||||||
|
// final List<User> userData = List.generate(
|
||||||
|
// 5,
|
||||||
|
// (index) => User(
|
||||||
|
// userName: 'Conan Keller ${index + 1}',
|
||||||
|
// emailId: 'ConanKeller${index + 1}@gmail.com',
|
||||||
|
// registrationDate: '18/07/2024',
|
||||||
|
// status: 'Pending',
|
||||||
|
// ),
|
||||||
|
// );
|
||||||
|
//
|
||||||
|
// // Sorting state
|
||||||
|
// int _sortColumnIndex = 0;
|
||||||
|
// bool _isAscending = true;
|
||||||
|
//
|
||||||
|
// // Method to sort the data based on a column
|
||||||
|
// void _sort<T>(Comparable<T> Function(User user) getField, int columnIndex, bool ascending) {
|
||||||
|
// setState(() {
|
||||||
|
// _sortColumnIndex = columnIndex;
|
||||||
|
// _isAscending = ascending;
|
||||||
|
// userData.sort((a, b) {
|
||||||
|
// final aValue = getField(a);
|
||||||
|
// final bValue = getField(b);
|
||||||
|
// return ascending ? Comparable.compare(aValue, bValue) : Comparable.compare(bValue, aValue);
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // Define dropdown items
|
||||||
|
// final List<String> statusOptions = ['Approved', 'Denied', 'Pending'];
|
||||||
|
//
|
||||||
|
// // Method to get status color
|
||||||
|
// Color getStatusColor(String status) {
|
||||||
|
// switch (status) {
|
||||||
|
// case 'Approved':
|
||||||
|
// return Colors.green;
|
||||||
|
// case 'Denied':
|
||||||
|
// return Colors.red;
|
||||||
|
// case 'Pending':
|
||||||
|
// return Colors.blue;
|
||||||
|
// default:
|
||||||
|
// return Colors.black;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// @override
|
||||||
|
// Widget build(BuildContext context) {
|
||||||
|
// double myheight = MediaQuery.of(context).size.height;
|
||||||
|
// return Scaffold(
|
||||||
|
// drawer: MyDrawer(),
|
||||||
|
// appBar: AppBar(
|
||||||
|
// title: const Text('Manage User',style: TextStyle(fontWeight: FontWeight.bold),),
|
||||||
|
// ),
|
||||||
|
// body: SingleChildScrollView(
|
||||||
|
// child: Padding(
|
||||||
|
// padding: const EdgeInsets.only(left: 10.0,right: 10.0,top: 3.0),
|
||||||
|
// child: Column(
|
||||||
|
// children: [
|
||||||
|
// TextField(
|
||||||
|
// decoration: InputDecoration(
|
||||||
|
// prefixIcon: const Icon(Icons.search),
|
||||||
|
// hintText: 'Search',
|
||||||
|
// border: OutlineInputBorder(
|
||||||
|
// borderRadius: BorderRadius.all(Radius.circular(20)),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// SizedBox(height: myheight/40,),
|
||||||
|
// SingleChildScrollView(
|
||||||
|
// scrollDirection: Axis.horizontal,
|
||||||
|
// child:
|
||||||
|
// DataTable(
|
||||||
|
// sortColumnIndex: _sortColumnIndex,
|
||||||
|
// sortAscending: _isAscending,
|
||||||
|
// columns: [
|
||||||
|
// DataColumn(
|
||||||
|
// label: const Text('User Name'),
|
||||||
|
// //label: Row(children: [Text('Name'),Icon(Icons.arrow_upward),Icon(Icons.arrow_downward)],),
|
||||||
|
// onSort: (columnIndex, ascending) => _sort((user) => user.userName, columnIndex, ascending),
|
||||||
|
// numeric: false
|
||||||
|
// ),
|
||||||
|
// DataColumn(
|
||||||
|
// label: const Text('Email ID'),
|
||||||
|
// onSort: (columnIndex, ascending) => _sort((user) => user.emailId, columnIndex, ascending),
|
||||||
|
// numeric: false
|
||||||
|
// ),
|
||||||
|
// DataColumn(
|
||||||
|
// label: const Text('Registration Date'),
|
||||||
|
// onSort: (columnIndex, ascending) => _sort((user) => user.registrationDate, columnIndex, ascending),
|
||||||
|
// numeric: false
|
||||||
|
// ),
|
||||||
|
// DataColumn(
|
||||||
|
// label: const Text('Status'),
|
||||||
|
// onSort: (columnIndex, ascending) => _sort((user) => user.status, columnIndex, ascending),
|
||||||
|
// numeric: false
|
||||||
|
// ),
|
||||||
|
// ],
|
||||||
|
// rows: userData.map((user) {
|
||||||
|
// return DataRow(
|
||||||
|
// cells: [
|
||||||
|
// DataCell(Text(user.userName)),
|
||||||
|
// DataCell(Text(user.emailId)),
|
||||||
|
// DataCell(Text(user.registrationDate)),
|
||||||
|
// DataCell(
|
||||||
|
// DropdownButton<String>(
|
||||||
|
// value: user.status,
|
||||||
|
// items: statusOptions.map((status) {
|
||||||
|
// return DropdownMenuItem<String>(
|
||||||
|
// value: status,
|
||||||
|
// child: Text(
|
||||||
|
// status,
|
||||||
|
// style: TextStyle(color: getStatusColor(status)),
|
||||||
|
// ),
|
||||||
|
// );
|
||||||
|
// }).toList(),
|
||||||
|
// onChanged: (String? newStatus) {
|
||||||
|
// if (newStatus != null) {
|
||||||
|
// setState(() {
|
||||||
|
// user.status = newStatus;
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// ],
|
||||||
|
// );
|
||||||
|
// }).toList(),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// ],
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// // User data model
|
||||||
|
// class User {
|
||||||
|
// final String userName;
|
||||||
|
// final String emailId;
|
||||||
|
// final String registrationDate;
|
||||||
|
// String status;
|
||||||
|
//
|
||||||
|
// User({
|
||||||
|
// required this.userName,
|
||||||
|
// required this.emailId,
|
||||||
|
// required this.registrationDate,
|
||||||
|
// this.status = 'Pending',
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:uae_stat/presentation/components/my_bottom_nav_bar.dart';
|
||||||
|
import 'package:uae_stat/presentation/components/my_drawer.dart';
|
||||||
|
|
||||||
|
class ManageUserRouter extends StatefulWidget {
|
||||||
|
@override
|
||||||
|
State<ManageUserRouter> createState() => _ManageUserRouterState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ManageUserRouterState extends State<ManageUserRouter> {
|
||||||
|
// Sample data for the table
|
||||||
|
final List<User> userData = List.generate(
|
||||||
|
5,
|
||||||
|
(index) => User(
|
||||||
|
userName: 'Conan Keller ${index + 1}',
|
||||||
|
emailId: 'ConanKeller${index + 1}@gmail.com',
|
||||||
|
registrationDate: '18/07/2024',
|
||||||
|
status: 'Pending',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
// Sorting state
|
||||||
|
int _sortColumnIndex = 0;
|
||||||
|
bool _isAscending = true;
|
||||||
|
|
||||||
|
// Method to sort the data based on a column
|
||||||
|
void _sort<T>(Comparable<T> Function(User user) getField, int columnIndex,
|
||||||
|
bool ascending) {
|
||||||
|
setState(() {
|
||||||
|
_sortColumnIndex = columnIndex;
|
||||||
|
_isAscending = ascending;
|
||||||
|
userData.sort((a, b) {
|
||||||
|
final aValue = getField(a);
|
||||||
|
final bValue = getField(b);
|
||||||
|
return ascending
|
||||||
|
? Comparable.compare(aValue, bValue)
|
||||||
|
: Comparable.compare(bValue, aValue);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Define dropdown items
|
||||||
|
final List<String> statusOptions = ['Approved', 'Denied', 'Pending'];
|
||||||
|
|
||||||
|
// Method to get status color
|
||||||
|
Color getStatusColor(String status) {
|
||||||
|
switch (status) {
|
||||||
|
case 'Approved':
|
||||||
|
return Colors.green;
|
||||||
|
case 'Denied':
|
||||||
|
return Colors.red;
|
||||||
|
case 'Pending':
|
||||||
|
return Colors.blue;
|
||||||
|
default:
|
||||||
|
return Colors.black;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Method to show a confirmation dialog when status is changed
|
||||||
|
Future<void> _showConfirmationDialog(User user, String newStatus) async {
|
||||||
|
double myheight = MediaQuery.of(context).size.height;
|
||||||
|
return showDialog<void>(
|
||||||
|
context: context,
|
||||||
|
barrierDismissible: false, // User must tap button to dismiss dialog
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return
|
||||||
|
// AlertDialog(
|
||||||
|
// shape:
|
||||||
|
// RoundedRectangleBorder(borderRadius: BorderRadius.circular(5.0)),
|
||||||
|
// content: Padding(
|
||||||
|
// padding: const EdgeInsets.all(8.0),
|
||||||
|
// child: Text(
|
||||||
|
// 'Are you sure you want to change \n the status to $newStatus?',
|
||||||
|
// style: TextStyle(fontSize: 15),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// actions: <Widget>[
|
||||||
|
// Center(
|
||||||
|
// child: Row(
|
||||||
|
// mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||||
|
// children: [
|
||||||
|
// TextButton(
|
||||||
|
// onPressed: () {
|
||||||
|
// Navigator.of(context)
|
||||||
|
// .pop(); // Close dialog without changing status
|
||||||
|
// },
|
||||||
|
// style: TextButton.styleFrom(
|
||||||
|
// shape: RoundedRectangleBorder(
|
||||||
|
// borderRadius: BorderRadius.circular(
|
||||||
|
// 10.0), // Adjust the radius as needed
|
||||||
|
// ),
|
||||||
|
// side: BorderSide(
|
||||||
|
// color: Colors.blue, // Set the outline color
|
||||||
|
// width: 2.0, // Set the border width
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// child: Text('No'),
|
||||||
|
// ),
|
||||||
|
// TextButton(
|
||||||
|
// onPressed: () {
|
||||||
|
// setState(() {
|
||||||
|
// user.status = newStatus; // Change status
|
||||||
|
// });
|
||||||
|
// Navigator.of(context).pop();
|
||||||
|
// },
|
||||||
|
// style: TextButton.styleFrom(
|
||||||
|
// backgroundColor: Colors.blue, // Set background color
|
||||||
|
// foregroundColor: Colors.white,
|
||||||
|
// shape: RoundedRectangleBorder(
|
||||||
|
// borderRadius:
|
||||||
|
// BorderRadius.circular(10.0), // Set text color
|
||||||
|
// )),
|
||||||
|
// child: Text(
|
||||||
|
// 'Yes',
|
||||||
|
// style: TextStyle(color: Colors.white),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// ],
|
||||||
|
// ))
|
||||||
|
// ],
|
||||||
|
// );
|
||||||
|
|
||||||
|
AlertDialog(
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(5.0), // Rounded corners
|
||||||
|
),
|
||||||
|
contentPadding: EdgeInsets.zero, // Ensure no padding issues with close icon
|
||||||
|
content: Stack(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.all(16.0),
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
SizedBox(height: myheight/30,),
|
||||||
|
Text(
|
||||||
|
'Are you sure you want to change \n the status to $newStatus?',
|
||||||
|
style: TextStyle(fontSize: 15),
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
right: 0,
|
||||||
|
top: 0,
|
||||||
|
child: IconButton(
|
||||||
|
icon: Icon(Icons.close),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(context).pop(); // Close the dialog
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
actions: <Widget>[
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||||
|
children: [
|
||||||
|
TextButton(
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(context)
|
||||||
|
.pop(); // Close dialog without changing status
|
||||||
|
},
|
||||||
|
style: TextButton.styleFrom(
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(
|
||||||
|
10.0), // Adjust the radius as needed
|
||||||
|
),
|
||||||
|
side: BorderSide(
|
||||||
|
color: Colors.blue, // Set the outline color
|
||||||
|
width: 2.0, // Set the border width
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Text('No'),
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
onPressed: () {
|
||||||
|
setState(() {
|
||||||
|
user.status = newStatus; // Change status
|
||||||
|
});
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
},
|
||||||
|
style: TextButton.styleFrom(
|
||||||
|
backgroundColor: Colors.blue, // Set background color
|
||||||
|
foregroundColor: Colors.white,
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius:
|
||||||
|
BorderRadius.circular(10.0), // Set text color
|
||||||
|
)),
|
||||||
|
child: Text(
|
||||||
|
'Yes',
|
||||||
|
style: TextStyle(color: Colors.white),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
double myheight = MediaQuery.of(context).size.height;
|
||||||
|
return Scaffold(
|
||||||
|
drawer: MyDrawer(),
|
||||||
|
appBar: AppBar(
|
||||||
|
title: const Text('Manage User',
|
||||||
|
style: TextStyle(fontWeight: FontWeight.bold)),
|
||||||
|
),
|
||||||
|
body: SingleChildScrollView(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 10.0, right: 10.0, top: 3.0),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
TextField(
|
||||||
|
decoration: InputDecoration(
|
||||||
|
prefixIcon: const Icon(Icons.search),
|
||||||
|
hintText: 'Search',
|
||||||
|
border: OutlineInputBorder(
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(20)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: myheight / 40),
|
||||||
|
SingleChildScrollView(
|
||||||
|
scrollDirection: Axis.horizontal,
|
||||||
|
child: DataTable(
|
||||||
|
sortColumnIndex: _sortColumnIndex,
|
||||||
|
sortAscending: _isAscending,
|
||||||
|
columns: [
|
||||||
|
DataColumn(
|
||||||
|
label: const Text('User Name'),
|
||||||
|
onSort: (columnIndex, ascending) => _sort(
|
||||||
|
(user) => user.userName, columnIndex, ascending),
|
||||||
|
numeric: false,
|
||||||
|
),
|
||||||
|
DataColumn(
|
||||||
|
label: const Text('Email ID'),
|
||||||
|
onSort: (columnIndex, ascending) =>
|
||||||
|
_sort((user) => user.emailId, columnIndex, ascending),
|
||||||
|
numeric: false,
|
||||||
|
),
|
||||||
|
DataColumn(
|
||||||
|
label: const Text('Registration Date'),
|
||||||
|
onSort: (columnIndex, ascending) => _sort(
|
||||||
|
(user) => user.registrationDate,
|
||||||
|
columnIndex,
|
||||||
|
ascending),
|
||||||
|
numeric: false,
|
||||||
|
),
|
||||||
|
DataColumn(
|
||||||
|
label: const Text('Status'),
|
||||||
|
onSort: (columnIndex, ascending) =>
|
||||||
|
_sort((user) => user.status, columnIndex, ascending),
|
||||||
|
numeric: false,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
rows: userData.map((user) {
|
||||||
|
return DataRow(
|
||||||
|
cells: [
|
||||||
|
DataCell(Text(user.userName)),
|
||||||
|
DataCell(Text(user.emailId)),
|
||||||
|
DataCell(Text(user.registrationDate)),
|
||||||
|
DataCell(
|
||||||
|
DropdownButton<String>(
|
||||||
|
value: user.status,
|
||||||
|
items: statusOptions.map((status) {
|
||||||
|
return DropdownMenuItem<String>(
|
||||||
|
value: status,
|
||||||
|
child: Text(
|
||||||
|
status,
|
||||||
|
style:
|
||||||
|
TextStyle(color: getStatusColor(status)),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}).toList(),
|
||||||
|
onChanged: (String? newStatus) {
|
||||||
|
if (newStatus != null) {
|
||||||
|
_showConfirmationDialog(user,
|
||||||
|
newStatus); // Show dialog for confirmation
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}).toList(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// User data model
|
||||||
|
class User {
|
||||||
|
final String userName;
|
||||||
|
final String emailId;
|
||||||
|
final String registrationDate;
|
||||||
|
String status;
|
||||||
|
|
||||||
|
User({
|
||||||
|
required this.userName,
|
||||||
|
required this.emailId,
|
||||||
|
required this.registrationDate,
|
||||||
|
this.status = 'Pending',
|
||||||
|
});
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user