share attachment implemented
|
@ -10,7 +10,7 @@
|
||||||
<application
|
<application
|
||||||
android:label="uniT App"
|
android:label="uniT App"
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/ic_launcher">
|
android:icon="@mipmap/unit">
|
||||||
<provider
|
<provider
|
||||||
android:authorities = "${applicationId}.fileprovider"
|
android:authorities = "${applicationId}.fileprovider"
|
||||||
android:exported = "false"
|
android:exported = "false"
|
||||||
|
|
Before Width: | Height: | Size: 544 B |
After Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 442 B |
After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 721 B |
After Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 17 KiB |
|
@ -1,5 +1,5 @@
|
||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = '1.6.10'
|
ext.kotlin_version = '1.8.0'
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
|
|
@ -1,10 +1,18 @@
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:bloc/bloc.dart';
|
import 'package:bloc/bloc.dart';
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
import 'package:permission_handler/permission_handler.dart';
|
||||||
|
import 'package:share_plus/share_plus.dart';
|
||||||
import 'package:unit2/model/profile/educational_background.dart';
|
import 'package:unit2/model/profile/educational_background.dart';
|
||||||
import 'package:unit2/sevices/profile/education_services.dart';
|
import 'package:unit2/sevices/profile/education_services.dart';
|
||||||
|
import 'package:unit2/utils/request_permission.dart';
|
||||||
|
|
||||||
import '../../../model/profile/attachment.dart';
|
import '../../../model/profile/attachment.dart';
|
||||||
import '../../../utils/attachment_services.dart';
|
import '../../../utils/attachment_services.dart';
|
||||||
|
import '../../../utils/urls.dart';
|
||||||
|
|
||||||
part 'education_event.dart';
|
part 'education_event.dart';
|
||||||
part 'education_state.dart';
|
part 'education_state.dart';
|
||||||
|
@ -14,9 +22,13 @@ class EducationBloc extends Bloc<EducationEvent, EducationState> {
|
||||||
List<School> schools = [];
|
List<School> schools = [];
|
||||||
List<Course> programs = [];
|
List<Course> programs = [];
|
||||||
List<Honor> honors = [];
|
List<Honor> honors = [];
|
||||||
|
int? profileId;
|
||||||
|
String? token;
|
||||||
List<AttachmentCategory> attachmentCategories = [];
|
List<AttachmentCategory> attachmentCategories = [];
|
||||||
EducationBloc() : super(EducationInitial()) {
|
EducationBloc() : super(EducationInitial()) {
|
||||||
on<GetEducationalBackground>((event, emit) async {
|
on<GetEducationalBackground>((event, emit) async {
|
||||||
|
profileId = event.profileId;
|
||||||
|
token = event.token;
|
||||||
emit(EducationalBackgroundLoadingState());
|
emit(EducationalBackgroundLoadingState());
|
||||||
try {
|
try {
|
||||||
if (attachmentCategories.isEmpty) {
|
if (attachmentCategories.isEmpty) {
|
||||||
|
@ -206,5 +218,44 @@ class EducationBloc extends Bloc<EducationEvent, EducationState> {
|
||||||
emit(EducationalBackgroundErrorState(message: e.toString()));
|
emit(EducationalBackgroundErrorState(message: e.toString()));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
on<EducationViewAttachment>((event, emit) {
|
||||||
|
String fileUrl =
|
||||||
|
'${Url.instance.prefixHost()}://${Url.instance.host()}${event.source}';
|
||||||
|
emit(EducationAttachmentViewState(
|
||||||
|
fileUrl: fileUrl, fileName: event.fileName));
|
||||||
|
});
|
||||||
|
on<ShareAttachment>((event, emit) async {
|
||||||
|
emit(EducationalBackgroundLoadingState());
|
||||||
|
Directory directory;
|
||||||
|
String? appDocumentPath;
|
||||||
|
if (await requestPermission(Permission.storage)) {
|
||||||
|
directory = await getApplicationDocumentsDirectory();
|
||||||
|
appDocumentPath = directory.path;
|
||||||
|
}
|
||||||
|
try{
|
||||||
|
final bool success = await AttachmentServices.instance.downloadAttachment(
|
||||||
|
filename: event.fileName,
|
||||||
|
source: event.source,
|
||||||
|
downLoadDir: appDocumentPath!);
|
||||||
|
if (success) {
|
||||||
|
final result = await Share.shareXFiles(
|
||||||
|
[XFile("$appDocumentPath/${event.fileName}")]);
|
||||||
|
if (result.status == ShareResultStatus.success) {
|
||||||
|
Fluttertoast.showToast(msg: "Attachment shared successfully");
|
||||||
|
emit(EducationAttachmentViewState(
|
||||||
|
fileUrl: event.source, fileName: event.fileName));
|
||||||
|
} else {
|
||||||
|
Fluttertoast.showToast(msg: "Attachment shared unsuccessfully");
|
||||||
|
emit(EducationAttachmentViewState(
|
||||||
|
fileUrl: event.source, fileName: event.fileName));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
emit(EducationAttachmentViewState(
|
||||||
|
fileUrl: event.source, fileName: event.fileName));
|
||||||
|
}
|
||||||
|
}catch(e){
|
||||||
|
emit(EducationalBackgroundErrorState(message: e.toString()));
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,3 +83,15 @@ class DeleteEducationAttachment extends EducationEvent{
|
||||||
final int profileId;
|
final int profileId;
|
||||||
const DeleteEducationAttachment({required this.attachment, required this.moduleId, required this.profileId, required this.token});
|
const DeleteEducationAttachment({required this.attachment, required this.moduleId, required this.profileId, required this.token});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class EducationViewAttachment extends EducationEvent{
|
||||||
|
final String fileName;
|
||||||
|
final String source;
|
||||||
|
const EducationViewAttachment({required this.source,required this.fileName});
|
||||||
|
}
|
||||||
|
|
||||||
|
class ShareAttachment extends EducationEvent{
|
||||||
|
final String fileName;
|
||||||
|
final String source;
|
||||||
|
const ShareAttachment({required this.fileName, required this.source});
|
||||||
|
}
|
||||||
|
|
|
@ -60,7 +60,6 @@ class EducationAddedState extends EducationState {
|
||||||
List<Object> get props => [response];
|
List<Object> get props => [response];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//// Edited State
|
//// Edited State
|
||||||
class EditedEducationState extends EducationState {
|
class EditedEducationState extends EducationState {
|
||||||
final Map<dynamic, dynamic> response;
|
final Map<dynamic, dynamic> response;
|
||||||
|
@ -90,3 +89,14 @@ class EducationAttachmentDeletedState extends EducationState {
|
||||||
@override
|
@override
|
||||||
List<Object> get props => [success];
|
List<Object> get props => [success];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class EducationAttachmentViewState extends EducationState {
|
||||||
|
final String fileUrl;
|
||||||
|
final String fileName;
|
||||||
|
const EducationAttachmentViewState({required this.fileUrl, required this.fileName});
|
||||||
|
}
|
||||||
|
|
||||||
|
class EducationAttachmentShareState extends EducationState{
|
||||||
|
final bool success;
|
||||||
|
const EducationAttachmentShareState({required this.success,});
|
||||||
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ import '../../../model/utils/eligibility.dart';
|
||||||
import '../../../sevices/profile/eligibility_services.dart';
|
import '../../../sevices/profile/eligibility_services.dart';
|
||||||
import '../../../utils/location_utilities.dart';
|
import '../../../utils/location_utilities.dart';
|
||||||
import '../../../utils/profile_utilities.dart';
|
import '../../../utils/profile_utilities.dart';
|
||||||
|
import '../../../utils/urls.dart';
|
||||||
part 'eligibility_event.dart';
|
part 'eligibility_event.dart';
|
||||||
part 'eligibility_state.dart';
|
part 'eligibility_state.dart';
|
||||||
|
|
||||||
|
@ -52,6 +53,7 @@ class EligibilityBloc extends Bloc<EligibilityEvent, EligibilityState> {
|
||||||
|
|
||||||
//// GET ELIGIBILITY
|
//// GET ELIGIBILITY
|
||||||
on<GetEligibilities>((event, emit) async {
|
on<GetEligibilities>((event, emit) async {
|
||||||
|
emit(EligibilityLoadingState());
|
||||||
try {
|
try {
|
||||||
if (attachmentCategories.isEmpty) {
|
if (attachmentCategories.isEmpty) {
|
||||||
attachmentCategories =
|
attachmentCategories =
|
||||||
|
@ -257,7 +259,7 @@ class EligibilityBloc extends Bloc<EligibilityEvent, EligibilityState> {
|
||||||
|
|
||||||
on<DeleteEligibyAttachment>((event, emit) async {
|
on<DeleteEligibyAttachment>((event, emit) async {
|
||||||
emit(EligibilityLoadingState());
|
emit(EligibilityLoadingState());
|
||||||
// try {
|
try {
|
||||||
final bool success = await AttachmentServices.instance.deleteAttachment(
|
final bool success = await AttachmentServices.instance.deleteAttachment(
|
||||||
attachment: event.attachment,
|
attachment: event.attachment,
|
||||||
moduleId: int.parse(event.moduleId),
|
moduleId: int.parse(event.moduleId),
|
||||||
|
@ -275,9 +277,13 @@ class EligibilityBloc extends Bloc<EligibilityEvent, EligibilityState> {
|
||||||
} else {
|
} else {
|
||||||
emit(EligibilitytAttachmentDeletedState(success: success));
|
emit(EligibilitytAttachmentDeletedState(success: success));
|
||||||
}
|
}
|
||||||
// } catch (e) {
|
} catch (e) {
|
||||||
// emit(EligibilityErrorState(message: e.toString()));
|
emit(EligibilityErrorState(message: e.toString()));
|
||||||
// }
|
}
|
||||||
|
});
|
||||||
|
on<EligibiltyViewAttachmentEvent>((event,emit){
|
||||||
|
String fileUrl = '${Url.instance.prefixHost()}://${Url.instance.host()}${event.source}';
|
||||||
|
emit(EligibilityAttachmentViewState(fileUrl: fileUrl));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,9 +7,7 @@ abstract class EligibilityEvent extends Equatable {
|
||||||
List<Object> get props => [];
|
List<Object> get props => [];
|
||||||
}
|
}
|
||||||
|
|
||||||
class ShowAddEligibilityForm extends EligibilityEvent {
|
class ShowAddEligibilityForm extends EligibilityEvent {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
class GetEligibilities extends EligibilityEvent {
|
class GetEligibilities extends EligibilityEvent {
|
||||||
final int profileId;
|
final int profileId;
|
||||||
|
@ -23,22 +21,30 @@ class AddEligibility extends EligibilityEvent{
|
||||||
final EligibityCert eligibityCert;
|
final EligibityCert eligibityCert;
|
||||||
final String profileId;
|
final String profileId;
|
||||||
final String token;
|
final String token;
|
||||||
const AddEligibility({required this.eligibityCert, required this.profileId, required this.token});
|
const AddEligibility(
|
||||||
|
{required this.eligibityCert,
|
||||||
|
required this.profileId,
|
||||||
|
required this.token});
|
||||||
@override
|
@override
|
||||||
List<Object> get props => [eligibityCert, profileId, token];
|
List<Object> get props => [eligibityCert, profileId, token];
|
||||||
}
|
}
|
||||||
|
|
||||||
class UpdateEligibility extends EligibilityEvent {
|
class UpdateEligibility extends EligibilityEvent {
|
||||||
final EligibityCert eligibityCert;
|
final EligibityCert eligibityCert;
|
||||||
final String profileId;
|
final String profileId;
|
||||||
final String token;
|
final String token;
|
||||||
final int oldEligibility;
|
final int oldEligibility;
|
||||||
const UpdateEligibility({required this.eligibityCert, required this.oldEligibility,required this.profileId, required this.token});
|
const UpdateEligibility(
|
||||||
|
{required this.eligibityCert,
|
||||||
|
required this.oldEligibility,
|
||||||
|
required this.profileId,
|
||||||
|
required this.token});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object> get props => [eligibityCert, profileId, token, oldEligibility];
|
List<Object> get props => [eligibityCert, profileId, token, oldEligibility];
|
||||||
}
|
}
|
||||||
class LoadEligibility extends EligibilityEvent {
|
|
||||||
|
|
||||||
|
class LoadEligibility extends EligibilityEvent {
|
||||||
const LoadEligibility();
|
const LoadEligibility();
|
||||||
@override
|
@override
|
||||||
List<Object> get props => [];
|
List<Object> get props => [];
|
||||||
|
@ -57,17 +63,15 @@ class DeleteEligibility extends EligibilityEvent {
|
||||||
final String token;
|
final String token;
|
||||||
|
|
||||||
const DeleteEligibility(
|
const DeleteEligibility(
|
||||||
{
|
{required this.eligibilityId,
|
||||||
required this.eligibilityId,
|
|
||||||
required this.profileId,
|
required this.profileId,
|
||||||
required this.token});
|
required this.token});
|
||||||
@override
|
@override
|
||||||
List<Object> get props => [profileId, eligibilityId, token];
|
List<Object> get props => [profileId, eligibilityId, token];
|
||||||
}
|
}
|
||||||
|
|
||||||
class CallErrorState extends EligibilityEvent{
|
class CallErrorState extends EligibilityEvent {}
|
||||||
|
|
||||||
}
|
|
||||||
////Add Attachment
|
////Add Attachment
|
||||||
class AddEligibiltyAttachment extends EligibilityEvent {
|
class AddEligibiltyAttachment extends EligibilityEvent {
|
||||||
final String categoryId;
|
final String categoryId;
|
||||||
|
@ -75,9 +79,15 @@ class AddEligibiltyAttachment extends EligibilityEvent{
|
||||||
final List<String> filePaths;
|
final List<String> filePaths;
|
||||||
final String token;
|
final String token;
|
||||||
final String profileId;
|
final String profileId;
|
||||||
const AddEligibiltyAttachment({required this.attachmentModule, required this.filePaths, required this.categoryId, required this.profileId, required this.token});
|
const AddEligibiltyAttachment(
|
||||||
|
{required this.attachmentModule,
|
||||||
|
required this.filePaths,
|
||||||
|
required this.categoryId,
|
||||||
|
required this.profileId,
|
||||||
|
required this.token});
|
||||||
@override
|
@override
|
||||||
List<Object> get props => [categoryId,attachmentModule,filePaths, token,profileId];
|
List<Object> get props =>
|
||||||
|
[categoryId, attachmentModule, filePaths, token, profileId];
|
||||||
}
|
}
|
||||||
|
|
||||||
////Delete Attachment
|
////Delete Attachment
|
||||||
|
@ -86,14 +96,20 @@ class DeleteEligibyAttachment extends EligibilityEvent{
|
||||||
final String token;
|
final String token;
|
||||||
final Attachment attachment;
|
final Attachment attachment;
|
||||||
final String moduleId;
|
final String moduleId;
|
||||||
const DeleteEligibyAttachment({required this.attachment,required this.moduleId, required this.profileId, required this.token});
|
const DeleteEligibyAttachment(
|
||||||
|
{required this.attachment,
|
||||||
|
required this.moduleId,
|
||||||
|
required this.profileId,
|
||||||
|
required this.token});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class EligibilityViewAttachments extends EligibilityEvent {
|
||||||
|
final String source;
|
||||||
|
const EligibilityViewAttachments({required this.source});
|
||||||
|
}
|
||||||
|
|
||||||
|
class EligibiltyViewAttachmentEvent extends EligibilityEvent{
|
||||||
|
final String source;
|
||||||
|
const EligibiltyViewAttachmentEvent({required this.source});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -107,3 +107,8 @@ class EligibilitytAttachmentDeletedState extends EligibilityState {
|
||||||
@override
|
@override
|
||||||
List<Object> get props => [success];
|
List<Object> get props => [success];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class EligibilityAttachmentViewState extends EligibilityState {
|
||||||
|
final String fileUrl;
|
||||||
|
const EligibilityAttachmentViewState({required this.fileUrl});
|
||||||
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ import '../../../model/utils/category.dart';
|
||||||
import '../../../utils/attachment_services.dart';
|
import '../../../utils/attachment_services.dart';
|
||||||
import '../../../utils/location_utilities.dart';
|
import '../../../utils/location_utilities.dart';
|
||||||
import '../../../utils/profile_utilities.dart';
|
import '../../../utils/profile_utilities.dart';
|
||||||
|
import '../../../utils/urls.dart';
|
||||||
part 'learning_development_event.dart';
|
part 'learning_development_event.dart';
|
||||||
part 'learning_development_state.dart';
|
part 'learning_development_state.dart';
|
||||||
|
|
||||||
|
@ -325,5 +326,10 @@ class LearningDevelopmentBloc
|
||||||
emit(LearningDevelopmentErrorState(message: e.toString()));
|
emit(LearningDevelopmentErrorState(message: e.toString()));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
on<LearningDevelopmentViewAttachmentEvent>((event,emit){
|
||||||
|
String fileUrl = '${Url.instance.prefixHost()}://${Url.instance.host()}${event.source}';
|
||||||
|
emit(LearningAndDevelopmentAttachmentViewState(fileUrl: fileUrl));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,3 +88,9 @@ class DeleteLearningDevAttachment extends LearningDevelopmentEvent{
|
||||||
const DeleteLearningDevAttachment({required this.attachment, required this.moduleId, required this.profileId, required this.token});
|
const DeleteLearningDevAttachment({required this.attachment, required this.moduleId, required this.profileId, required this.token});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class LearningDevelopmentViewAttachmentEvent extends LearningDevelopmentEvent{
|
||||||
|
final String source;
|
||||||
|
const LearningDevelopmentViewAttachmentEvent({required this.source});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -133,3 +133,9 @@ class LearningDevAttachmentDeletedState extends LearningDevelopmentState {
|
||||||
@override
|
@override
|
||||||
List<Object> get props => [success];
|
List<Object> get props => [success];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class LearningAndDevelopmentAttachmentViewState extends LearningDevelopmentState {
|
||||||
|
final String fileUrl;
|
||||||
|
const LearningAndDevelopmentAttachmentViewState({required this.fileUrl});
|
||||||
|
}
|
|
@ -7,6 +7,7 @@ import 'package:unit2/model/utils/position.dart';
|
||||||
import 'package:unit2/sevices/profile/work_history_services.dart';
|
import 'package:unit2/sevices/profile/work_history_services.dart';
|
||||||
import 'package:unit2/utils/profile_utilities.dart';
|
import 'package:unit2/utils/profile_utilities.dart';
|
||||||
import '../../../model/profile/attachment.dart';
|
import '../../../model/profile/attachment.dart';
|
||||||
|
|
||||||
import '../../../model/utils/category.dart';
|
import '../../../model/utils/category.dart';
|
||||||
import '../../../utils/attachment_services.dart';
|
import '../../../utils/attachment_services.dart';
|
||||||
part 'workHistory_event.dart';
|
part 'workHistory_event.dart';
|
||||||
|
@ -67,8 +68,10 @@ class WorkHistoryBloc extends Bloc<WorkHistorytEvent, WorkHistoryState> {
|
||||||
});
|
});
|
||||||
//// ADD WORK HISTORIES
|
//// ADD WORK HISTORIES
|
||||||
on<AddWorkHostory>((event, emit) async {
|
on<AddWorkHostory>((event, emit) async {
|
||||||
try {
|
// try {
|
||||||
Map<dynamic, dynamic> status = await WorkHistoryService.instance.add(
|
Map<dynamic, dynamic> status = await WorkHistoryService.instance.add(
|
||||||
|
accomplishment: event.accomplishment,
|
||||||
|
actualDuties: event.actualDuties,
|
||||||
isPrivate: event.isPrivate,
|
isPrivate: event.isPrivate,
|
||||||
workHistory: event.workHistory,
|
workHistory: event.workHistory,
|
||||||
token: event.token,
|
token: event.token,
|
||||||
|
@ -80,35 +83,35 @@ class WorkHistoryBloc extends Bloc<WorkHistorytEvent, WorkHistoryState> {
|
||||||
} else {
|
} else {
|
||||||
emit(WorkHistoryAddedState(response: status));
|
emit(WorkHistoryAddedState(response: status));
|
||||||
}
|
}
|
||||||
} catch (e) {
|
// } catch (e) {
|
||||||
emit(WorkHistoryErrorState(message: e.toString()));
|
// emit(WorkHistoryErrorState(message: e.toString()));
|
||||||
}
|
// }
|
||||||
});
|
});
|
||||||
|
|
||||||
////UPDATE WORK HISTORY
|
////UPDATE WORK HISTORY
|
||||||
on<UpdateWorkHistory>((event, emit) async {
|
// on<UpdateWorkHistory>((event, emit) async {
|
||||||
try {
|
// try {
|
||||||
Map<dynamic, dynamic> status = await WorkHistoryService.instance.update(
|
// Map<dynamic, dynamic> status = await WorkHistoryService.instance.update(
|
||||||
oldWorkHistory: event.oldWorkHistory,
|
// oldWorkHistory: event.oldWorkHistory,
|
||||||
newWorkHistory: event.workHistory,
|
// newWorkHistory: event.workHistory,
|
||||||
token: event.token,
|
// token: event.token,
|
||||||
profileId: event.profileId);
|
// profileId: event.profileId);
|
||||||
if (status['success']) {
|
// if (status['success']) {
|
||||||
WorkHistory workHistory = WorkHistory.fromJson(status['data']);
|
// WorkHistory workHistory = WorkHistory.fromJson(status['data']);
|
||||||
workExperiences.removeWhere((WorkHistory work) {
|
// workExperiences.removeWhere((WorkHistory work) {
|
||||||
return work.id == event.oldWorkHistory.id;
|
// return work.id == event.oldWorkHistory.id;
|
||||||
});
|
// });
|
||||||
workExperiences.add(workHistory);
|
// workExperiences.add(workHistory);
|
||||||
emit(WorkHistoryEditedState(response: status));
|
// emit(WorkHistoryEditedState(response: status));
|
||||||
} else {
|
// } else {
|
||||||
emit(WorkHistoryEditedState(
|
// emit(WorkHistoryEditedState(
|
||||||
response: status,
|
// response: status,
|
||||||
));
|
// ));
|
||||||
}
|
// }
|
||||||
} catch (e) {
|
// } catch (e) {
|
||||||
emit(WorkHistoryErrorState(message: e.toString()));
|
// emit(WorkHistoryErrorState(message: e.toString()));
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
|
|
||||||
////SHOW EDIT WORK HISTORIES
|
////SHOW EDIT WORK HISTORIES
|
||||||
on<ShowEditWorkHistoryForm>((event, emit) async {
|
on<ShowEditWorkHistoryForm>((event, emit) async {
|
||||||
|
@ -209,12 +212,12 @@ class WorkHistoryBloc extends Bloc<WorkHistorytEvent, WorkHistoryState> {
|
||||||
Attachment newAttachment = Attachment.fromJson(element);
|
Attachment newAttachment = Attachment.fromJson(element);
|
||||||
attachments.add(newAttachment);
|
attachments.add(newAttachment);
|
||||||
});
|
});
|
||||||
workHistory.attachments == null
|
// workHistory.attachments == null
|
||||||
? workHistory.attachments = attachments
|
// ? workHistory.attachments = attachments
|
||||||
: workHistory.attachments = [
|
// : workHistory.attachments = [
|
||||||
...workHistory.attachments!,
|
// ...workHistory.attachments!,
|
||||||
...attachments
|
// ...attachments
|
||||||
];
|
// ];
|
||||||
emit(WorkHistoryDevAttachmentAddedState(response: status));
|
emit(WorkHistoryDevAttachmentAddedState(response: status));
|
||||||
} else {
|
} else {
|
||||||
emit(WorkHistoryDevAttachmentAddedState(response: status));
|
emit(WorkHistoryDevAttachmentAddedState(response: status));
|
||||||
|
@ -223,31 +226,31 @@ class WorkHistoryBloc extends Bloc<WorkHistorytEvent, WorkHistoryState> {
|
||||||
emit(WorkHistoryErrorState(message: e.toString()));
|
emit(WorkHistoryErrorState(message: e.toString()));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
////Delete Attachment
|
// ////Delete Attachment
|
||||||
on<DeleteWorkHistoryAttachment>((event, emit) async {
|
// on<DeleteWorkHistoryAttachment>((event, emit) async {
|
||||||
emit(WorkHistoryLoadingState());
|
// emit(WorkHistoryLoadingState());
|
||||||
try {
|
// try {
|
||||||
final bool success = await AttachmentServices.instance.deleteAttachment(
|
// final bool success = await AttachmentServices.instance.deleteAttachment(
|
||||||
attachment: event.attachment,
|
// attachment: event.attachment,
|
||||||
moduleId: event.moduleId,
|
// moduleId: event.moduleId,
|
||||||
profileId: event.profileId.toString(),
|
// profileId: event.profileId.toString(),
|
||||||
token: event.token);
|
// token: event.token);
|
||||||
if (success) {
|
// if (success) {
|
||||||
final WorkHistory workHistory =
|
// final WorkHistory workHistory =
|
||||||
workExperiences
|
// workExperiences
|
||||||
.firstWhere((element) => element.id == event.moduleId);
|
// .firstWhere((element) => element.id == event.moduleId);
|
||||||
workHistory.attachments
|
// workHistory.attachments
|
||||||
?.removeWhere((element) => element.id == event.attachment.id);
|
// ?.removeWhere((element) => element.id == event.attachment.id);
|
||||||
workExperiences
|
// workExperiences
|
||||||
.removeWhere((element) => element.id == event.moduleId);
|
// .removeWhere((element) => element.id == event.moduleId);
|
||||||
workExperiences.add(workHistory);
|
// workExperiences.add(workHistory);
|
||||||
emit(WorkHistoryDevAttachmentDeletedState(success: success));
|
// emit(WorkHistoryDevAttachmentDeletedState(success: success));
|
||||||
} else {
|
// } else {
|
||||||
emit(WorkHistoryDevAttachmentDeletedState(success: success));
|
// emit(WorkHistoryDevAttachmentDeletedState(success: success));
|
||||||
}
|
// }
|
||||||
} catch (e) {
|
// } catch (e) {
|
||||||
emit(WorkHistoryErrorState(message: e.toString()));
|
// emit(WorkHistoryErrorState(message: e.toString()));
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,12 +43,14 @@ class DeleteWorkHistory extends WorkHistorytEvent{
|
||||||
|
|
||||||
class UpdateWorkHistory extends WorkHistorytEvent{
|
class UpdateWorkHistory extends WorkHistorytEvent{
|
||||||
final WorkHistory workHistory;
|
final WorkHistory workHistory;
|
||||||
final WorkHistory oldWorkHistory;
|
final bool isPrivate;
|
||||||
final String profileId;
|
final int profileId;
|
||||||
final String token;
|
final String token;
|
||||||
const UpdateWorkHistory({required this.oldWorkHistory, required this.profileId, required this.token, required this.workHistory});
|
final String? actualDuties;
|
||||||
|
final String? accomplishment;
|
||||||
|
const UpdateWorkHistory({required this.profileId, required this.token, required this.workHistory, required this.accomplishment, required this.actualDuties, required this.isPrivate});
|
||||||
@override
|
@override
|
||||||
List<Object> get props => [profileId,token,workHistory,oldWorkHistory];
|
List<Object> get props => [profileId,token,workHistory,];
|
||||||
}
|
}
|
||||||
|
|
||||||
class AddWorkHostory extends WorkHistorytEvent{
|
class AddWorkHostory extends WorkHistorytEvent{
|
||||||
|
@ -56,7 +58,9 @@ class AddWorkHostory extends WorkHistorytEvent{
|
||||||
final bool isPrivate;
|
final bool isPrivate;
|
||||||
final int profileId;
|
final int profileId;
|
||||||
final String token;
|
final String token;
|
||||||
const AddWorkHostory({required this.workHistory, required this.isPrivate, required this.profileId, required this.token});
|
final String? actualDuties;
|
||||||
|
final String? accomplishment;
|
||||||
|
const AddWorkHostory({required this.workHistory, required this.isPrivate, required this.profileId, required this.token, required this.accomplishment, required this.actualDuties});
|
||||||
@override
|
@override
|
||||||
List<Object> get props => [workHistory,profileId,token,isPrivate];
|
List<Object> get props => [workHistory,profileId,token,isPrivate];
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,15 +22,15 @@ class PassCheckBloc extends Bloc<PassCheckEvent, PassCheckState> {
|
||||||
int? stationId;
|
int? stationId;
|
||||||
String? cpId;
|
String? cpId;
|
||||||
on<GetPassCheckAreas>((event, emit) async {
|
on<GetPassCheckAreas>((event, emit) async {
|
||||||
// try {
|
try {
|
||||||
emit(PassCheckLoadingState());
|
emit(PassCheckLoadingState());
|
||||||
List<dynamic> response = await PassCheckServices.instance
|
List<dynamic> response = await PassCheckServices.instance
|
||||||
.getPassCheckArea(roleId: event.roleId, userId: event.userId);
|
.getPassCheckArea(roleId: event.roleId, userId: event.userId);
|
||||||
roleId = event.roleId;
|
roleId = event.roleId;
|
||||||
emit(AssignAreaLoaded(assignedArea: response, roleId: roleId!));
|
emit(AssignAreaLoaded(assignedArea: response, roleId: roleId!));
|
||||||
// } catch (e) {
|
} catch (e) {
|
||||||
// emit(PassCheckErrorState(message: e.toString()));
|
emit(PassCheckErrorState(message: e.toString()));
|
||||||
// }
|
}
|
||||||
});
|
});
|
||||||
on<SetScannerSettings>((event, emit) {
|
on<SetScannerSettings>((event, emit) {
|
||||||
otherInputs = event.includeOtherInputs;
|
otherInputs = event.includeOtherInputs;
|
||||||
|
|
|
@ -1,75 +1,163 @@
|
||||||
// To parse this JSON data, do
|
import 'package:unit2/model/utils/industry_class.dart';
|
||||||
//
|
|
||||||
// final workHistory = workHistoryFromJson(jsonString);
|
|
||||||
|
|
||||||
import 'dart:convert';
|
|
||||||
|
|
||||||
import '../utils/agency.dart';
|
import '../utils/agency.dart';
|
||||||
import '../utils/category.dart';
|
|
||||||
import '../utils/industry_class.dart';
|
|
||||||
import '../utils/position.dart';
|
import '../utils/position.dart';
|
||||||
import 'attachment.dart';
|
|
||||||
|
|
||||||
WorkHistory workHistoryFromJson(String str) => WorkHistory.fromJson(json.decode(str));
|
|
||||||
|
|
||||||
String workHistoryToJson(WorkHistory data) => json.encode(data.toJson());
|
|
||||||
|
|
||||||
class WorkHistory {
|
class WorkHistory {
|
||||||
|
final PositionTitle? position;
|
||||||
|
final Agency? agency;
|
||||||
|
final Supervisor? supervisor;
|
||||||
|
final int? id;
|
||||||
|
final DateTime? fromDate;
|
||||||
|
final DateTime? toDate;
|
||||||
|
final int? agencydepid;
|
||||||
|
final double? monthlysalary;
|
||||||
|
final String? statusAppointment;
|
||||||
|
final int? salarygrade;
|
||||||
|
final int? sgstep;
|
||||||
|
final List<Accomplishment>? accomplishment;
|
||||||
|
final List<ActualDuty>? actualDuties;
|
||||||
|
|
||||||
WorkHistory({
|
WorkHistory({
|
||||||
this.id,
|
required this.position,
|
||||||
this.agency,
|
required this.agency,
|
||||||
this.sgStep,
|
required this.supervisor,
|
||||||
this.toDate,
|
required this.id,
|
||||||
this.position,
|
required this.fromDate,
|
||||||
this.fromDate,
|
required this.toDate,
|
||||||
this.attachments,
|
required this.agencydepid,
|
||||||
this.salaryGrade,
|
required this.monthlysalary,
|
||||||
this.monthlySalary,
|
required this.statusAppointment,
|
||||||
this.appointmentStatus,
|
required this.salarygrade,
|
||||||
|
required this.sgstep,
|
||||||
|
required this.accomplishment,
|
||||||
|
required this.actualDuties,
|
||||||
});
|
});
|
||||||
|
|
||||||
final int? id;
|
|
||||||
final Agency? agency;
|
|
||||||
final int? sgStep;
|
|
||||||
final DateTime? toDate;
|
|
||||||
final PositionTitle? position;
|
|
||||||
final DateTime? fromDate;
|
|
||||||
List<Attachment>? attachments;
|
|
||||||
final int? salaryGrade;
|
|
||||||
final double? monthlySalary;
|
|
||||||
final String? appointmentStatus;
|
|
||||||
|
|
||||||
factory WorkHistory.fromJson(Map<String, dynamic> json) => WorkHistory(
|
factory WorkHistory.fromJson(Map<String, dynamic> json) => WorkHistory(
|
||||||
|
position: PositionTitle.fromJson(json["position"]),
|
||||||
|
agency: json['agency'] == null?null: Agency.fromJson(json["agency"]),
|
||||||
|
supervisor: json['supervisor'] == null?null: Supervisor.fromJson(json["supervisor"]),
|
||||||
id: json["id"],
|
id: json["id"],
|
||||||
agency: json["agency"] == null ? null : Agency.fromJson(json["agency"]),
|
fromDate: json['from_date'] == null?null: DateTime.tryParse(json["from_date"]),
|
||||||
sgStep: json["sg_step"],
|
toDate: json['to_date'] == null?null: DateTime.tryParse(json["to_date"]),
|
||||||
toDate: json["to_date"] == null ? null : DateTime.parse(json["to_date"]),
|
agencydepid: json["agencydepid"],
|
||||||
position: json["position"] == null ? null : PositionTitle.fromJson(json["position"]),
|
monthlysalary: json["monthlysalary"],
|
||||||
fromDate: json["from_date"] == null ? null : DateTime.parse(json["from_date"]),
|
statusAppointment: json["status_appointment"],
|
||||||
attachments: json['attachments'] ==null?null: List<Attachment>.from(json["attachments"].map((x) => Attachment.fromJson(x))),
|
salarygrade: json["salarygrade"],
|
||||||
salaryGrade: json["salary_grade"],
|
sgstep: json["sgstep"],
|
||||||
monthlySalary: json["monthly_salary"],
|
accomplishment:json['accomplishment'] == null?null: json['accomplishment'] == null?null: List<Accomplishment>.from(
|
||||||
appointmentStatus: json["appointment_status"],
|
json["accomplishment"].map((x) => Accomplishment.fromJson(x))),
|
||||||
|
actualDuties: json['actual_duties'] == null?null: List<ActualDuty>.from(
|
||||||
|
json["actual_duties"].map((x) => ActualDuty.fromJson(x))),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => {
|
||||||
|
"position": position?.toJson(),
|
||||||
|
"agency": agency?.toJson(),
|
||||||
|
"supervisor": supervisor?.toJson(),
|
||||||
|
"id": id,
|
||||||
|
"from_date":
|
||||||
|
"${fromDate?.year.toString().padLeft(4, '0')}-${fromDate?.month.toString().padLeft(2, '0')}-${fromDate?.day.toString().padLeft(2, '0')}",
|
||||||
|
"to_date": toDate,
|
||||||
|
"agencydepid": agencydepid,
|
||||||
|
"monthlysalary": monthlysalary,
|
||||||
|
"status_appointment": statusAppointment,
|
||||||
|
"salarygrade": salarygrade,
|
||||||
|
"sgstep": sgstep,
|
||||||
|
"accomplishment":
|
||||||
|
List<dynamic>.from(accomplishment!.map((x) => x.toJson())),
|
||||||
|
"actual_duties":
|
||||||
|
List<dynamic>.from(actualDuties!.map((x) => x.toJson())),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
class Accomplishment {
|
||||||
|
final int? id;
|
||||||
|
final int? workExperienceId;
|
||||||
|
final String? accomplishment;
|
||||||
|
|
||||||
|
Accomplishment({
|
||||||
|
required this.id,
|
||||||
|
required this.workExperienceId,
|
||||||
|
required this.accomplishment,
|
||||||
|
});
|
||||||
|
|
||||||
|
factory Accomplishment.fromJson(Map<String, dynamic> json) => Accomplishment(
|
||||||
|
id: json["id"],
|
||||||
|
workExperienceId: json["work_experience_id"],
|
||||||
|
accomplishment: json["accomplishment"],
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> toJson() => {
|
Map<String, dynamic> toJson() => {
|
||||||
"id": id,
|
"id": id,
|
||||||
"agency": agency?.toJson(),
|
"work_experience_id": workExperienceId,
|
||||||
"sg_step": sgStep,
|
"accomplishment": accomplishment,
|
||||||
"to_date": "${toDate!.year.toString().padLeft(4, '0')}-${toDate!.month.toString().padLeft(2, '0')}-${toDate!.day.toString().padLeft(2, '0')}",
|
};
|
||||||
"position": position?.toJson(),
|
}
|
||||||
"from_date": "${fromDate!.year.toString().padLeft(4, '0')}-${fromDate!.month.toString().padLeft(2, '0')}-${fromDate!.day.toString().padLeft(2, '0')}",
|
|
||||||
// "attachments": attachments,
|
class ActualDuty {
|
||||||
"salary_grade": salaryGrade,
|
final int? id;
|
||||||
"monthly_salary": monthlySalary,
|
final int? workExperienceId;
|
||||||
"appointment_status": appointmentStatus,
|
final String description;
|
||||||
|
|
||||||
|
ActualDuty({
|
||||||
|
required this.id,
|
||||||
|
required this.workExperienceId,
|
||||||
|
required this.description,
|
||||||
|
});
|
||||||
|
|
||||||
|
factory ActualDuty.fromJson(Map<String, dynamic> json) => ActualDuty(
|
||||||
|
id: json["id"],
|
||||||
|
workExperienceId: json["work_experience_id"],
|
||||||
|
description: json["description"],
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => {
|
||||||
|
"id": id,
|
||||||
|
"work_experience_id": workExperienceId,
|
||||||
|
"description": description,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class Supervisor {
|
||||||
|
final int? id;
|
||||||
|
final int? agencyId;
|
||||||
|
final String? lastname;
|
||||||
|
final String? firstname;
|
||||||
|
final String? middlename;
|
||||||
|
final String? stationName;
|
||||||
|
|
||||||
|
Supervisor({
|
||||||
|
required this.id,
|
||||||
|
required this.agencyId,
|
||||||
|
required this.lastname,
|
||||||
|
required this.firstname,
|
||||||
|
required this.middlename,
|
||||||
|
required this.stationName,
|
||||||
|
});
|
||||||
|
|
||||||
|
factory Supervisor.fromJson(Map<String, dynamic> json) => Supervisor(
|
||||||
|
id: json["id"],
|
||||||
|
agencyId: json["agency_id"],
|
||||||
|
lastname: json["lastname"],
|
||||||
|
firstname: json["firstname"],
|
||||||
|
middlename: json["middlename"],
|
||||||
|
stationName: json["station_name"],
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => {
|
||||||
|
"id": id,
|
||||||
|
"agency_id": agencyId,
|
||||||
|
"lastname": lastname,
|
||||||
|
"firstname": firstname,
|
||||||
|
"middlename": middlename,
|
||||||
|
"station_name": stationName,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,121 @@
|
||||||
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
import 'package:flutter_progress_hud/flutter_progress_hud.dart';
|
||||||
|
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
||||||
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
|
import 'package:share_plus/share_plus.dart';
|
||||||
|
import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart';
|
||||||
|
import 'package:unit2/bloc/profile/education/education_bloc.dart';
|
||||||
|
import 'package:unit2/theme-data.dart/colors.dart';
|
||||||
|
import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart';
|
||||||
|
|
||||||
|
class EudcationViewAttachment extends StatefulWidget {
|
||||||
|
const EudcationViewAttachment({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<EudcationViewAttachment> createState() =>
|
||||||
|
_EudcationViewAttachmentState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _EudcationViewAttachmentState extends State<EudcationViewAttachment> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
String? fileUrl;
|
||||||
|
String? filename;
|
||||||
|
return Scaffold(
|
||||||
|
floatingActionButton: FloatingActionButton(
|
||||||
|
onPressed: () async {
|
||||||
|
await _launchInBrowser(fileUrl!);
|
||||||
|
},
|
||||||
|
child: const Icon(Icons.file_download),
|
||||||
|
),
|
||||||
|
appBar: AppBar(
|
||||||
|
title: const Text("Attachment"),
|
||||||
|
centerTitle: true,
|
||||||
|
actions: [
|
||||||
|
IconButton(
|
||||||
|
onPressed: () {
|
||||||
|
context.read<EducationBloc>().add(
|
||||||
|
ShareAttachment(fileName: filename!, source: fileUrl!));
|
||||||
|
},
|
||||||
|
icon: const Icon(Icons.share)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
body: ProgressHUD(
|
||||||
|
padding: const EdgeInsets.all(24),
|
||||||
|
backgroundColor: Colors.black87,
|
||||||
|
indicatorWidget: const SpinKitFadingCircle(color: Colors.white),
|
||||||
|
child: BlocConsumer<EducationBloc, EducationState>(
|
||||||
|
builder: (context, state) {
|
||||||
|
if (state is EducationAttachmentViewState) {
|
||||||
|
fileUrl = state.fileUrl;
|
||||||
|
filename = state.fileName;
|
||||||
|
|
||||||
|
bool isPDF = state.fileUrl[state.fileUrl.length - 1] == 'f'
|
||||||
|
? true
|
||||||
|
: false;
|
||||||
|
return SizedBox(
|
||||||
|
child: isPDF
|
||||||
|
? SfPdfViewer.network(
|
||||||
|
state.fileUrl,
|
||||||
|
onDocumentLoadFailed: (details) {
|
||||||
|
Center(
|
||||||
|
child: Text(details.description),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
)
|
||||||
|
: Center(
|
||||||
|
child: CachedNetworkImage(
|
||||||
|
progressIndicatorBuilder: (context, url, progress) {
|
||||||
|
return const SizedBox(
|
||||||
|
height: 100,
|
||||||
|
width: 100,
|
||||||
|
child: CircularProgressIndicator(
|
||||||
|
color: primary,
|
||||||
|
));
|
||||||
|
},
|
||||||
|
imageBuilder: (context, imageProvider) => Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
image: DecorationImage(
|
||||||
|
image: imageProvider, fit: BoxFit.fill)),
|
||||||
|
),
|
||||||
|
imageUrl: state.fileUrl,
|
||||||
|
width: double.infinity,
|
||||||
|
height: 220,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return Container();
|
||||||
|
},
|
||||||
|
listener: (context, state) {
|
||||||
|
if (state is EducationalBackgroundLoadingState) {
|
||||||
|
final progress = ProgressHUD.of(context);
|
||||||
|
progress!.showWithText("Please wait...");
|
||||||
|
}
|
||||||
|
if (state is EducationAttachmentViewState) {
|
||||||
|
final progress = ProgressHUD.of(context);
|
||||||
|
progress!.dismiss();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _launchInBrowser(String url) async {
|
||||||
|
final UrlLauncherPlatform launcher = UrlLauncherPlatform.instance;
|
||||||
|
if (!await launcher.launch(
|
||||||
|
url,
|
||||||
|
useSafariVC: false,
|
||||||
|
useWebView: false,
|
||||||
|
enableJavaScript: false,
|
||||||
|
enableDomStorage: false,
|
||||||
|
universalLinksOnly: false,
|
||||||
|
headers: <String, String>{},
|
||||||
|
)) {
|
||||||
|
throw Exception('Could not launch $url');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,6 +11,7 @@ import 'package:unit2/bloc/profile/profile_bloc.dart';
|
||||||
import 'package:unit2/bloc/user/user_bloc.dart';
|
import 'package:unit2/bloc/user/user_bloc.dart';
|
||||||
import 'package:unit2/model/profile/educational_background.dart';
|
import 'package:unit2/model/profile/educational_background.dart';
|
||||||
import 'package:unit2/screens/profile/components/education/add_modal.dart';
|
import 'package:unit2/screens/profile/components/education/add_modal.dart';
|
||||||
|
import 'package:unit2/screens/profile/shared/view_attachment.dart';
|
||||||
import 'package:unit2/theme-data.dart/box_shadow.dart';
|
import 'package:unit2/theme-data.dart/box_shadow.dart';
|
||||||
import 'package:unit2/theme-data.dart/colors.dart';
|
import 'package:unit2/theme-data.dart/colors.dart';
|
||||||
import 'package:unit2/widgets/Leadings/add_leading.dart';
|
import 'package:unit2/widgets/Leadings/add_leading.dart';
|
||||||
|
@ -26,6 +27,7 @@ import '../../../widgets/Leadings/close_leading.dart';
|
||||||
import '../shared/multiple_attachment.dart';
|
import '../shared/multiple_attachment.dart';
|
||||||
import '../shared/single_attachment.dart';
|
import '../shared/single_attachment.dart';
|
||||||
import 'education/edit_modal.dart';
|
import 'education/edit_modal.dart';
|
||||||
|
import 'education/education_view_attachment.dart';
|
||||||
|
|
||||||
class EducationScreen extends StatelessWidget {
|
class EducationScreen extends StatelessWidget {
|
||||||
const EducationScreen({super.key});
|
const EducationScreen({super.key});
|
||||||
|
@ -696,6 +698,15 @@ class EducationScreen extends StatelessWidget {
|
||||||
children: [
|
children: [
|
||||||
const Divider(),
|
const Divider(),
|
||||||
SingleAttachment(
|
SingleAttachment(
|
||||||
|
view: () {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: ((context) => BlocProvider.value(
|
||||||
|
value: EducationBloc()..add(EducationViewAttachment(source: state.educationalBackground[index].attachments!.first.source!,fileName: state.educationalBackground[index].attachments!.first.filename!)),
|
||||||
|
child: const EudcationViewAttachment(),
|
||||||
|
))));
|
||||||
|
},
|
||||||
onpressed:
|
onpressed:
|
||||||
() {
|
() {
|
||||||
confirmAlert(
|
confirmAlert(
|
||||||
|
@ -728,6 +739,17 @@ class EducationScreen extends StatelessWidget {
|
||||||
)
|
)
|
||||||
////Multiple Attachments View
|
////Multiple Attachments View
|
||||||
: MultipleAttachments(
|
: MultipleAttachments(
|
||||||
|
viewAttachment:
|
||||||
|
(source,filname) {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: ((context) =>
|
||||||
|
BlocProvider.value(
|
||||||
|
value: EducationBloc()..add(EducationViewAttachment(source: source,fileName: filname)),
|
||||||
|
child: const EudcationViewAttachment(),
|
||||||
|
))));
|
||||||
|
},
|
||||||
profileId:
|
profileId:
|
||||||
profileId,
|
profileId,
|
||||||
token: token!,
|
token: token!,
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart';
|
||||||
|
import 'package:unit2/bloc/profile/education/education_bloc.dart';
|
||||||
|
import 'package:unit2/bloc/profile/eligibility/eligibility_bloc.dart';
|
||||||
|
import 'package:unit2/theme-data.dart/colors.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
import '../../../../utils/urls.dart';
|
||||||
|
class EligibilityViewAttachment extends StatefulWidget {
|
||||||
|
|
||||||
|
const EligibilityViewAttachment({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<EligibilityViewAttachment> createState() => _EligibilityViewAttachmentState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _EligibilityViewAttachmentState extends State<EligibilityViewAttachment> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
String? fileUrl;
|
||||||
|
return Scaffold(
|
||||||
|
floatingActionButton: FloatingActionButton(
|
||||||
|
onPressed: ()async {
|
||||||
|
await launchUrl(Uri.parse(fileUrl!));
|
||||||
|
},
|
||||||
|
child: const Icon(Icons.file_download),
|
||||||
|
),
|
||||||
|
appBar: AppBar(
|
||||||
|
title: const Text("Attachment"),
|
||||||
|
centerTitle: true,
|
||||||
|
actions: [
|
||||||
|
IconButton(onPressed: () {}, icon: const Icon(Icons.share)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
body: BlocConsumer<EligibilityBloc, EligibilityState>(builder: (context,state){
|
||||||
|
if(state is EligibilityAttachmentViewState){
|
||||||
|
fileUrl = state.fileUrl;
|
||||||
|
bool isPDF = state.fileUrl[state.fileUrl.length - 1] == 'f' ? true : false;
|
||||||
|
return SizedBox(
|
||||||
|
child: isPDF?SfPdfViewer.network(
|
||||||
|
state.fileUrl,onDocumentLoadFailed: (details) {
|
||||||
|
Center(child: Text(details.description),);
|
||||||
|
},): Center(
|
||||||
|
child: CachedNetworkImage(
|
||||||
|
progressIndicatorBuilder: (context, url, progress) {
|
||||||
|
return const SizedBox(
|
||||||
|
height: 100,
|
||||||
|
width: 100,
|
||||||
|
child: CircularProgressIndicator(color: primary,));
|
||||||
|
},
|
||||||
|
|
||||||
|
imageBuilder: (context, imageProvider) => Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
image: DecorationImage(
|
||||||
|
image: imageProvider, fit: BoxFit.fill)),
|
||||||
|
),
|
||||||
|
imageUrl:
|
||||||
|
state.fileUrl,
|
||||||
|
width: double.infinity,
|
||||||
|
height: 220,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return Container();
|
||||||
|
},listener: (context, state) {
|
||||||
|
|
||||||
|
},)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -28,6 +28,8 @@ import '../../../bloc/profile/eligibility/eligibility_bloc.dart';
|
||||||
import '../../../utils/alerts.dart';
|
import '../../../utils/alerts.dart';
|
||||||
import '../shared/multiple_attachment.dart';
|
import '../shared/multiple_attachment.dart';
|
||||||
import '../shared/single_attachment.dart';
|
import '../shared/single_attachment.dart';
|
||||||
|
import '../shared/view_attachment.dart';
|
||||||
|
import 'eligibility/eligibility_view_attachment.dart';
|
||||||
|
|
||||||
class EligibiltyScreen extends StatelessWidget {
|
class EligibiltyScreen extends StatelessWidget {
|
||||||
const EligibiltyScreen({super.key});
|
const EligibiltyScreen({super.key});
|
||||||
|
@ -629,6 +631,17 @@ class EligibiltyScreen extends StatelessWidget {
|
||||||
?
|
?
|
||||||
////Single Attachment view
|
////Single Attachment view
|
||||||
SingleAttachment(
|
SingleAttachment(
|
||||||
|
view: (){
|
||||||
|
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: ((context) => BlocProvider.value(
|
||||||
|
value: EligibilityBloc()..add(EligibiltyViewAttachmentEvent(source: state.eligibilities[index].attachments!.first.source!)),
|
||||||
|
child: const EligibilityViewAttachment(),
|
||||||
|
))));
|
||||||
|
|
||||||
|
},
|
||||||
onpressed:
|
onpressed:
|
||||||
() {
|
() {
|
||||||
confirmAlert(
|
confirmAlert(
|
||||||
|
@ -660,6 +673,15 @@ class EligibiltyScreen extends StatelessWidget {
|
||||||
)
|
)
|
||||||
////Multiple Attachments View
|
////Multiple Attachments View
|
||||||
: MultipleAttachments(
|
: MultipleAttachments(
|
||||||
|
viewAttachment: (source,filename) {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: ((context) => BlocProvider.value(
|
||||||
|
value: EligibilityBloc()..add(EligibiltyViewAttachmentEvent(source: source)),
|
||||||
|
child: const EligibilityViewAttachment(),
|
||||||
|
))));
|
||||||
|
},
|
||||||
profileId:
|
profileId:
|
||||||
profileId!,
|
profileId!,
|
||||||
token: token!,
|
token: token!,
|
||||||
|
|
|
@ -12,6 +12,7 @@ import 'package:intl/intl.dart';
|
||||||
import 'package:unit2/bloc/profile/profile_bloc.dart';
|
import 'package:unit2/bloc/profile/profile_bloc.dart';
|
||||||
import 'package:unit2/bloc/user/user_bloc.dart';
|
import 'package:unit2/bloc/user/user_bloc.dart';
|
||||||
import 'package:unit2/screens/profile/components/learning_development/edit_modal.dart';
|
import 'package:unit2/screens/profile/components/learning_development/edit_modal.dart';
|
||||||
|
import 'package:unit2/screens/profile/components/learning_development/learning_development_view_attachment.dart';
|
||||||
import 'package:unit2/theme-data.dart/box_shadow.dart';
|
import 'package:unit2/theme-data.dart/box_shadow.dart';
|
||||||
import 'package:unit2/theme-data.dart/colors.dart';
|
import 'package:unit2/theme-data.dart/colors.dart';
|
||||||
import 'package:unit2/utils/global.dart';
|
import 'package:unit2/utils/global.dart';
|
||||||
|
@ -27,6 +28,7 @@ import '../../../utils/alerts.dart';
|
||||||
import '../../../widgets/Leadings/close_leading.dart';
|
import '../../../widgets/Leadings/close_leading.dart';
|
||||||
import '../shared/multiple_attachment.dart';
|
import '../shared/multiple_attachment.dart';
|
||||||
import '../shared/single_attachment.dart';
|
import '../shared/single_attachment.dart';
|
||||||
|
import '../shared/view_attachment.dart';
|
||||||
import 'learning_development/add_modal.dart';
|
import 'learning_development/add_modal.dart';
|
||||||
|
|
||||||
class LearningAndDevelopmentScreen extends StatelessWidget {
|
class LearningAndDevelopmentScreen extends StatelessWidget {
|
||||||
|
@ -673,6 +675,15 @@ class LearningAndDevelopmentScreen extends StatelessWidget {
|
||||||
?
|
?
|
||||||
////Single Attachment view
|
////Single Attachment view
|
||||||
SingleAttachment(
|
SingleAttachment(
|
||||||
|
view: (){
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: ((context) => BlocProvider.value(
|
||||||
|
value: LearningDevelopmentBloc()..add(LearningDevelopmentViewAttachmentEvent(source: state.learningsAndDevelopment[index].attachments!.first.source!)),
|
||||||
|
child: const LearningDevelopmentViewAttachment(),
|
||||||
|
))));
|
||||||
|
},
|
||||||
onpressed: () {
|
onpressed: () {
|
||||||
confirmAlert(
|
confirmAlert(
|
||||||
context,
|
context,
|
||||||
|
@ -703,6 +714,17 @@ class LearningAndDevelopmentScreen extends StatelessWidget {
|
||||||
)
|
)
|
||||||
////Multiple Attachments View
|
////Multiple Attachments View
|
||||||
: MultipleAttachments(
|
: MultipleAttachments(
|
||||||
|
viewAttachment:
|
||||||
|
(source,filename) {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: ((context) =>
|
||||||
|
BlocProvider.value(
|
||||||
|
value: LearningDevelopmentBloc()..add(LearningDevelopmentViewAttachmentEvent(source: source)),
|
||||||
|
child: const LearningDevelopmentViewAttachment(),
|
||||||
|
))));
|
||||||
|
},
|
||||||
profileId:
|
profileId:
|
||||||
profileId,
|
profileId,
|
||||||
token: token,
|
token: token,
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart';
|
||||||
|
import 'package:unit2/bloc/profile/learningDevelopment/learning_development_bloc.dart';
|
||||||
|
import 'package:unit2/theme-data.dart/colors.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
class LearningDevelopmentViewAttachment extends StatefulWidget {
|
||||||
|
|
||||||
|
const LearningDevelopmentViewAttachment({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<LearningDevelopmentViewAttachment> createState() => _LearningDevelopmentViewAttachmentState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _LearningDevelopmentViewAttachmentState extends State<LearningDevelopmentViewAttachment> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
String? fileUrl;
|
||||||
|
return Scaffold(
|
||||||
|
floatingActionButton: FloatingActionButton(
|
||||||
|
onPressed: ()async {
|
||||||
|
await launchUrl(Uri.parse(fileUrl!));
|
||||||
|
},
|
||||||
|
child: const Icon(Icons.file_download),
|
||||||
|
),
|
||||||
|
appBar: AppBar(
|
||||||
|
title: const Text("Attachment"),
|
||||||
|
centerTitle: true,
|
||||||
|
actions: [
|
||||||
|
IconButton(onPressed: () {}, icon: const Icon(Icons.share)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
body: BlocConsumer<LearningDevelopmentBloc, LearningDevelopmentState>(builder: (context,state){
|
||||||
|
if(state is LearningAndDevelopmentAttachmentViewState){
|
||||||
|
fileUrl = state.fileUrl;
|
||||||
|
bool isPDF = state.fileUrl[state.fileUrl.length - 1] == 'f' ? true : false;
|
||||||
|
return SizedBox(
|
||||||
|
child: isPDF?SfPdfViewer.network(
|
||||||
|
state.fileUrl,onDocumentLoadFailed: (details) {
|
||||||
|
Center(child: Text(details.description),);
|
||||||
|
},): Center(
|
||||||
|
child: CachedNetworkImage(
|
||||||
|
progressIndicatorBuilder: (context, url, progress) {
|
||||||
|
return const SizedBox(
|
||||||
|
height: 100,
|
||||||
|
width: 100,
|
||||||
|
child: CircularProgressIndicator(color: primary,));
|
||||||
|
},
|
||||||
|
|
||||||
|
imageBuilder: (context, imageProvider) => Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
image: DecorationImage(
|
||||||
|
image: imageProvider, fit: BoxFit.fill)),
|
||||||
|
),
|
||||||
|
imageUrl:
|
||||||
|
state.fileUrl,
|
||||||
|
width: double.infinity,
|
||||||
|
height: 220,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return Container();
|
||||||
|
},listener: (context, state) {
|
||||||
|
|
||||||
|
},)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -45,6 +45,12 @@ class _AddWorkHistoryScreenState extends State<AddWorkHistoryScreen> {
|
||||||
String? salary;
|
String? salary;
|
||||||
String? salaryGrade;
|
String? salaryGrade;
|
||||||
String? salaryGradeStep;
|
String? salaryGradeStep;
|
||||||
|
String? accomplishment;
|
||||||
|
String? duties;
|
||||||
|
String? sFname;
|
||||||
|
String? sLname;
|
||||||
|
String? sMname;
|
||||||
|
String? sOffice;
|
||||||
bool showAgency = false;
|
bool showAgency = false;
|
||||||
bool showSalaryGradeAndSalaryStep = false;
|
bool showSalaryGradeAndSalaryStep = false;
|
||||||
bool? isPrivate = false;
|
bool? isPrivate = false;
|
||||||
|
@ -67,7 +73,9 @@ class _AddWorkHistoryScreenState extends State<AddWorkHistoryScreen> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
|
||||||
return BlocConsumer<WorkHistoryBloc, WorkHistoryState>(
|
return BlocConsumer<WorkHistoryBloc, WorkHistoryState>(
|
||||||
|
|
||||||
listener: (context, state) {
|
listener: (context, state) {
|
||||||
if (state is AddWorkHistoryState) {
|
if (state is AddWorkHistoryState) {
|
||||||
final progress = ProgressHUD.of(context);
|
final progress = ProgressHUD.of(context);
|
||||||
|
@ -77,15 +85,14 @@ class _AddWorkHistoryScreenState extends State<AddWorkHistoryScreen> {
|
||||||
if (state is AddWorkHistoryState) {
|
if (state is AddWorkHistoryState) {
|
||||||
return FormBuilder(
|
return FormBuilder(
|
||||||
key: _formKey,
|
key: _formKey,
|
||||||
child: SizedBox(
|
child: SingleChildScrollView(
|
||||||
height: blockSizeVertical * 90,
|
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.symmetric(vertical: 32, horizontal: 28),
|
padding: const EdgeInsets.symmetric(vertical: 32, horizontal: 28),
|
||||||
child: Column(
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Flexible(
|
|
||||||
child: ListView(
|
|
||||||
children: [
|
|
||||||
////POSITIONS
|
////POSITIONS
|
||||||
StatefulBuilder(builder: (context, setState) {
|
StatefulBuilder(builder: (context, setState) {
|
||||||
return SearchField(
|
return SearchField(
|
||||||
|
@ -93,8 +100,8 @@ class _AddWorkHistoryScreenState extends State<AddWorkHistoryScreen> {
|
||||||
itemHeight: 70,
|
itemHeight: 70,
|
||||||
suggestionsDecoration: box1(),
|
suggestionsDecoration: box1(),
|
||||||
suggestions: state.agencyPositions
|
suggestions: state.agencyPositions
|
||||||
.map((PositionTitle position) => SearchFieldListItem(
|
.map((PositionTitle position) =>
|
||||||
position.title!,
|
SearchFieldListItem(position.title!,
|
||||||
item: position,
|
item: position,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.symmetric(
|
padding: const EdgeInsets.symmetric(
|
||||||
|
@ -127,7 +134,8 @@ class _AddWorkHistoryScreenState extends State<AddWorkHistoryScreen> {
|
||||||
controller: addPositionController,
|
controller: addPositionController,
|
||||||
onpressed: () {
|
onpressed: () {
|
||||||
setState(() {
|
setState(() {
|
||||||
PositionTitle newAgencyPosition = PositionTitle(
|
PositionTitle newAgencyPosition =
|
||||||
|
PositionTitle(
|
||||||
id: null,
|
id: null,
|
||||||
title: addPositionController.text
|
title: addPositionController.text
|
||||||
.toUpperCase());
|
.toUpperCase());
|
||||||
|
@ -476,8 +484,24 @@ class _AddWorkHistoryScreenState extends State<AddWorkHistoryScreen> {
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
height: 12,
|
height: 12,
|
||||||
),
|
),
|
||||||
////MONTHLY SALARY
|
//// NAME OF OFFICE UNIT
|
||||||
FormBuilderTextField(
|
FormBuilderTextField(
|
||||||
|
onChanged: (value){
|
||||||
|
sOffice = value;
|
||||||
|
},
|
||||||
|
validator: FormBuilderValidators.required(
|
||||||
|
errorText: "This field is required"),
|
||||||
|
name: 'office',
|
||||||
|
decoration: normalTextFieldStyle(
|
||||||
|
"Name of Office/Unit", "Name of Office/Unit"),
|
||||||
|
),
|
||||||
|
const SizedBox(
|
||||||
|
height: 12,
|
||||||
|
),
|
||||||
|
|
||||||
|
////MONTHLY SALARY
|
||||||
|
StatefulBuilder(builder: (context, setState) {
|
||||||
|
return FormBuilderTextField(
|
||||||
keyboardType: TextInputType.number,
|
keyboardType: TextInputType.number,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
setState(() {
|
setState(() {
|
||||||
|
@ -489,6 +513,49 @@ class _AddWorkHistoryScreenState extends State<AddWorkHistoryScreen> {
|
||||||
decoration:
|
decoration:
|
||||||
normalTextFieldStyle("Monthly Salary *", "")
|
normalTextFieldStyle("Monthly Salary *", "")
|
||||||
.copyWith(prefix: const Text("₱ ")),
|
.copyWith(prefix: const Text("₱ ")),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
const SizedBox(
|
||||||
|
height: 12,
|
||||||
|
),
|
||||||
|
const Text("Immediate SuperVisor"),
|
||||||
|
const SizedBox(
|
||||||
|
height: 12,
|
||||||
|
),
|
||||||
|
////IMMEDIATE SUPERVISOR
|
||||||
|
FormBuilderTextField(
|
||||||
|
onChanged: (value){
|
||||||
|
sFname = value;
|
||||||
|
},
|
||||||
|
validator: FormBuilderValidators.required(
|
||||||
|
errorText: "This field is required"),
|
||||||
|
name: 'supervisor_firstname',
|
||||||
|
decoration:
|
||||||
|
normalTextFieldStyle("First name", "First Name"),
|
||||||
|
),
|
||||||
|
const SizedBox(
|
||||||
|
height: 12,
|
||||||
|
),
|
||||||
|
FormBuilderTextField(
|
||||||
|
onChanged: (value){
|
||||||
|
sMname = value;
|
||||||
|
},
|
||||||
|
name: 'supervisor_middlename',
|
||||||
|
decoration: normalTextFieldStyle(
|
||||||
|
"Middle name", "Middle Name"),
|
||||||
|
),
|
||||||
|
const SizedBox(
|
||||||
|
height: 12,
|
||||||
|
),
|
||||||
|
FormBuilderTextField(
|
||||||
|
onChanged: (value){
|
||||||
|
sLname = value;
|
||||||
|
},
|
||||||
|
validator: FormBuilderValidators.required(
|
||||||
|
errorText: "This field is required"),
|
||||||
|
name: 'supervisor_lastname',
|
||||||
|
decoration:
|
||||||
|
normalTextFieldStyle("Last name", "Last Name"),
|
||||||
),
|
),
|
||||||
|
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
|
@ -597,8 +664,7 @@ class _AddWorkHistoryScreenState extends State<AddWorkHistoryScreen> {
|
||||||
},
|
},
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
setState(() {
|
setState(() {
|
||||||
to =
|
to = DateTime.parse(value);
|
||||||
DateTime.parse(value);
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
initialDate: from == null
|
initialDate: from == null
|
||||||
|
@ -624,8 +690,40 @@ class _AddWorkHistoryScreenState extends State<AddWorkHistoryScreen> {
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
],
|
|
||||||
|
const Text("Work Experience"),
|
||||||
|
const SizedBox(
|
||||||
|
height: 8,
|
||||||
),
|
),
|
||||||
|
FormBuilderTextField(
|
||||||
|
onChanged: (value){
|
||||||
|
accomplishment = value;
|
||||||
|
},
|
||||||
|
name: "accomplishment",
|
||||||
|
decoration: normalTextFieldStyle(
|
||||||
|
"List of Accomplishment and Contribution",
|
||||||
|
"",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(
|
||||||
|
height: 12,
|
||||||
|
),
|
||||||
|
FormBuilderTextField(
|
||||||
|
onChanged: (value){
|
||||||
|
duties = value;
|
||||||
|
},
|
||||||
|
validator: FormBuilderValidators.required(
|
||||||
|
errorText: "This field is required"),
|
||||||
|
name: "summary",
|
||||||
|
decoration: normalTextFieldStyle(
|
||||||
|
"Summary of Actual Duties",
|
||||||
|
"",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
const SizedBox(
|
||||||
|
height: 20,
|
||||||
),
|
),
|
||||||
////SUBMIT BUTTON
|
////SUBMIT BUTTON
|
||||||
SizedBox(
|
SizedBox(
|
||||||
|
@ -635,11 +733,24 @@ class _AddWorkHistoryScreenState extends State<AddWorkHistoryScreen> {
|
||||||
style:
|
style:
|
||||||
mainBtnStyle(primary, Colors.transparent, second),
|
mainBtnStyle(primary, Colors.transparent, second),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
print(selectedStatus?.value);
|
print(salaryGrade);
|
||||||
|
print(salaryGradeStep);
|
||||||
|
|
||||||
if (_formKey.currentState!.validate()) {
|
if (_formKey.currentState!.validate()) {
|
||||||
final progress = ProgressHUD.of(context);
|
final progress = ProgressHUD.of(context);
|
||||||
progress!.showWithText("Loading...");
|
progress!.showWithText("Loading...");
|
||||||
|
|
||||||
WorkHistory workHistory = WorkHistory(
|
WorkHistory workHistory = WorkHistory(
|
||||||
|
accomplishment: null,
|
||||||
|
actualDuties: null,
|
||||||
|
agencydepid: null,
|
||||||
|
supervisor: Supervisor(
|
||||||
|
agencyId: selectedAgency?.id,
|
||||||
|
id: null,
|
||||||
|
lastname: sLname,
|
||||||
|
firstname: sFname,
|
||||||
|
middlename: sMname,
|
||||||
|
stationName: sOffice),
|
||||||
position: selectedPosition,
|
position: selectedPosition,
|
||||||
id: null,
|
id: null,
|
||||||
agency: selectedAgency,
|
agency: selectedAgency,
|
||||||
|
@ -651,15 +762,17 @@ class _AddWorkHistoryScreenState extends State<AddWorkHistoryScreen> {
|
||||||
"PRESENT"
|
"PRESENT"
|
||||||
? null
|
? null
|
||||||
: DateTime.parse(toDateController.text),
|
: DateTime.parse(toDateController.text),
|
||||||
salaryGrade: salaryGrade == null
|
salarygrade: salaryGrade == null
|
||||||
? null
|
? null
|
||||||
: int.parse(salaryGrade!),
|
: int.parse(salaryGrade!),
|
||||||
sgStep: salaryGradeStep == null
|
sgstep: salaryGradeStep == null
|
||||||
? null
|
? null
|
||||||
: int.parse(salaryGradeStep!),
|
: int.parse(salaryGradeStep!),
|
||||||
monthlySalary: double.parse(salary!),
|
monthlysalary: double.parse(salary!),
|
||||||
appointmentStatus: selectedStatus!.value);
|
statusAppointment: selectedStatus!.value);
|
||||||
context.read<WorkHistoryBloc>().add(AddWorkHostory(
|
context.read<WorkHistoryBloc>().add(AddWorkHostory(
|
||||||
|
accomplishment: accomplishment,
|
||||||
|
actualDuties: duties,
|
||||||
workHistory: workHistory,
|
workHistory: workHistory,
|
||||||
profileId: widget.profileId,
|
profileId: widget.profileId,
|
||||||
token: widget.token,
|
token: widget.token,
|
||||||
|
|
|
@ -81,7 +81,7 @@ class _EditWorkHistoryScreenState extends State<EditWorkHistoryScreen> {
|
||||||
if (state is EditWorkHistoryState) {
|
if (state is EditWorkHistoryState) {
|
||||||
oldPositionController.text = state.workHistory.position!.title!;
|
oldPositionController.text = state.workHistory.position!.title!;
|
||||||
oldAppointmentStatusController.text =
|
oldAppointmentStatusController.text =
|
||||||
state.workHistory.appointmentStatus!;
|
state.workHistory.statusAppointment!;
|
||||||
oldAgencyController.text = state.workHistory.agency!.name!;
|
oldAgencyController.text = state.workHistory.agency!.name!;
|
||||||
currentlyEmployed = state.workHistory.toDate == null ? true : false;
|
currentlyEmployed = state.workHistory.toDate == null ? true : false;
|
||||||
showSalaryGradeAndSalaryStep =
|
showSalaryGradeAndSalaryStep =
|
||||||
|
@ -428,7 +428,7 @@ class _EditWorkHistoryScreenState extends State<EditWorkHistoryScreen> {
|
||||||
child: FormBuilderTextField(
|
child: FormBuilderTextField(
|
||||||
initialValue: state
|
initialValue: state
|
||||||
.workHistory
|
.workHistory
|
||||||
.salaryGrade
|
.salarygrade
|
||||||
?.toString(),
|
?.toString(),
|
||||||
name: 'salary_grade',
|
name: 'salary_grade',
|
||||||
keyboardType:
|
keyboardType:
|
||||||
|
@ -452,7 +452,7 @@ class _EditWorkHistoryScreenState extends State<EditWorkHistoryScreen> {
|
||||||
flex: 1,
|
flex: 1,
|
||||||
child: FormBuilderTextField(
|
child: FormBuilderTextField(
|
||||||
initialValue: state
|
initialValue: state
|
||||||
.workHistory.sgStep
|
.workHistory.sgstep
|
||||||
?.toString(),
|
?.toString(),
|
||||||
name: 'salary_step',
|
name: 'salary_step',
|
||||||
keyboardType:
|
keyboardType:
|
||||||
|
@ -482,7 +482,7 @@ class _EditWorkHistoryScreenState extends State<EditWorkHistoryScreen> {
|
||||||
////MONTHLY SALARY
|
////MONTHLY SALARY
|
||||||
FormBuilderTextField(
|
FormBuilderTextField(
|
||||||
initialValue:
|
initialValue:
|
||||||
state.workHistory.monthlySalary.toString(),
|
state.workHistory.monthlysalary.toString(),
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
setState(() {
|
setState(() {
|
||||||
salary = value;
|
salary = value;
|
||||||
|
@ -654,50 +654,50 @@ class _EditWorkHistoryScreenState extends State<EditWorkHistoryScreen> {
|
||||||
style:
|
style:
|
||||||
mainBtnStyle(primary, Colors.transparent, second),
|
mainBtnStyle(primary, Colors.transparent, second),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
if (_formKey.currentState!.saveAndValidate()) {
|
// if (_formKey.currentState!.saveAndValidate()) {
|
||||||
final progress = ProgressHUD.of(context);
|
// final progress = ProgressHUD.of(context);
|
||||||
progress!.showWithText("Loading...");
|
// progress!.showWithText("Loading...");
|
||||||
salary = _formKey.currentState!.value['salary'];
|
// salary = _formKey.currentState!.value['salary'];
|
||||||
selectedPosition ??= state.workHistory.position;
|
// selectedPosition ??= state.workHistory.position;
|
||||||
salaryGrade =
|
// salaryGrade =
|
||||||
_formKey.currentState!.value['salary_grade'];
|
// _formKey.currentState!.value['salary_grade'];
|
||||||
salaryGradeStep =
|
// salaryGradeStep =
|
||||||
_formKey.currentState!.value['salary_step'];
|
// _formKey.currentState!.value['salary_step'];
|
||||||
selectedAgency ??= state.workHistory.agency;
|
// selectedAgency ??= state.workHistory.agency;
|
||||||
|
|
||||||
selectedStatus ??= AppoinemtStatus(
|
// selectedStatus ??= AppoinemtStatus(
|
||||||
value: state.workHistory.appointmentStatus!,
|
// value: state.workHistory.statusAppointment!,
|
||||||
label: state.workHistory.appointmentStatus!);
|
// label: state.workHistory.statusAppointment!);
|
||||||
WorkHistory newWorkHistory = WorkHistory(
|
// WorkHistory newWorkHistory = WorkHistory(
|
||||||
id: state.workHistory.id,
|
// id: state.workHistory.id,
|
||||||
position: selectedPosition,
|
// position: selectedPosition,
|
||||||
agency: selectedAgency,
|
// agency: selectedAgency,
|
||||||
fromDate: fromDateController.text.isEmpty
|
// fromDate: fromDateController.text.isEmpty
|
||||||
? null
|
// ? null
|
||||||
: DateTime.parse(fromDateController.text),
|
// : DateTime.parse(fromDateController.text),
|
||||||
toDate: toDateController.text.isEmpty ||
|
// toDate: toDateController.text.isEmpty ||
|
||||||
toDateController.text.toUpperCase() ==
|
// toDateController.text.toUpperCase() ==
|
||||||
"PRESENT" ||
|
// "PRESENT" ||
|
||||||
toDateController.text.toLowerCase() ==
|
// toDateController.text.toLowerCase() ==
|
||||||
'null'
|
// 'null'
|
||||||
? null
|
// ? null
|
||||||
: DateTime.parse(toDateController.text),
|
// : DateTime.parse(toDateController.text),
|
||||||
monthlySalary: double.parse(salary!),
|
// monthlySalary: double.parse(salary!),
|
||||||
appointmentStatus: selectedStatus!.value,
|
// appointmentStatus: selectedStatus!.value,
|
||||||
salaryGrade: salaryGrade == null
|
// salaryGrade: salaryGrade == null
|
||||||
? null
|
// ? null
|
||||||
: int.parse(salaryGrade!),
|
// : int.parse(salaryGrade!),
|
||||||
sgStep: salaryGradeStep == null
|
// sgStep: salaryGradeStep == null
|
||||||
? null
|
// ? null
|
||||||
: int.parse(salaryGradeStep!),
|
// : int.parse(salaryGradeStep!),
|
||||||
);
|
// );
|
||||||
context.read<WorkHistoryBloc>().add(
|
// context.read<WorkHistoryBloc>().add(
|
||||||
UpdateWorkHistory(
|
// UpdateWorkHistory(
|
||||||
oldWorkHistory: state.workHistory,
|
// oldWorkHistory: state.workHistory,
|
||||||
profileId: widget.profileId.toString(),
|
// profileId: widget.profileId.toString(),
|
||||||
token: widget.token,
|
// token: widget.token,
|
||||||
workHistory: newWorkHistory));
|
// workHistory: newWorkHistory));
|
||||||
}
|
// }
|
||||||
},
|
},
|
||||||
child: const Text(submit)),
|
child: const Text(submit)),
|
||||||
),
|
),
|
||||||
|
|
|
@ -44,7 +44,7 @@ class WorkHistoryScreen extends StatelessWidget {
|
||||||
AttachmentCategory? selectedAttachmentCategory;
|
AttachmentCategory? selectedAttachmentCategory;
|
||||||
List<AttachmentCategory> attachmentCategories = [];
|
List<AttachmentCategory> attachmentCategories = [];
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
resizeToAvoidBottomInset: false,
|
resizeToAvoidBottomInset: true,
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: context.watch<WorkHistoryBloc>().state is AddWorkHistoryState
|
title: context.watch<WorkHistoryBloc>().state is AddWorkHistoryState
|
||||||
? const FittedBox(child: Text("Add Work History"))
|
? const FittedBox(child: Text("Add Work History"))
|
||||||
|
@ -623,87 +623,87 @@ class WorkHistoryScreen extends StatelessWidget {
|
||||||
]),
|
]),
|
||||||
const Divider(),
|
const Divider(),
|
||||||
////Show Attachments
|
////Show Attachments
|
||||||
SizedBox(
|
// SizedBox(
|
||||||
child: state
|
// child: state
|
||||||
.workExperiences[
|
// .workExperiences[
|
||||||
index]
|
// index]
|
||||||
.attachments ==
|
// .attachments ==
|
||||||
null ||
|
// null ||
|
||||||
state
|
// state
|
||||||
.workExperiences[
|
// .workExperiences[
|
||||||
index]
|
// index]
|
||||||
.attachments!
|
// .attachments!
|
||||||
.isEmpty
|
// .isEmpty
|
||||||
? const SizedBox()
|
// ? const SizedBox()
|
||||||
: state
|
// : state
|
||||||
.workExperiences[
|
// .workExperiences[
|
||||||
index]
|
// index]
|
||||||
.attachments !=
|
// .attachments !=
|
||||||
null &&
|
// null &&
|
||||||
state
|
// state
|
||||||
.workExperiences[
|
// .workExperiences[
|
||||||
index]
|
// index]
|
||||||
.attachments!
|
// .attachments!
|
||||||
.length ==
|
// .length ==
|
||||||
1
|
// 1
|
||||||
?
|
// ?
|
||||||
////Single Attachment view
|
// ////Single Attachment view
|
||||||
SingleAttachment(
|
// SingleAttachment(
|
||||||
onpressed: () {
|
// onpressed: () {
|
||||||
confirmAlert(
|
// confirmAlert(
|
||||||
context,
|
// context,
|
||||||
() {
|
// () {
|
||||||
parent.read<WorkHistoryBloc>().add(DeleteWorkHistoryAttachment(
|
// parent.read<WorkHistoryBloc>().add(DeleteWorkHistoryAttachment(
|
||||||
attachment: state
|
// attachment: state
|
||||||
.workExperiences[
|
// .workExperiences[
|
||||||
index]
|
// index]
|
||||||
.attachments!
|
// .attachments!
|
||||||
.first,
|
// .first,
|
||||||
moduleId: state
|
// moduleId: state
|
||||||
.workExperiences[
|
// .workExperiences[
|
||||||
index]
|
// index]
|
||||||
.id!,
|
// .id!,
|
||||||
profileId:
|
// profileId:
|
||||||
profileId!,
|
// profileId!,
|
||||||
token:
|
// token:
|
||||||
token!));
|
// token!));
|
||||||
}, "Delete?",
|
// }, "Delete?",
|
||||||
"Confirm Delete?");
|
// "Confirm Delete?");
|
||||||
},
|
// },
|
||||||
attachment: state
|
// attachment: state
|
||||||
.workExperiences[
|
// .workExperiences[
|
||||||
index]
|
// index]
|
||||||
.attachments!
|
// .attachments!
|
||||||
.first,
|
// .first,
|
||||||
)
|
// )
|
||||||
////Multiple Attachments View
|
// ////Multiple Attachments View
|
||||||
: MultipleAttachments(
|
// : MultipleAttachments(
|
||||||
profileId:
|
// profileId:
|
||||||
profileId!,
|
// profileId!,
|
||||||
token: token!,
|
// token: token!,
|
||||||
moduleId: state
|
// moduleId: state
|
||||||
.workExperiences[
|
// .workExperiences[
|
||||||
index]
|
// index]
|
||||||
.id!,
|
// .id!,
|
||||||
educationBloc:
|
// educationBloc:
|
||||||
null,
|
// null,
|
||||||
workHistoryBloc:
|
// workHistoryBloc:
|
||||||
BlocProvider.of<WorkHistoryBloc>(context),
|
// BlocProvider.of<WorkHistoryBloc>(context),
|
||||||
eligibilityBloc:
|
// eligibilityBloc:
|
||||||
null,
|
// null,
|
||||||
learningDevelopmentBloc:
|
// learningDevelopmentBloc:
|
||||||
null,
|
// null,
|
||||||
blocId: 3,
|
// blocId: 3,
|
||||||
eligibilityName: state
|
// eligibilityName: state
|
||||||
.workExperiences[
|
// .workExperiences[
|
||||||
index]
|
// index]
|
||||||
.position!
|
// .position!
|
||||||
.title!,
|
// .title!,
|
||||||
attachments: state
|
// attachments: state
|
||||||
.workExperiences[
|
// .workExperiences[
|
||||||
index]
|
// index]
|
||||||
.attachments!,
|
// .attachments!,
|
||||||
))
|
// ))
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
@ -7,6 +7,7 @@ import 'package:unit2/bloc/profile/education/education_bloc.dart';
|
||||||
import 'package:unit2/bloc/profile/eligibility/eligibility_bloc.dart';
|
import 'package:unit2/bloc/profile/eligibility/eligibility_bloc.dart';
|
||||||
import 'package:unit2/bloc/profile/learningDevelopment/learning_development_bloc.dart';
|
import 'package:unit2/bloc/profile/learningDevelopment/learning_development_bloc.dart';
|
||||||
import 'package:unit2/bloc/profile/workHistory/workHistory_bloc.dart';
|
import 'package:unit2/bloc/profile/workHistory/workHistory_bloc.dart';
|
||||||
|
import 'package:unit2/screens/profile/shared/view_attachment.dart';
|
||||||
import 'package:unit2/utils/global_context.dart';
|
import 'package:unit2/utils/global_context.dart';
|
||||||
|
|
||||||
import '../../../model/profile/attachment.dart';
|
import '../../../model/profile/attachment.dart';
|
||||||
|
@ -16,6 +17,7 @@ import '../../../utils/alerts.dart';
|
||||||
import '../../../utils/global.dart';
|
import '../../../utils/global.dart';
|
||||||
|
|
||||||
class MultipleAttachments extends StatelessWidget {
|
class MultipleAttachments extends StatelessWidget {
|
||||||
|
final Function(String source, String fileName) viewAttachment;
|
||||||
final List<Attachment> attachments;
|
final List<Attachment> attachments;
|
||||||
final String eligibilityName;
|
final String eligibilityName;
|
||||||
final EducationBloc? educationBloc;
|
final EducationBloc? educationBloc;
|
||||||
|
@ -28,6 +30,7 @@ class MultipleAttachments extends StatelessWidget {
|
||||||
final String token;
|
final String token;
|
||||||
const MultipleAttachments(
|
const MultipleAttachments(
|
||||||
{super.key,
|
{super.key,
|
||||||
|
required this.viewAttachment,
|
||||||
required this.blocId,
|
required this.blocId,
|
||||||
required this.educationBloc,
|
required this.educationBloc,
|
||||||
required this.eligibilityBloc,
|
required this.eligibilityBloc,
|
||||||
|
@ -128,9 +131,14 @@ class MultipleAttachments extends StatelessWidget {
|
||||||
flex: 4,
|
flex: 4,
|
||||||
child: Tooltip(
|
child: Tooltip(
|
||||||
message: e.filename,
|
message: e.filename,
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: (){
|
||||||
|
viewAttachment(e.source!,e.filename!);
|
||||||
|
},
|
||||||
child: Text(
|
child: Text(
|
||||||
e.filename!,
|
e.filename!,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
|
),
|
||||||
)),
|
)),
|
||||||
),
|
),
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
|
|
|
@ -10,9 +10,11 @@ import '../../../utils/alerts.dart';
|
||||||
class SingleAttachment extends StatelessWidget {
|
class SingleAttachment extends StatelessWidget {
|
||||||
final Function()? onpressed;
|
final Function()? onpressed;
|
||||||
final Attachment attachment;
|
final Attachment attachment;
|
||||||
|
final Function()? view;
|
||||||
const SingleAttachment({
|
const SingleAttachment({
|
||||||
required this.attachment,
|
required this.attachment,
|
||||||
required this.onpressed,
|
required this.onpressed,
|
||||||
|
required this.view,
|
||||||
super.key,
|
super.key,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -32,12 +34,15 @@ class SingleAttachment extends StatelessWidget {
|
||||||
children: [
|
children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
child:
|
child:
|
||||||
AutoSizeText(
|
GestureDetector(
|
||||||
|
onTap: view,
|
||||||
|
child: AutoSizeText(
|
||||||
attachment.filename!,
|
attachment.filename!,
|
||||||
wrapWords: false,
|
wrapWords: false,
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
width:
|
width:
|
||||||
8,
|
8,
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart';
|
||||||
|
import 'package:unit2/theme-data.dart/colors.dart';
|
||||||
|
import 'package:unit2/widgets/error_state.dart';
|
||||||
|
|
||||||
|
import '../../../utils/urls.dart';
|
||||||
|
|
||||||
|
class ImageAttachment extends StatefulWidget {
|
||||||
|
final String imgUrl;
|
||||||
|
const ImageAttachment({super.key, required this.imgUrl});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<ImageAttachment> createState() => _ImageAttachmentState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ImageAttachmentState extends State<ImageAttachment> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
bool isPDF = widget.imgUrl[widget.imgUrl.length - 1] == 'f' ? true : false;
|
||||||
|
|
||||||
|
return Scaffold(
|
||||||
|
floatingActionButton: FloatingActionButton(
|
||||||
|
onPressed: () {},
|
||||||
|
child: const Icon(Icons.file_download),
|
||||||
|
),
|
||||||
|
appBar: AppBar(
|
||||||
|
title: const Text("Attachment"),
|
||||||
|
centerTitle: true,
|
||||||
|
actions: [
|
||||||
|
IconButton(onPressed: () {}, icon: const Icon(Icons.share)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
body: isPDF
|
||||||
|
? SfPdfViewer.network(
|
||||||
|
'${Url.instance.prefixHost()}://${Url.instance.host()}${widget.imgUrl}',onDocumentLoadFailed: (details) {
|
||||||
|
Center(child: Text(details.description),);
|
||||||
|
},)
|
||||||
|
: Center(
|
||||||
|
child: CachedNetworkImage(
|
||||||
|
progressIndicatorBuilder: (context, url, progress) {
|
||||||
|
return const SizedBox(
|
||||||
|
height: 100,
|
||||||
|
width: 100,
|
||||||
|
child: CircularProgressIndicator(color: primary,));
|
||||||
|
},
|
||||||
|
|
||||||
|
imageBuilder: (context, imageProvider) => Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
image: DecorationImage(
|
||||||
|
image: imageProvider, fit: BoxFit.fill)),
|
||||||
|
),
|
||||||
|
imageUrl:
|
||||||
|
'${Url.instance.prefixHost()}://${Url.instance.host()}${widget.imgUrl}',
|
||||||
|
width: double.infinity,
|
||||||
|
height: 220,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -32,6 +32,7 @@ class RbacRoleAssignment extends StatelessWidget {
|
||||||
List<ValueItem> selectedValueItemRoles = [];
|
List<ValueItem> selectedValueItemRoles = [];
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
|
elevation: 0,
|
||||||
centerTitle: true,
|
centerTitle: true,
|
||||||
backgroundColor: primary,
|
backgroundColor: primary,
|
||||||
title: const Text("User Roles Screenss"),
|
title: const Text("User Roles Screenss"),
|
||||||
|
|
|
@ -8,13 +8,10 @@ import 'package:unit2/screens/unit2/homepage.dart/components/dashboard/superadmi
|
||||||
import 'package:unit2/screens/unit2/homepage.dart/module-screen.dart';
|
import 'package:unit2/screens/unit2/homepage.dart/module-screen.dart';
|
||||||
import 'package:unit2/theme-data.dart/colors.dart';
|
import 'package:unit2/theme-data.dart/colors.dart';
|
||||||
import 'package:unit2/theme-data.dart/form-style.dart';
|
import 'package:unit2/theme-data.dart/form-style.dart';
|
||||||
import '../../../../../bloc/rbac/rbac_operations/agency/agency_bloc.dart';
|
|
||||||
import '../../../../../bloc/role/pass_check/est_point_person/assign_area/assign_area_agency_bloc.dart';
|
import '../../../../../bloc/role/pass_check/est_point_person/assign_area/assign_area_agency_bloc.dart';
|
||||||
import '../../../../../bloc/role/pass_check/est_point_person/est_point_person_assignable/est_point_person_assinable_role_bloc.dart';
|
import '../../../../../bloc/role/pass_check/est_point_person/est_point_person_assignable/est_point_person_assinable_role_bloc.dart';
|
||||||
import '../../../../../bloc/role/pass_check/est_point_person/est_point_person_role_assignment/est_role_assignment_bloc.dart';
|
import '../../../../../bloc/role/pass_check/est_point_person/est_point_person_role_assignment/est_role_assignment_bloc.dart';
|
||||||
import '../../../../../bloc/role/pass_check/est_point_person/est_point_person_station/est_point_person_station_bloc.dart';
|
import '../../../../../bloc/role/pass_check/est_point_person/est_point_person_station/est_point_person_station_bloc.dart';
|
||||||
import '../../../../../sevices/roles/est_point_person/est_point_person_role_assignment_services.dart';
|
|
||||||
import '../../../../superadmin/agency/agency_screen.dart';
|
|
||||||
import '../../../roles/establishment_point_person/est_point_person_agecies.dart';
|
import '../../../roles/establishment_point_person/est_point_person_agecies.dart';
|
||||||
import '../../../roles/establishment_point_person/est_point_person_role_member_screen.dart';
|
import '../../../roles/establishment_point_person/est_point_person_role_member_screen.dart';
|
||||||
import '../../../roles/establishment_point_person/est_point_person_role_under_screen.dart';
|
import '../../../roles/establishment_point_person/est_point_person_role_under_screen.dart';
|
||||||
|
@ -71,7 +68,9 @@ class _DashBoardState extends State<DashBoard> {
|
||||||
docSmsCards.add(e);
|
docSmsCards.add(e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
unit2Cards.forEach((element) {
|
||||||
|
print("${element.moduleName} - ${element.object.name!} - ${element.roleName} " );
|
||||||
|
});
|
||||||
if (superadminCards.length > 3) {
|
if (superadminCards.length > 3) {
|
||||||
tempSuperAdminCards = superadminCards.sublist(0, 4);
|
tempSuperAdminCards = superadminCards.sublist(0, 4);
|
||||||
}
|
}
|
||||||
|
@ -85,6 +84,7 @@ class _DashBoardState extends State<DashBoard> {
|
||||||
child: ListView(
|
child: ListView(
|
||||||
children: [
|
children: [
|
||||||
Column(
|
Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
////unit2 module operations
|
////unit2 module operations
|
||||||
|
@ -107,7 +107,7 @@ class _DashBoardState extends State<DashBoard> {
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
child: unit2Cards.isEmpty
|
child: unit2Cards.isEmpty
|
||||||
? const SizedBox()
|
? const SizedBox.shrink()
|
||||||
: GridView.count(
|
: GridView.count(
|
||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
crossAxisCount: 4,
|
crossAxisCount: 4,
|
||||||
|
@ -185,7 +185,7 @@ class _DashBoardState extends State<DashBoard> {
|
||||||
child:
|
child:
|
||||||
FadeInAnimation(
|
FadeInAnimation(
|
||||||
child: Container(
|
child: Container(
|
||||||
child: (e.roleName == 'superadmin' || e.roleName == 'qr code scanner' || e.roleName == 'security guard' || e.roleName == 'establishment point-person' || e.roleName == 'registration in-charge') && e.moduleName == 'unit2'
|
child: (e.roleName == 'qr code scanner' || e.roleName == 'security guard' || e.roleName == 'establishment point-person' || e.roleName == 'registration in-charge') && e.moduleName == 'unit2'
|
||||||
? CardLabel(
|
? CardLabel(
|
||||||
icon: iconGenerator(name: e.object.name!),
|
icon: iconGenerator(name: e.object.name!),
|
||||||
title: e.object.name!.toLowerCase() == 'role based access control'
|
title: e.object.name!.toLowerCase() == 'role based access control'
|
||||||
|
@ -195,7 +195,7 @@ class _DashBoardState extends State<DashBoard> {
|
||||||
: e.object.name!,
|
: e.object.name!,
|
||||||
ontap: () {
|
ontap: () {
|
||||||
if (e.object.name!.toLowerCase() == 'pass check') {
|
if (e.object.name!.toLowerCase() == 'pass check') {
|
||||||
PassCheckArguments passCheckArguments = PassCheckArguments(roleId: 10, userId: widget.userId);
|
PassCheckArguments passCheckArguments = PassCheckArguments(roleId: e.roleId, userId: widget.userId);
|
||||||
Navigator.pushNamed(context, '/pass-check', arguments: passCheckArguments);
|
Navigator.pushNamed(context, '/pass-check', arguments: passCheckArguments);
|
||||||
}
|
}
|
||||||
if (e.object.name!.toLowerCase() == 'role based access control') {
|
if (e.object.name!.toLowerCase() == 'role based access control') {
|
||||||
|
@ -213,16 +213,19 @@ class _DashBoardState extends State<DashBoard> {
|
||||||
Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) {
|
Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) {
|
||||||
return BlocProvider<EstRoleAssignmentBloc>(
|
return BlocProvider<EstRoleAssignmentBloc>(
|
||||||
create: (context) => EstRoleAssignmentBloc()..add(GetEstPointPersonRolesUnder(userId: widget.userId)),
|
create: (context) => EstRoleAssignmentBloc()..add(GetEstPointPersonRolesUnder(userId: widget.userId)),
|
||||||
child: EstPointPersonRoleAssignmentScreen(id: widget.userId,),
|
child: EstPointPersonRoleAssignmentScreen(
|
||||||
|
id: widget.userId,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
if (e.object.name!.toLowerCase() == 'assignable role') {
|
if (e.object.name!.toLowerCase() == 'assignable role') {
|
||||||
|
|
||||||
Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) {
|
Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) {
|
||||||
return BlocProvider<EstPointPersonAssinableRoleBloc>(
|
return BlocProvider<EstPointPersonAssinableRoleBloc>(
|
||||||
create: (context) => EstPointPersonAssinableRoleBloc()..add(const GetEstPointPersonAssignableRoles(roleId: 16)),
|
create: (context) => EstPointPersonAssinableRoleBloc()..add(const GetEstPointPersonAssignableRoles(roleId: 16)),
|
||||||
child: EstPointPersonRoleUnderScreen(id: widget.userId,),
|
child: EstPointPersonRoleUnderScreen(
|
||||||
|
id: widget.userId,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
@ -421,11 +424,11 @@ class _DashBoardState extends State<DashBoard> {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: unit2Cards.isEmpty ? 0 : 24,
|
height: superadminCards.isEmpty ? 0 : 24,
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
child: superadminCards.isEmpty
|
child: superadminCards.isEmpty
|
||||||
? const SizedBox()
|
? const SizedBox.shrink()
|
||||||
: Text(
|
: Text(
|
||||||
"Superadmin module operations",
|
"Superadmin module operations",
|
||||||
style: Theme.of(context)
|
style: Theme.of(context)
|
||||||
|
@ -442,7 +445,7 @@ class _DashBoardState extends State<DashBoard> {
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
child: superadminCards.isEmpty
|
child: superadminCards.isEmpty
|
||||||
? const SizedBox()
|
? const SizedBox.shrink()
|
||||||
: GridView.count(
|
: GridView.count(
|
||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
crossAxisCount: 4,
|
crossAxisCount: 4,
|
||||||
|
@ -602,12 +605,12 @@ class _DashBoardState extends State<DashBoard> {
|
||||||
columnCount: 4,
|
columnCount: 4,
|
||||||
));
|
));
|
||||||
}).toList())),
|
}).toList())),
|
||||||
const SizedBox(
|
SizedBox(
|
||||||
height: 24,
|
height: rpassCards.isEmpty?0: 24,
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
child: rpassCards.isEmpty
|
child: rpassCards.isEmpty
|
||||||
? const SizedBox()
|
? const SizedBox.shrink()
|
||||||
: Text(
|
: Text(
|
||||||
"RPAss module operations",
|
"RPAss module operations",
|
||||||
style: Theme.of(context)
|
style: Theme.of(context)
|
||||||
|
@ -624,7 +627,7 @@ class _DashBoardState extends State<DashBoard> {
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
child: rpassCards.isEmpty
|
child: rpassCards.isEmpty
|
||||||
? const SizedBox()
|
? const SizedBox.shrink()
|
||||||
: GridView.count(
|
: GridView.count(
|
||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
crossAxisCount: 4,
|
crossAxisCount: 4,
|
||||||
|
@ -649,12 +652,12 @@ class _DashBoardState extends State<DashBoard> {
|
||||||
}).toList(),
|
}).toList(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(
|
SizedBox(
|
||||||
height: 24,
|
height: docSmsCards.isEmpty?0: 24,
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
child: docSmsCards.isEmpty
|
child: docSmsCards.isEmpty
|
||||||
? const SizedBox()
|
? const SizedBox.shrink()
|
||||||
: Text(
|
: Text(
|
||||||
"DocSMS module operations",
|
"DocSMS module operations",
|
||||||
style: Theme.of(context)
|
style: Theme.of(context)
|
||||||
|
|
|
@ -77,7 +77,9 @@ class SuperAdminMenu extends StatelessWidget {
|
||||||
title:
|
title:
|
||||||
object.object.name!,
|
object.object.name!,
|
||||||
ontap: () {
|
ontap: () {
|
||||||
|
|
||||||
if (object.object.name == 'Role') {
|
if (object.object.name == 'Role') {
|
||||||
|
|
||||||
Navigator.push(context, MaterialPageRoute(
|
Navigator.push(context, MaterialPageRoute(
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
return BlocProvider(
|
return BlocProvider(
|
||||||
|
|
|
@ -43,6 +43,7 @@ class _MainScreenState extends State<MainScreen> {
|
||||||
for (var module in role.modules!) {
|
for (var module in role.modules!) {
|
||||||
for (var object in module!.objects!) {
|
for (var object in module!.objects!) {
|
||||||
DisplayCard newCard = DisplayCard(
|
DisplayCard newCard = DisplayCard(
|
||||||
|
roleId: role.id!,
|
||||||
moduleName: module.name!.toLowerCase(),
|
moduleName: module.name!.toLowerCase(),
|
||||||
object: object!,
|
object: object!,
|
||||||
roleName: role.name!.toLowerCase());
|
roleName: role.name!.toLowerCase());
|
||||||
|
@ -91,8 +92,9 @@ class DisplayCard {
|
||||||
final String roleName;
|
final String roleName;
|
||||||
final String moduleName;
|
final String moduleName;
|
||||||
final ModuleObject object;
|
final ModuleObject object;
|
||||||
|
final int roleId;
|
||||||
const DisplayCard(
|
const DisplayCard(
|
||||||
{required this.moduleName, required this.object, required this.roleName});
|
{required this.moduleName, required this.object, required this.roleName,required this.roleId});
|
||||||
}
|
}
|
||||||
|
|
||||||
class Module {
|
class Module {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
import 'package:unit2/model/profile/work_history.dart';
|
import 'package:unit2/model/profile/work_history.dart';
|
||||||
import 'package:http/http.dart' as http;
|
import 'package:http/http.dart' as http;
|
||||||
import 'package:unit2/model/utils/agency_position.dart';
|
import 'package:unit2/model/utils/agency_position.dart';
|
||||||
|
@ -48,17 +49,17 @@ class WorkHistoryService {
|
||||||
bool? success;
|
bool? success;
|
||||||
Map<String, dynamic> params = {"force_mode": "true"};
|
Map<String, dynamic> params = {"force_mode": "true"};
|
||||||
String authToken = "Token $token";
|
String authToken = "Token $token";
|
||||||
String path = "${Url.instance.workhistory()}$profileId/";
|
String path = "${Url.instance.deleteWorkHistory()}$profileId/";
|
||||||
Map body = {
|
Map body = {
|
||||||
"id": work.id,
|
"id": work.id,
|
||||||
"position_id": work.position!.id,
|
"position_id": work.position!.id,
|
||||||
"agency_id": work.agency!.id,
|
"agency_id": work.agency!.id,
|
||||||
"from_date": work.fromDate?.toString(),
|
"from_date": work.fromDate?.toString(),
|
||||||
"to_date": work.toDate?.toString(),
|
"to_date": work.toDate?.toString(),
|
||||||
"monthly_salary": work.monthlySalary,
|
// "monthly_salary": work.monthlysalary,
|
||||||
"appointment_status": work.appointmentStatus,
|
// "appointment_status": work.statusAppointment,
|
||||||
"salary_step": work.sgStep,
|
// "salary_step": work.sgstep,
|
||||||
"salary_grade": work.salaryGrade,
|
// "salary_grade": work.salarygrade,
|
||||||
};
|
};
|
||||||
Map<String, String> headers = {
|
Map<String, String> headers = {
|
||||||
'Content-Type': 'application/json; charset=UTF-8',
|
'Content-Type': 'application/json; charset=UTF-8',
|
||||||
|
@ -82,85 +83,212 @@ class WorkHistoryService {
|
||||||
|
|
||||||
|
|
||||||
////edit work history
|
////edit work history
|
||||||
Future<Map<dynamic,dynamic>> update({required WorkHistory oldWorkHistory, required WorkHistory newWorkHistory, required String token, required String profileId})async{
|
// Future<Map<dynamic,dynamic>> update({required WorkHistory oldWorkHistory, required WorkHistory newWorkHistory, required String token, required String profileId})async{
|
||||||
Map<dynamic, dynamic>? statusResponse={};
|
// Map<dynamic, dynamic>? statusResponse={};
|
||||||
String authtoken = "Token $token";
|
// String authtoken = "Token $token";
|
||||||
String path = '${Url.instance.workhistory()}$profileId/';
|
// String path = '${Url.instance.workhistory()}$profileId/';
|
||||||
Map<String, String> headers = {
|
// Map<String, String> headers = {
|
||||||
'Content-Type': 'application/json; charset=UTF-8',
|
// 'Content-Type': 'application/json; charset=UTF-8',
|
||||||
'Authorization': authtoken
|
// 'Authorization': authtoken
|
||||||
};
|
// };
|
||||||
Map body = {
|
// Map body = {
|
||||||
"id":newWorkHistory.id,
|
// "id":newWorkHistory.id,
|
||||||
"position_id":newWorkHistory.position!.id,
|
// "position_id":newWorkHistory.position!.id,
|
||||||
"agency_id":newWorkHistory.agency!.id,
|
// "agency_id":newWorkHistory.agency!.id,
|
||||||
"from_date":newWorkHistory.fromDate?.toString(),
|
// "from_date":newWorkHistory.fromDate?.toString(),
|
||||||
"to_date":newWorkHistory.toDate?.toString(),
|
// "to_date":newWorkHistory.toDate?.toString(),
|
||||||
"monthly_salary":newWorkHistory.monthlySalary,
|
// "monthly_salary":newWorkHistory.monthlysalary,
|
||||||
"appointment_status":newWorkHistory.appointmentStatus,
|
// "appointment_status":newWorkHistory.statusAppointment,
|
||||||
"salary_grade":newWorkHistory.salaryGrade,
|
// "salary_grade":newWorkHistory.salarygrade,
|
||||||
"sg_step":newWorkHistory.sgStep,
|
// "sg_step":newWorkHistory.sgstep,
|
||||||
"_positionName":newWorkHistory.position!.title!,
|
// "_positionName":newWorkHistory.position!.title!,
|
||||||
"_agencyName":newWorkHistory.agency!.name!,
|
// "_agencyName":newWorkHistory.agency!.name!,
|
||||||
"_agencyCatId":newWorkHistory.agency!.category!.id!,
|
// "_agencyCatId":newWorkHistory.agency!.category!.id!,
|
||||||
"_privateEntity":newWorkHistory.agency!.privateEntity,
|
// "_privateEntity":newWorkHistory.agency!.privateEntity,
|
||||||
"oldPosId":oldWorkHistory.position!.id,
|
// "oldPosId":oldWorkHistory.position!.id,
|
||||||
"_oldAgencyId":oldWorkHistory.agency!.id,
|
// "_oldAgencyId":oldWorkHistory.agency!.id,
|
||||||
"oldFromDate":oldWorkHistory.fromDate?.toString(),
|
// "oldFromDate":oldWorkHistory.fromDate?.toString(),
|
||||||
};
|
// };
|
||||||
try{
|
|
||||||
http.Response response = await Request.instance.putRequest(path: path, headers: headers, body: body, param: {});
|
|
||||||
if(response.statusCode == 200 ){
|
// try{
|
||||||
Map data = jsonDecode(response.body);
|
// http.Response response = await Request.instance.putRequest(path: path, headers: headers, body: body, param: {});
|
||||||
statusResponse = data;
|
// if(response.statusCode == 200 ){
|
||||||
}else{
|
// Map data = jsonDecode(response.body);
|
||||||
statusResponse.addAll({'success':false});
|
// statusResponse = data;
|
||||||
}
|
// }else{
|
||||||
return statusResponse;
|
// statusResponse.addAll({'success':false});
|
||||||
}catch(e){
|
// }
|
||||||
throw e.toString();
|
// return statusResponse;
|
||||||
}
|
// }catch(e){
|
||||||
}
|
// throw e.toString();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////Add work history
|
////Add work history
|
||||||
Future<Map<dynamic, dynamic>>add({required WorkHistory workHistory, required String token, required int profileId , required bool isPrivate})async{
|
Future<Map<dynamic, dynamic>>add({required WorkHistory workHistory, required String token, required int profileId , required bool isPrivate,required String? accomplishment, required String? actualDuties})async{
|
||||||
String authtoken = "Token $token";
|
String authtoken = "Token $token";
|
||||||
String path = '${Url.instance.workhistory()}$profileId/';
|
String path = '${Url.instance.workhistory()}$profileId/';
|
||||||
Map<String, String> headers = {
|
Map<String, String> headers = {
|
||||||
'Content-Type': 'application/json; charset=UTF-8',
|
'Content-Type': 'application/json; charset=UTF-8',
|
||||||
'Authorization': authtoken
|
'Authorization': authtoken
|
||||||
};
|
};
|
||||||
|
Map<String,String> body = {};
|
||||||
Map<dynamic,dynamic> statusResponse = {};
|
Map<dynamic,dynamic> statusResponse = {};
|
||||||
Map body = {
|
String fromDate = DateFormat('yyyy-MM-dd').format(workHistory.fromDate!);
|
||||||
'position_id':workHistory.position?.id,
|
String? toDate;
|
||||||
'agency_id': workHistory.agency?.id,
|
if(workHistory.toDate != null){
|
||||||
'from_date': workHistory.fromDate?.toString(),
|
toDate = DateFormat('yyyy-MM-dd').format(workHistory.toDate!);
|
||||||
'to_date': workHistory.toDate?.toString(),
|
}
|
||||||
'monthly_salary': workHistory.monthlySalary,
|
if(workHistory.toDate == null){
|
||||||
'appointment_status': workHistory.appointmentStatus,
|
body = {
|
||||||
'salary_grade': workHistory.salaryGrade,
|
"a_category_id ": workHistory.agency?.category?.id == null? "":workHistory.agency!.category!.id.toString(),
|
||||||
'sg_step':workHistory.sgStep,
|
"a_name" : workHistory.agency?.name == null? "":workHistory.agency!.name!,
|
||||||
'_positionName':workHistory.position?.title,
|
" a_private_entity ": workHistory.agency?.privateEntity == null?"":workHistory.agency!.privateEntity.toString(),
|
||||||
'_agencyName':workHistory.agency?.name,
|
"accomplishment" : accomplishment??"",
|
||||||
'_agencyCatId':workHistory.agency?.category?.id,
|
"actual_duties ": actualDuties!,
|
||||||
'_privateEntity':workHistory.agency?.privateEntity,
|
"agency_id" : workHistory.agency?.id == null?"": workHistory.agency!.id.toString() ,
|
||||||
};
|
"from_date" : fromDate,
|
||||||
try{
|
"monthly_salary" : workHistory.monthlysalary == null? "": workHistory.monthlysalary.toString(),
|
||||||
http.Response response = await Request.instance.postRequest(path: path,param: {},body: body,headers: headers);
|
"position_id" : workHistory.position?.id == null? "": workHistory.position!.id.toString(),
|
||||||
if(response.statusCode == 201){
|
"position_name" : workHistory.position?.title == null? "":workHistory.position!.title!,
|
||||||
Map data = jsonDecode(response.body);
|
"s_fname" : workHistory.supervisor?.firstname == null?"":workHistory.supervisor!.firstname!,
|
||||||
statusResponse = data;
|
"s_lname" : workHistory.supervisor?.lastname == null? "":workHistory.supervisor!.lastname!,
|
||||||
|
"s_mname" : workHistory.supervisor?.middlename == null?"":workHistory.supervisor!.middlename!,
|
||||||
}else{
|
"s_office" : workHistory.supervisor?.stationName == null?"":workHistory.supervisor!.stationName!,
|
||||||
statusResponse.addAll({'success':false});
|
"salary_grade" : workHistory.salarygrade == null? "":workHistory.salarygrade.toString(),
|
||||||
|
"sg_step" : workHistory.sgstep == null?"":workHistory.sgstep.toString() ,
|
||||||
|
'status_appointment' : workHistory.statusAppointment??"",
|
||||||
|
};
|
||||||
|
}else{
|
||||||
|
body = {
|
||||||
|
"a_category_id ": workHistory.agency?.category?.id == null? "":workHistory.agency!.category!.id.toString(),
|
||||||
|
"a_name" : workHistory.agency?.name == null? "":workHistory.agency!.name!,
|
||||||
|
" a_private_entity ": workHistory.agency?.privateEntity == null?"":workHistory.agency!.privateEntity.toString(),
|
||||||
|
"accomplishment" : accomplishment??"",
|
||||||
|
"actual_duties ": actualDuties!,
|
||||||
|
"agency_id" : workHistory.agency?.id == null?"": workHistory.agency!.id.toString() ,
|
||||||
|
"from_date" : workHistory.fromDate == null? "2018-10-04":"2018-06-04",
|
||||||
|
"monthly_salary" : workHistory.monthlysalary == null? "": workHistory.monthlysalary.toString(),
|
||||||
|
"position_id" : workHistory.position?.id == null? "": workHistory.position!.id.toString(),
|
||||||
|
"position_name" : workHistory.position?.title == null? "":workHistory.position!.title!,
|
||||||
|
"s_fname" : workHistory.supervisor?.firstname == null?"":workHistory.supervisor!.firstname!,
|
||||||
|
"s_lname" : workHistory.supervisor?.lastname == null? "":workHistory.supervisor!.lastname!,
|
||||||
|
"s_mname" : workHistory.supervisor?.middlename == null?"":workHistory.supervisor!.middlename!,
|
||||||
|
"s_office" : workHistory.supervisor?.stationName == null?"":workHistory.supervisor!.stationName!,
|
||||||
|
"salary_grade" : workHistory.salarygrade == null? "":workHistory.salarygrade.toString(),
|
||||||
|
"sg_step" : workHistory.sgstep == null?"":workHistory.sgstep.toString() ,
|
||||||
|
'status_appointment' : workHistory.statusAppointment??"",
|
||||||
|
"to_date" : toDate!,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var request = http.MultipartRequest('POST',Uri.parse('${Url.instance.prefixHost()}://${Url.instance.host()}$path'));
|
||||||
|
request.fields.addAll(body);
|
||||||
|
request.headers.addAll(headers);
|
||||||
|
try {
|
||||||
|
http.StreamedResponse response = await request.send();
|
||||||
|
final steamResponse = await response.stream.bytesToString();
|
||||||
|
Map data = jsonDecode(steamResponse);
|
||||||
|
if (response.statusCode == 201) {
|
||||||
|
statusResponse = data;
|
||||||
|
} else {
|
||||||
|
String message = data['response']['details'];
|
||||||
|
statusResponse.addAll({'message': message});
|
||||||
|
statusResponse.addAll(
|
||||||
|
{'success': false},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return statusResponse;
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw e.toString();
|
throw e.toString();
|
||||||
}
|
}
|
||||||
|
return statusResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<Map<dynamic, dynamic>>update({required WorkHistory workHistory, required String token, required int profileId , required bool isPrivate,required String? accomplishment, required String? actualDuties})async{
|
||||||
|
String authtoken = "Token $token";
|
||||||
|
String path = '${Url.instance.workhistory()}$profileId/';
|
||||||
|
Map<String, String> headers = {
|
||||||
|
'Content-Type': 'application/json; charset=UTF-8',
|
||||||
|
'Authorization': authtoken
|
||||||
|
};
|
||||||
|
Map<String,String> body = {};
|
||||||
|
Map<dynamic,dynamic> statusResponse = {};
|
||||||
|
String fromDate = DateFormat('yyyy-MM-dd').format(workHistory.fromDate!);
|
||||||
|
String? toDate;
|
||||||
|
if(workHistory.toDate != null){
|
||||||
|
toDate = DateFormat('yyyy-MM-dd').format(workHistory.toDate!);
|
||||||
|
}
|
||||||
|
if(workHistory.toDate == null){
|
||||||
|
body = {
|
||||||
|
"a_category_id ": workHistory.agency?.category?.id == null? "":workHistory.agency!.category!.id.toString(),
|
||||||
|
"a_name" : workHistory.agency?.name == null? "":workHistory.agency!.name!,
|
||||||
|
" a_private_entity ": workHistory.agency?.privateEntity == null?"":workHistory.agency!.privateEntity.toString(),
|
||||||
|
"accomplishment" : accomplishment??"",
|
||||||
|
"actual_duties ": actualDuties!,
|
||||||
|
"agency_id" : workHistory.agency?.id == null?"": workHistory.agency!.id.toString() ,
|
||||||
|
"from_date" : fromDate,
|
||||||
|
"monthly_salary" : workHistory.monthlysalary == null? "": workHistory.monthlysalary.toString(),
|
||||||
|
"position_id" : workHistory.position?.id == null? "": workHistory.position!.id.toString(),
|
||||||
|
"position_name" : workHistory.position?.title == null? "":workHistory.position!.title!,
|
||||||
|
"s_fname" : workHistory.supervisor?.firstname == null?"":workHistory.supervisor!.firstname!,
|
||||||
|
"s_lname" : workHistory.supervisor?.lastname == null? "":workHistory.supervisor!.lastname!,
|
||||||
|
"s_mname" : workHistory.supervisor?.middlename == null?"":workHistory.supervisor!.middlename!,
|
||||||
|
"s_office" : workHistory.supervisor?.stationName == null?"":workHistory.supervisor!.stationName!,
|
||||||
|
"salary_grade" : workHistory.salarygrade == null? "":workHistory.salarygrade.toString(),
|
||||||
|
"sg_step" : workHistory.sgstep == null?"":workHistory.sgstep.toString() ,
|
||||||
|
'status_appointment' : workHistory.statusAppointment??"",
|
||||||
|
};
|
||||||
|
}else{
|
||||||
|
body = {
|
||||||
|
"a_category_id ": workHistory.agency?.category?.id == null? "":workHistory.agency!.category!.id.toString(),
|
||||||
|
"a_name" : workHistory.agency?.name == null? "":workHistory.agency!.name!,
|
||||||
|
" a_private_entity ": workHistory.agency?.privateEntity == null?"":workHistory.agency!.privateEntity.toString(),
|
||||||
|
"accomplishment" : accomplishment??"",
|
||||||
|
"actual_duties ": actualDuties!,
|
||||||
|
"agency_id" : workHistory.agency?.id == null?"": workHistory.agency!.id.toString() ,
|
||||||
|
"from_date" : workHistory.fromDate == null? "2018-10-04":"2018-06-04",
|
||||||
|
"monthly_salary" : workHistory.monthlysalary == null? "": workHistory.monthlysalary.toString(),
|
||||||
|
"position_id" : workHistory.position?.id == null? "": workHistory.position!.id.toString(),
|
||||||
|
"position_name" : workHistory.position?.title == null? "":workHistory.position!.title!,
|
||||||
|
"s_fname" : workHistory.supervisor?.firstname == null?"":workHistory.supervisor!.firstname!,
|
||||||
|
"s_lname" : workHistory.supervisor?.lastname == null? "":workHistory.supervisor!.lastname!,
|
||||||
|
"s_mname" : workHistory.supervisor?.middlename == null?"":workHistory.supervisor!.middlename!,
|
||||||
|
"s_office" : workHistory.supervisor?.stationName == null?"":workHistory.supervisor!.stationName!,
|
||||||
|
"salary_grade" : workHistory.salarygrade == null? "":workHistory.salarygrade.toString(),
|
||||||
|
"sg_step" : workHistory.sgstep == null?"":workHistory.sgstep.toString() ,
|
||||||
|
'status_appointment' : workHistory.statusAppointment??"",
|
||||||
|
"to_date" : toDate!,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var request = http.MultipartRequest('PUT',Uri.parse('${Url.instance.prefixHost()}://${Url.instance.host()}$path'));
|
||||||
|
request.fields.addAll(body);
|
||||||
|
request.headers.addAll(headers);
|
||||||
|
try {
|
||||||
|
http.StreamedResponse response = await request.send();
|
||||||
|
final steamResponse = await response.stream.bytesToString();
|
||||||
|
Map data = jsonDecode(steamResponse);
|
||||||
|
if (response.statusCode == 201) {
|
||||||
|
statusResponse = data;
|
||||||
|
} else {
|
||||||
|
String message = data['response']['details'];
|
||||||
|
statusResponse.addAll({'message': message});
|
||||||
|
statusResponse.addAll(
|
||||||
|
{'success': false},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
throw e.toString();
|
||||||
|
}
|
||||||
|
return statusResponse;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////get agency position
|
////get agency position
|
||||||
Future<List<PositionTitle>> getAgencyPosition() async {
|
Future<List<PositionTitle>> getAgencyPosition() async {
|
||||||
List<PositionTitle> agencyPositions = [];
|
List<PositionTitle> agencyPositions = [];
|
||||||
|
|
|
@ -32,7 +32,7 @@ class PassCheckServices {
|
||||||
'X-Client-Key': xClientKey,
|
'X-Client-Key': xClientKey,
|
||||||
'X-Client-Secret': xClientSecret
|
'X-Client-Secret': xClientSecret
|
||||||
};
|
};
|
||||||
// try {
|
try {
|
||||||
http.Response response = await Request.instance
|
http.Response response = await Request.instance
|
||||||
.getRequest(param: params, headers: headers, path: path);
|
.getRequest(param: params, headers: headers, path: path);
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
|
@ -133,9 +133,9 @@ class PassCheckServices {
|
||||||
statusResponse = assignedArea;
|
statusResponse = assignedArea;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// } catch (e) {
|
} catch (e) {
|
||||||
// throw e.toString();
|
throw e.toString();
|
||||||
// }
|
}
|
||||||
return statusResponse!;
|
return statusResponse!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:permission_handler/permission_handler.dart';
|
||||||
|
import 'package:share_plus/share_plus.dart';
|
||||||
import 'package:unit2/utils/request.dart';
|
import 'package:unit2/utils/request.dart';
|
||||||
|
import 'package:unit2/utils/request_permission.dart';
|
||||||
import 'package:unit2/utils/urls.dart';
|
import 'package:unit2/utils/urls.dart';
|
||||||
|
|
||||||
import '../model/profile/attachment.dart';
|
import '../model/profile/attachment.dart';
|
||||||
|
@ -12,7 +16,7 @@ class AttachmentServices {
|
||||||
|
|
||||||
Future<List<AttachmentCategory>> getCategories() async {
|
Future<List<AttachmentCategory>> getCategories() async {
|
||||||
List<AttachmentCategory> attachmentCategories = [];
|
List<AttachmentCategory> attachmentCategories = [];
|
||||||
String path = Url.instance.attachmentCategories()+"11232";
|
String path = Url.instance.attachmentCategories();
|
||||||
Map<String, String> headers = {
|
Map<String, String> headers = {
|
||||||
'Content-Type': 'application/json; charset=UTF-8',
|
'Content-Type': 'application/json; charset=UTF-8',
|
||||||
};
|
};
|
||||||
|
@ -113,7 +117,7 @@ class AttachmentServices {
|
||||||
'Content-Type': 'application/json; charset=UTF-8',
|
'Content-Type': 'application/json; charset=UTF-8',
|
||||||
'Authorization': authtoken
|
'Authorization': authtoken
|
||||||
};
|
};
|
||||||
// try {
|
try {
|
||||||
http.Response response = await Request.instance.deleteRequest(
|
http.Response response = await Request.instance.deleteRequest(
|
||||||
path: path, headers: headers, body: body, param: params);
|
path: path, headers: headers, body: body, param: params);
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
|
@ -122,9 +126,29 @@ class AttachmentServices {
|
||||||
} else {
|
} else {
|
||||||
success = false;
|
success = false;
|
||||||
}
|
}
|
||||||
// } catch (e) {
|
} catch (e) {
|
||||||
// throw (e.toString());
|
throw (e.toString());
|
||||||
// }
|
}
|
||||||
return success!;
|
return success!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<bool> downloadAttachment(
|
||||||
|
{required String filename,
|
||||||
|
required String source,
|
||||||
|
required String downLoadDir}) async {
|
||||||
|
bool success = false;
|
||||||
|
var dio = Dio();
|
||||||
|
Response response;
|
||||||
|
try {
|
||||||
|
if (await requestPermission(Permission.storage)) {
|
||||||
|
response = await dio.download(source, "$downLoadDir/$filename");
|
||||||
|
if (response.statusCode == 200) {
|
||||||
|
success = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return success;
|
||||||
|
} catch (e) {
|
||||||
|
throw e.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ class Request {
|
||||||
Map<String, String>? param}) async {
|
Map<String, String>? param}) async {
|
||||||
Response response;
|
Response response;
|
||||||
try {
|
try {
|
||||||
response = await get(Uri.http(host, path!, param), headers: headers)
|
response = await get(Uri.https(host, path!, param), headers: headers)
|
||||||
.timeout(Duration(seconds: requestTimeout));
|
.timeout(Duration(seconds: requestTimeout));
|
||||||
} on TimeoutException catch (_) {
|
} on TimeoutException catch (_) {
|
||||||
Fluttertoast.showToast(
|
Fluttertoast.showToast(
|
||||||
|
@ -61,7 +61,7 @@ class Request {
|
||||||
Map<String, String>? param}) async {
|
Map<String, String>? param}) async {
|
||||||
Response response;
|
Response response;
|
||||||
try {
|
try {
|
||||||
response = await post(Uri.http(host, path!, param),
|
response = await post(Uri.https(host, path!, param),
|
||||||
headers: headers, body: jsonEncode(body))
|
headers: headers, body: jsonEncode(body))
|
||||||
.timeout(Duration(seconds: requestTimeout));
|
.timeout(Duration(seconds: requestTimeout));
|
||||||
} on TimeoutException catch (_) {
|
} on TimeoutException catch (_) {
|
||||||
|
@ -104,7 +104,7 @@ class Request {
|
||||||
required Map<String, dynamic>? param}) async {
|
required Map<String, dynamic>? param}) async {
|
||||||
Response response;
|
Response response;
|
||||||
try {
|
try {
|
||||||
response =await put(Uri.http(host,path,param),headers: headers,body: jsonEncode(body));
|
response =await put(Uri.https(host,path,param),headers: headers,body: jsonEncode(body));
|
||||||
} on TimeoutException catch (_) {
|
} on TimeoutException catch (_) {
|
||||||
Fluttertoast.showToast(
|
Fluttertoast.showToast(
|
||||||
msg: timeoutError,
|
msg: timeoutError,
|
||||||
|
@ -186,7 +186,7 @@ class Request {
|
||||||
required Map<String, dynamic>? param}) async {
|
required Map<String, dynamic>? param}) async {
|
||||||
Response response;
|
Response response;
|
||||||
try {
|
try {
|
||||||
response = await delete(Uri.http(host, path, param),
|
response = await delete(Uri.https(host, path, param),
|
||||||
headers: headers, body: jsonEncode(body))
|
headers: headers, body: jsonEncode(body))
|
||||||
.timeout(Duration(seconds: requestTimeout));
|
.timeout(Duration(seconds: requestTimeout));
|
||||||
} on TimeoutException catch (_) {
|
} on TimeoutException catch (_) {
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
|
||||||
|
import 'package:permission_handler/permission_handler.dart';
|
||||||
|
|
||||||
|
Future<bool> requestPermission(Permission permission) async {
|
||||||
|
if (await permission.isGranted) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
var result = await permission.request();
|
||||||
|
if (result == PermissionStatus.granted) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
|
@ -5,13 +5,17 @@ class Url {
|
||||||
|
|
||||||
String host() {
|
String host() {
|
||||||
// return '192.168.10.183:3000';
|
// return '192.168.10.183:3000';
|
||||||
// return 'agusandelnorte.gov.ph';
|
return 'agusandelnorte.gov.ph';
|
||||||
return "192.168.10.219:3000";
|
// return "192.168.10.219:3000";
|
||||||
// return "192.168.10.241";
|
// return "192.168.10.241";
|
||||||
// return "192.168.10.221:3004";
|
// return "192.168.10.221:3004";
|
||||||
// return "playweb.agusandelnorte.gov.ph";
|
// return "playweb.agusandelnorte.gov.ph";
|
||||||
// return 'devapi.agusandelnorte.gov.ph:3004';
|
// return 'devapi.agusandelnorte.gov.ph:3004';
|
||||||
}
|
}
|
||||||
|
String prefixHost(){
|
||||||
|
return "https";
|
||||||
|
// return "https";
|
||||||
|
}
|
||||||
|
|
||||||
String authentication() {
|
String authentication() {
|
||||||
return '/api/account/auth/login/';
|
return '/api/account/auth/login/';
|
||||||
|
@ -58,6 +62,9 @@ class Url {
|
||||||
|
|
||||||
//// work history paths
|
//// work history paths
|
||||||
String workhistory() {
|
String workhistory() {
|
||||||
|
return "/api/jobnet_app/profile/pds/work_experience/";
|
||||||
|
}
|
||||||
|
String deleteWorkHistory(){
|
||||||
return "/api/jobnet_app/profile/pds/work/";
|
return "/api/jobnet_app/profile/pds/work/";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <audioplayers_linux/audioplayers_linux_plugin.h>
|
#include <audioplayers_linux/audioplayers_linux_plugin.h>
|
||||||
#include <modal_progress_hud_nsn/modal_progress_hud_nsn_plugin.h>
|
#include <modal_progress_hud_nsn/modal_progress_hud_nsn_plugin.h>
|
||||||
#include <platform_device_id_linux/platform_device_id_linux_plugin.h>
|
#include <platform_device_id_linux/platform_device_id_linux_plugin.h>
|
||||||
|
#include <url_launcher_linux/url_launcher_plugin.h>
|
||||||
|
|
||||||
void fl_register_plugins(FlPluginRegistry* registry) {
|
void fl_register_plugins(FlPluginRegistry* registry) {
|
||||||
g_autoptr(FlPluginRegistrar) audioplayers_linux_registrar =
|
g_autoptr(FlPluginRegistrar) audioplayers_linux_registrar =
|
||||||
|
@ -20,4 +21,7 @@ void fl_register_plugins(FlPluginRegistry* registry) {
|
||||||
g_autoptr(FlPluginRegistrar) platform_device_id_linux_registrar =
|
g_autoptr(FlPluginRegistrar) platform_device_id_linux_registrar =
|
||||||
fl_plugin_registry_get_registrar_for_plugin(registry, "PlatformDeviceIdLinuxPlugin");
|
fl_plugin_registry_get_registrar_for_plugin(registry, "PlatformDeviceIdLinuxPlugin");
|
||||||
platform_device_id_linux_plugin_register_with_registrar(platform_device_id_linux_registrar);
|
platform_device_id_linux_plugin_register_with_registrar(platform_device_id_linux_registrar);
|
||||||
|
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
|
||||||
|
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
|
||||||
|
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
||||||
audioplayers_linux
|
audioplayers_linux
|
||||||
modal_progress_hud_nsn
|
modal_progress_hud_nsn
|
||||||
platform_device_id_linux
|
platform_device_id_linux
|
||||||
|
url_launcher_linux
|
||||||
)
|
)
|
||||||
|
|
||||||
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
||||||
|
|
|
@ -8,6 +8,7 @@ import Foundation
|
||||||
import assets_audio_player
|
import assets_audio_player
|
||||||
import assets_audio_player_web
|
import assets_audio_player_web
|
||||||
import audioplayers_darwin
|
import audioplayers_darwin
|
||||||
|
import device_info_plus
|
||||||
import location
|
import location
|
||||||
import modal_progress_hud_nsn
|
import modal_progress_hud_nsn
|
||||||
import package_info_plus
|
import package_info_plus
|
||||||
|
@ -15,13 +16,17 @@ import path_provider_foundation
|
||||||
import platform_device_id
|
import platform_device_id
|
||||||
import platform_device_id_macos
|
import platform_device_id_macos
|
||||||
import rive_common
|
import rive_common
|
||||||
|
import share_plus
|
||||||
import shared_preferences_foundation
|
import shared_preferences_foundation
|
||||||
import sqflite
|
import sqflite
|
||||||
|
import syncfusion_pdfviewer_macos
|
||||||
|
import url_launcher_macos
|
||||||
|
|
||||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||||
AssetsAudioPlayerPlugin.register(with: registry.registrar(forPlugin: "AssetsAudioPlayerPlugin"))
|
AssetsAudioPlayerPlugin.register(with: registry.registrar(forPlugin: "AssetsAudioPlayerPlugin"))
|
||||||
AssetsAudioPlayerWebPlugin.register(with: registry.registrar(forPlugin: "AssetsAudioPlayerWebPlugin"))
|
AssetsAudioPlayerWebPlugin.register(with: registry.registrar(forPlugin: "AssetsAudioPlayerWebPlugin"))
|
||||||
AudioplayersDarwinPlugin.register(with: registry.registrar(forPlugin: "AudioplayersDarwinPlugin"))
|
AudioplayersDarwinPlugin.register(with: registry.registrar(forPlugin: "AudioplayersDarwinPlugin"))
|
||||||
|
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
|
||||||
LocationPlugin.register(with: registry.registrar(forPlugin: "LocationPlugin"))
|
LocationPlugin.register(with: registry.registrar(forPlugin: "LocationPlugin"))
|
||||||
ModalProgressHudNsnPlugin.register(with: registry.registrar(forPlugin: "ModalProgressHudNsnPlugin"))
|
ModalProgressHudNsnPlugin.register(with: registry.registrar(forPlugin: "ModalProgressHudNsnPlugin"))
|
||||||
FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin"))
|
FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin"))
|
||||||
|
@ -29,6 +34,9 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||||
PlatformDeviceIdMacosPlugin.register(with: registry.registrar(forPlugin: "PlatformDeviceIdMacosPlugin"))
|
PlatformDeviceIdMacosPlugin.register(with: registry.registrar(forPlugin: "PlatformDeviceIdMacosPlugin"))
|
||||||
PlatformDeviceIdMacosPlugin.register(with: registry.registrar(forPlugin: "PlatformDeviceIdMacosPlugin"))
|
PlatformDeviceIdMacosPlugin.register(with: registry.registrar(forPlugin: "PlatformDeviceIdMacosPlugin"))
|
||||||
RivePlugin.register(with: registry.registrar(forPlugin: "RivePlugin"))
|
RivePlugin.register(with: registry.registrar(forPlugin: "RivePlugin"))
|
||||||
|
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
|
||||||
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||||
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
||||||
|
SyncfusionFlutterPdfViewerPlugin.register(with: registry.registrar(forPlugin: "SyncfusionFlutterPdfViewerPlugin"))
|
||||||
|
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
||||||
}
|
}
|
||||||
|
|
160
pubspec.lock
|
@ -337,6 +337,14 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0"
|
version: "1.1.0"
|
||||||
|
cross_file:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: cross_file
|
||||||
|
sha256: "0b0036e8cccbfbe0555fd83c1d31a6f30b77a96b598b35a5d36dd41f718695e9"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.3.3+4"
|
||||||
crypto:
|
crypto:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -385,6 +393,22 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "2.0.1"
|
||||||
|
device_info_plus:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: device_info_plus
|
||||||
|
sha256: f52ab3b76b36ede4d135aab80194df8925b553686f0fa12226b4e2d658e45903
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "8.2.2"
|
||||||
|
device_info_plus_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: device_info_plus_platform_interface
|
||||||
|
sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "7.0.0"
|
||||||
device_preview:
|
device_preview:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -1253,6 +1277,22 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.8"
|
version: "0.7.8"
|
||||||
|
share_plus:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: share_plus
|
||||||
|
sha256: "6cec740fa0943a826951223e76218df002804adb588235a8910dc3d6b0654e11"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "7.1.0"
|
||||||
|
share_plus_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: share_plus_platform_interface
|
||||||
|
sha256: "357412af4178d8e11d14f41723f80f12caea54cf0d5cd29af9dcdab85d58aea7"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.3.0"
|
||||||
shared_preferences:
|
shared_preferences:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1418,6 +1458,62 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.0"
|
version: "1.2.0"
|
||||||
|
syncfusion_flutter_core:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: syncfusion_flutter_core
|
||||||
|
sha256: "8db8f55c77f56968681447d3837c10f27a9e861e238a898fda116c7531def979"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "21.2.10"
|
||||||
|
syncfusion_flutter_pdf:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: syncfusion_flutter_pdf
|
||||||
|
sha256: a42186922a416c2c9634a8f221aee261101babc2d30b1a1e908a7f034e743046
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "21.2.4"
|
||||||
|
syncfusion_flutter_pdfviewer:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: syncfusion_flutter_pdfviewer
|
||||||
|
sha256: "2dc016f251c675f8e4923135c485356473b4d89c677670164292159cd1dd4f45"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "21.2.3"
|
||||||
|
syncfusion_pdfviewer_macos:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: syncfusion_pdfviewer_macos
|
||||||
|
sha256: "8cc925cae532c0fa17e849165796d962107f45b86e66ee334dcaabf6b7305c82"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "21.2.10"
|
||||||
|
syncfusion_pdfviewer_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: syncfusion_pdfviewer_platform_interface
|
||||||
|
sha256: "08039ecdb8f79454fb367c6bf5a833846a666039415d2b5d76a7e59a5b3ff710"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "21.2.10"
|
||||||
|
syncfusion_pdfviewer_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: syncfusion_pdfviewer_web
|
||||||
|
sha256: "8e5ed0d313a1aa3869e4f2e8d079bc9bfa37ce79d91be7bb328e456f37b7995f"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "21.2.10"
|
||||||
|
syncfusion_pdfviewer_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: syncfusion_pdfviewer_windows
|
||||||
|
sha256: "3e93f281135fb0562f7e6c343d2db741cf3cbd78c5b04884eef9af414408bc77"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "21.2.10"
|
||||||
synchronized:
|
synchronized:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1474,6 +1570,70 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.2"
|
version: "1.3.2"
|
||||||
|
url_launcher:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: url_launcher
|
||||||
|
sha256: eb1e00ab44303d50dd487aab67ebc575456c146c6af44422f9c13889984c00f3
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.1.11"
|
||||||
|
url_launcher_android:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: url_launcher_android
|
||||||
|
sha256: "3dd2388cc0c42912eee04434531a26a82512b9cb1827e0214430c9bcbddfe025"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.0.38"
|
||||||
|
url_launcher_ios:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_ios
|
||||||
|
sha256: "9af7ea73259886b92199f9e42c116072f05ff9bea2dcb339ab935dfc957392c2"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.1.4"
|
||||||
|
url_launcher_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_linux
|
||||||
|
sha256: "207f4ddda99b95b4d4868320a352d374b0b7e05eefad95a4a26f57da413443f5"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.5"
|
||||||
|
url_launcher_macos:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_macos
|
||||||
|
sha256: "1c4fdc0bfea61a70792ce97157e5cc17260f61abbe4f39354513f39ec6fd73b1"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.6"
|
||||||
|
url_launcher_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_platform_interface
|
||||||
|
sha256: bfdfa402f1f3298637d71ca8ecfe840b4696698213d5346e9d12d4ab647ee2ea
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.3"
|
||||||
|
url_launcher_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_web
|
||||||
|
sha256: cc26720eefe98c1b71d85f9dc7ef0cada5132617046369d9dc296b3ecaa5cbb4
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.18"
|
||||||
|
url_launcher_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_windows
|
||||||
|
sha256: "7967065dd2b5fccc18c653b97958fdf839c5478c28e767c61ee879f4e7882422"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.7"
|
||||||
uuid:
|
uuid:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -89,6 +89,10 @@ dependencies:
|
||||||
file_picker: ^5.3.1
|
file_picker: ^5.3.1
|
||||||
expandable: ^5.0.1
|
expandable: ^5.0.1
|
||||||
flutter_simple_treeview: ^3.0.2
|
flutter_simple_treeview: ^3.0.2
|
||||||
|
syncfusion_flutter_pdfviewer: ^21.2.3
|
||||||
|
url_launcher: ^6.1.11
|
||||||
|
url_launcher_android: ^6.0.38
|
||||||
|
share_plus: ^7.1.0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,9 @@
|
||||||
#include <permission_handler_windows/permission_handler_windows_plugin.h>
|
#include <permission_handler_windows/permission_handler_windows_plugin.h>
|
||||||
#include <platform_device_id_windows/platform_device_id_windows_plugin.h>
|
#include <platform_device_id_windows/platform_device_id_windows_plugin.h>
|
||||||
#include <rive_common/rive_plugin.h>
|
#include <rive_common/rive_plugin.h>
|
||||||
|
#include <share_plus/share_plus_windows_plugin_c_api.h>
|
||||||
|
#include <syncfusion_pdfviewer_windows/syncfusion_pdfviewer_windows_plugin.h>
|
||||||
|
#include <url_launcher_windows/url_launcher_windows.h>
|
||||||
|
|
||||||
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||||
AudioplayersWindowsPluginRegisterWithRegistrar(
|
AudioplayersWindowsPluginRegisterWithRegistrar(
|
||||||
|
@ -23,4 +26,10 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||||
registry->GetRegistrarForPlugin("PlatformDeviceIdWindowsPlugin"));
|
registry->GetRegistrarForPlugin("PlatformDeviceIdWindowsPlugin"));
|
||||||
RivePluginRegisterWithRegistrar(
|
RivePluginRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("RivePlugin"));
|
registry->GetRegistrarForPlugin("RivePlugin"));
|
||||||
|
SharePlusWindowsPluginCApiRegisterWithRegistrar(
|
||||||
|
registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi"));
|
||||||
|
SyncfusionPdfviewerWindowsPluginRegisterWithRegistrar(
|
||||||
|
registry->GetRegistrarForPlugin("SyncfusionPdfviewerWindowsPlugin"));
|
||||||
|
UrlLauncherWindowsRegisterWithRegistrar(
|
||||||
|
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,9 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
||||||
permission_handler_windows
|
permission_handler_windows
|
||||||
platform_device_id_windows
|
platform_device_id_windows
|
||||||
rive_common
|
rive_common
|
||||||
|
share_plus
|
||||||
|
syncfusion_pdfviewer_windows
|
||||||
|
url_launcher_windows
|
||||||
)
|
)
|
||||||
|
|
||||||
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
||||||
|
|