tap filter

This commit is contained in:
mohammad
2024-08-22 16:52:41 +03:00
parent e4f8924e93
commit f5a7441b3c
16 changed files with 333 additions and 318 deletions

View File

@ -11,9 +11,7 @@ import 'package:syncrow_web/services/access_mang_api.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/snack_bar.dart';
List<String> selectedDevices = [];
// Define the BLoC
class VisitorPasswordBloc
extends Bloc<VisitorPasswordEvent, VisitorPasswordState> {
VisitorPasswordBloc() : super(VisitorPasswordInitial()) {
@ -42,12 +40,12 @@ class VisitorPasswordBloc
final TextEditingController unitNameController = TextEditingController();
final TextEditingController virtualAddressController =
TextEditingController();
List<String> selectedDevices = [];
List<DeviceModel> data = [];
List<String> selectedDeviceIds = [];
String effectiveTime = 'Select Time';
String expirationTime = 'Select Time';
String effectiveTime = 'Start Time';
String expirationTime = 'End Time';
final forgetFormKey = GlobalKey<FormState>();
@ -69,8 +67,6 @@ class VisitorPasswordBloc
String startTimeAccess = 'Start Time';
String endTimeAccess = 'End Time';
// DateTime? repeatStartTime=DateTime.now();
// DateTime? repeatEndTime;
selectAccessType(
SelectPasswordType event, Emitter<VisitorPasswordState> emit) {
@ -210,9 +206,6 @@ class VisitorPasswordBloc
Emitter<VisitorPasswordState> emit) async {
try {
generate7DigitNumber();
print('selectedDevices$selectedDevices');
// emit(DeviceLoaded());
bool res = await AccessMangApi().postOnlineOneTime(
email: event.email,
password: passwordController,
@ -225,6 +218,7 @@ class VisitorPasswordBloc
}
emit(TableLoaded(data));
} catch (e) {
emit(FailedState(e.toString()));
}
}
@ -351,9 +345,9 @@ class VisitorPasswordBloc
emit(TableLoaded(event.filteredData));
}
addDeviceToList() {
addDeviceToList(context) {
selectedDevices = selectedDeviceIds;
print(selectedDevices);
Navigator.of(context).pop(selectedDevices); // Close the dialog
}
Future<void> selectTimeOfLinePassword(SelectTimeEvent event, Emitter<VisitorPasswordState> emit) async {

View File

@ -161,6 +161,7 @@ class AddDeviceDialog extends StatelessWidget {
child: state is TableLoaded
? DynamicTable(
cellDecoration: containerDecoration,
isEmpty:visitorBloc.data.isEmpty,
selectAll: (p0) {
visitorBloc.selectedDeviceIds.clear();
for (var item in state.data) {
@ -211,8 +212,7 @@ class AddDeviceDialog extends StatelessWidget {
width: size.width * 0.2,
child: DefaultButton(
onPressed: () {
visitorBloc.addDeviceToList();
Navigator.of(context).pop(); // Close the dialog
visitorBloc.addDeviceToList(context);
},
borderRadius: 8,
child: Text('Ok'),

View File

@ -128,10 +128,7 @@ class VisitorPasswordDialog extends StatelessWidget {
: visitorBloc.accessTypeSelected,
onChanged: (String? value) {
if (value != null) {
print(value);
context
.read<VisitorPasswordBloc>()
context.read<VisitorPasswordBloc>()
.add(SelectPasswordType(value));
}
},
@ -192,22 +189,18 @@ class VisitorPasswordDialog extends StatelessWidget {
SizedBox(
width: 200,
child: RadioListTile<String>(
title: Text('One-Time',style: Theme.of(context).textTheme.bodySmall!.copyWith(
title: Text('One-Time',
style: Theme.of(context).textTheme.bodySmall!.copyWith(
color: Colors.black,fontSize: 13),),
value: 'One-Time',
groupValue:
(state is UsageFrequencySelected)
? state.selectedFrequency
: visitorBloc
.usageFrequencySelected,
: visitorBloc.usageFrequencySelected,
onChanged: (String? value) {
if (value != null) {
print(value);
context
.read<VisitorPasswordBloc>()
.add(SelectUsageFrequency(
value));
context.read<VisitorPasswordBloc>()
.add(SelectUsageFrequency(value));
}
},
),
@ -219,17 +212,14 @@ class VisitorPasswordDialog extends StatelessWidget {
style: Theme.of(context).textTheme.bodySmall!.copyWith(
color: Colors.black,fontSize: 13),),
value: 'Periodic',
groupValue:
(state is UsageFrequencySelected)
groupValue: (state is UsageFrequencySelected)
? state.selectedFrequency
: visitorBloc
.usageFrequencySelected,
: visitorBloc.usageFrequencySelected,
onChanged: (String? value) {
if (value != null) {
context
.read<VisitorPasswordBloc>()
.add(SelectUsageFrequency(
value));
.add(SelectUsageFrequency(value));
}
},
),
@ -238,7 +228,8 @@ class VisitorPasswordDialog extends StatelessWidget {
),
Text('Within the validity period, each device can be unlocked only once.',
style: Theme.of(context).textTheme.bodySmall!.copyWith(
color: ColorsManager.grayColor,fontSize: 9),)
color: ColorsManager.grayColor,fontSize: 9),
)
],
),
const SizedBox(
@ -288,7 +279,7 @@ class VisitorPasswordDialog extends StatelessWidget {
],
),
Text(
'Within the validity period, each device can be unlocked only once.',
'Within the validity period, each device can be unlocked only once.',
style: Theme.of(context).textTheme.bodySmall!.copyWith(
fontWeight: FontWeight.w400,
color: ColorsManager.grayColor,fontSize: 9),),
@ -326,13 +317,20 @@ class VisitorPasswordDialog extends StatelessWidget {
width: size.width * 0.08,
child: DefaultButton(
onPressed: () {
showDialog(
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return const AddDeviceDialog();
},
);
).then((listDevice) {
if(listDevice!=null){
print('selectedDevices==$listDevice');
visitorBloc.selectedDevices = listDevice;
}
});
},
borderRadius: 8,
child: Text('+ Add Device',style: Theme.of(context).textTheme.bodySmall!.copyWith(
@ -371,135 +369,81 @@ class VisitorPasswordDialog extends StatelessWidget {
width: size.width * 0.2,
child: DefaultButton(
onPressed: () {
print(selectedDevices);
if (visitorBloc.forgetFormKey.currentState!.validate()) {
if (selectedDevices.toString() != '[]') {
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return InfoDialog(
size: size,
title: 'Set Password',
content:
'This action will update all of the selected\n door locks passwords in the property.\n\nAre you sure you want to continue?',
actions: [
Container(
decoration: containerDecoration,
width: size.width * 0.1,
child: DefaultButton(
borderRadius: 8,
onPressed: () {
Navigator.of(context)
.pop(); // Close the dialog
},
backgroundColor: Colors.white,
child: Text(
'Cancel',
style: Theme.of(context).textTheme.bodySmall!.copyWith(
fontWeight: FontWeight.w400,
color: ColorsManager.blackColor,fontSize: 16),
),
),
),
Container(
decoration: containerDecoration,
width: size.width * 0.1,
child: DefaultButton(
borderRadius: 8,
onPressed: () {
if (visitorBloc.usageFrequencySelected == 'One-Time' &&
visitorBloc.accessTypeSelected == 'Online Password') {
visitorBloc.add(
OnlineOneTimePasswordEvent(
context: context,
passwordName: visitorBloc.userNameController.text,
email: visitorBloc.emailController.text));
} else if (visitorBloc.usageFrequencySelected == 'Periodic' &&
visitorBloc.accessTypeSelected == 'Online Password') {
visitorBloc.add(OnlineMultipleTimePasswordEvent(
passwordName: visitorBloc.userNameController.text,
email: visitorBloc.emailController.text,
effectiveTime: visitorBloc.effectiveTimeTimeStamp.toString(),
invalidTime: visitorBloc.expirationTimeTimeStamp.toString()));
} else if (visitorBloc.usageFrequencySelected == 'One-Time' &&
visitorBloc.accessTypeSelected == 'Offline Password') {
visitorBloc.add(OfflineOneTimePasswordEvent(
passwordName: visitorBloc.userNameController.text,
email: visitorBloc.emailController.text,
));
} else if (visitorBloc.usageFrequencySelected == 'Periodic' &&
visitorBloc.accessTypeSelected == 'Offline Password') {
visitorBloc.add(
OfflineMultipleTimePasswordEvent(
passwordName: visitorBloc.userNameController.text,
email: visitorBloc.emailController.text,
effectiveTime: visitorBloc.effectiveTimeTimeStamp.toString(),
invalidTime: visitorBloc.expirationTimeTimeStamp.toString()));
}
},
child: Text('Ok',
style: Theme.of(context).textTheme.bodySmall!.copyWith(
fontWeight: FontWeight.w400,
color: ColorsManager.whiteColors,fontSize: 16),
),
),
),
],
);
},
);
} else {
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
alignment: Alignment.center,
content: SizedBox(
height: size!.height * 0.15,
child: Column(
children: [
SizedBox(
child: SvgPicture.asset(
Assets.deviceNoteIcon,
height: 35,
width: 35,
),
),
const SizedBox(
width: 15,
),
Text(
'Please select devices to continue',
style: Theme.of(context)
.textTheme
.headlineLarge!
.copyWith(
fontSize: 20,
fontWeight: FontWeight.w400,
color: Colors.black),
),
],
),
),
actionsAlignment: MainAxisAlignment.center,
actions: <Widget>[
TextButton(
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return InfoDialog(
size: size,
title: 'Set Password',
content:
'This action will update all of the selected\n door locks passwords in the property.\n\nAre you sure you want to continue?',
actions: [
Container(
decoration: containerDecoration,
width: size.width * 0.1,
child: DefaultButton(
borderRadius: 8,
onPressed: () {
Navigator.of(context).pop();
},
child: Text('OK',
backgroundColor: Colors.white,
child: Text(
'Cancel',
style: Theme.of(context).textTheme.bodySmall!.copyWith(
fontWeight: FontWeight.w400,
color: ColorsManager.whiteColors,fontSize: 16),),
fontWeight: FontWeight.w400,
color: ColorsManager.blackColor,fontSize: 16),
),
),
],
);
},
);
}
),
Container(
decoration: containerDecoration,
width: size.width * 0.1,
child: DefaultButton(
borderRadius: 8,
onPressed: () {
if (visitorBloc.usageFrequencySelected == 'One-Time' &&
visitorBloc.accessTypeSelected == 'Online Password') {
visitorBloc.add(
OnlineOneTimePasswordEvent(
context: context,
passwordName: visitorBloc.userNameController.text,
email: visitorBloc.emailController.text));
} else if (visitorBloc.usageFrequencySelected == 'Periodic' &&
visitorBloc.accessTypeSelected == 'Online Password') {
visitorBloc.add(OnlineMultipleTimePasswordEvent(
passwordName: visitorBloc.userNameController.text,
email: visitorBloc.emailController.text,
effectiveTime: visitorBloc.effectiveTimeTimeStamp.toString(),
invalidTime: visitorBloc.expirationTimeTimeStamp.toString()));
} else if (visitorBloc.usageFrequencySelected == 'One-Time' &&
visitorBloc.accessTypeSelected == 'Offline Password') {
visitorBloc.add(OfflineOneTimePasswordEvent(
passwordName: visitorBloc.userNameController.text,
email: visitorBloc.emailController.text,
));
} else if (visitorBloc.usageFrequencySelected == 'Periodic' &&
visitorBloc.accessTypeSelected == 'Offline Password') {
visitorBloc.add(
OfflineMultipleTimePasswordEvent(
passwordName: visitorBloc.userNameController.text,
email: visitorBloc.emailController.text,
effectiveTime: visitorBloc.effectiveTimeTimeStamp.toString(),
invalidTime: visitorBloc.expirationTimeTimeStamp.toString()));
}
},
child: Text('Ok',
style: Theme.of(context).textTheme.bodySmall!.copyWith(
fontWeight: FontWeight.w400,
color: ColorsManager.whiteColors,fontSize: 16),
),
),
),
],
);
},
);
}
},
borderRadius: 8,