Merge pull request 'feature/passo/PASSO-#42-Bug-fix-on-building-faas-and-add-land-faas-edit' (#44) from feature/passo/PASSO-#42-Bug-fix-on-building-faas-and-add-land-faas-edit into develop
Reviewed-on: http://git.agusandelnorte.gov.ph:3000/SoftwareDevelopmentSection/unit2-null-safety-repository/pulls/44feature/passo/PASSO-#1-Sync-data-from-device-to-postgre-and-vice-versa
commit
874f9653c0
|
@ -27,18 +27,23 @@ class AdditionalItemBloc
|
|||
}
|
||||
});
|
||||
on<AddAdditionalItems>((event, emit) async {
|
||||
http.Response response =
|
||||
(await AdditionalItemsServices.instance.add(event.items))!;
|
||||
print(response.body);
|
||||
emit(AdditionalItemsLoading());
|
||||
try {
|
||||
http.Response response =
|
||||
(await AdditionalItemsServices.instance.add(event.items))!;
|
||||
print(response.body);
|
||||
|
||||
if (response.statusCode == 201) {
|
||||
var jsonResponse = jsonDecode(response.body);
|
||||
AdditionalItems newAdditional =
|
||||
AdditionalItems.fromJson(jsonResponse['data']);
|
||||
print(jsonResponse['data']);
|
||||
globalAdditionalItems.add(newAdditional);
|
||||
if (response.statusCode == 201) {
|
||||
var jsonResponse = jsonDecode(response.body);
|
||||
AdditionalItems newAdditional =
|
||||
AdditionalItems.fromJson(jsonResponse['data']);
|
||||
print(jsonResponse['data']);
|
||||
globalAdditionalItems.add(newAdditional);
|
||||
|
||||
emit(AdditionalItemsLoaded(globalAdditionalItems));
|
||||
emit(AdditionalItemsLoaded(globalAdditionalItems));
|
||||
}
|
||||
} catch (e) {
|
||||
emit(AdditionalItemsErrorState(e.toString()));
|
||||
}
|
||||
});
|
||||
on<DeleteAdditionalItems>((event, emit) async {
|
||||
|
|
|
@ -26,19 +26,16 @@ class PropertyAppraisalBloc
|
|||
});
|
||||
on<AddPropertyAppraisal>((event, emit) async {
|
||||
final tempID = await SharedPreferences.getInstance();
|
||||
emit(PropertyAppraisalLoading());
|
||||
try {
|
||||
http.Response response = (await PropertyAppraisalServices.instance
|
||||
.update(event.appraisal, tempID.getInt('tempid')! - 1))!;
|
||||
|
||||
http.Response response = (await PropertyAppraisalServices.instance
|
||||
.update(event.appraisal, tempID.getInt('tempid')! - 1))!;
|
||||
|
||||
if (response.statusCode == 201) {
|
||||
var jsonResponse = jsonDecode(response.body);
|
||||
PropertyAppraisal newAppraisal =
|
||||
PropertyAppraisal.fromJson(jsonResponse['data']);
|
||||
print("PA");
|
||||
print(newAppraisal);
|
||||
print(response.statusCode);
|
||||
|
||||
emit(PropertyAppraisalLoaded(newAppraisal));
|
||||
if (response.statusCode == 200) {
|
||||
emit(ShowPropertyAppraisalSuccessAlertState());
|
||||
}
|
||||
} catch (e) {
|
||||
emit(ShowPropertyAppraisalErrorAlertState());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -26,3 +26,7 @@ class PropertyAppraisalErrorState extends PropertyAppraisalState {
|
|||
@override
|
||||
List<Object> get props => [error];
|
||||
}
|
||||
|
||||
class ShowPropertyAppraisalErrorAlertState extends PropertyAppraisalState {}
|
||||
|
||||
class ShowPropertyAppraisalSuccessAlertState extends PropertyAppraisalState {}
|
||||
|
|
|
@ -48,6 +48,7 @@ class PropertyInfoBloc extends Bloc<PropertyInfoEvent, PropertyInfoState> {
|
|||
}
|
||||
});
|
||||
on<UpdatPropertyInfo>(((event, emit) async {
|
||||
emit(PropertyInfoLoading());
|
||||
final state = this.state;
|
||||
try {
|
||||
http.Response response = (await PropertyInfoService.instance
|
||||
|
@ -60,11 +61,17 @@ class PropertyInfoBloc extends Bloc<PropertyInfoEvent, PropertyInfoState> {
|
|||
}));
|
||||
on<UpdateBldgLoc>(((event, emit) async {
|
||||
final state = this.state;
|
||||
|
||||
try {
|
||||
http.Response response = (await PropertyInfoService.instance
|
||||
.updateBldg(event.bldg_loc, event.bldg_loc.id))!;
|
||||
print('bldgLoc');
|
||||
print(response.statusCode);
|
||||
if (response.statusCode == 200) {
|
||||
emit(ShowBldgLocSuccessAlertState());
|
||||
} else {
|
||||
emit(ShowBldgLocErrorAlertState());
|
||||
}
|
||||
} catch (e) {
|
||||
emit(PropertyInfoErrorState(e.toString()));
|
||||
}
|
||||
|
@ -72,11 +79,17 @@ class PropertyInfoBloc extends Bloc<PropertyInfoEvent, PropertyInfoState> {
|
|||
on<UpdateLandRef>(
|
||||
(event, emit) async {
|
||||
final state = this.state;
|
||||
emit(PropertyInfoLoading());
|
||||
try {
|
||||
http.Response response = (await PropertyInfoService.instance
|
||||
.updateLandRef(event.land_ref, event.land_ref.id))!;
|
||||
print('landref');
|
||||
print(response.body);
|
||||
if (response.statusCode == 200) {
|
||||
emit(ShowLandRefSuccessAlertState());
|
||||
} else {
|
||||
emit(ShowLandRefErrorAlertState());
|
||||
}
|
||||
} catch (e) {
|
||||
emit(PropertyInfoErrorState(e.toString()));
|
||||
}
|
||||
|
@ -85,11 +98,17 @@ class PropertyInfoBloc extends Bloc<PropertyInfoEvent, PropertyInfoState> {
|
|||
|
||||
on<UpdateGeneralDesc>((event, emit) async {
|
||||
final state = this.state;
|
||||
emit(PropertyInfoLoading());
|
||||
try {
|
||||
http.Response response = (await PropertyInfoService.instance
|
||||
.updateGenDesc(event.gen_desc, event.gen_desc.id))!;
|
||||
print('genDesc');
|
||||
print(response.body);
|
||||
if (response.statusCode == 200) {
|
||||
emit(ShowGenDescSuccessAlertState());
|
||||
} else {
|
||||
emit(ShowGenDescErrorAlertState());
|
||||
}
|
||||
} catch (e) {
|
||||
emit(PropertyInfoErrorState(e.toString()));
|
||||
}
|
||||
|
@ -97,6 +116,7 @@ class PropertyInfoBloc extends Bloc<PropertyInfoEvent, PropertyInfoState> {
|
|||
|
||||
on<UpdateStrucMaterials>((event, emit) async {
|
||||
final state = this.state;
|
||||
emit(PropertyInfoLoading());
|
||||
try {
|
||||
final tempID = await SharedPreferences.getInstance();
|
||||
print(tempID.getInt('tempid')! - 1);
|
||||
|
@ -104,9 +124,25 @@ class PropertyInfoBloc extends Bloc<PropertyInfoEvent, PropertyInfoState> {
|
|||
.update(event.data, event.data.id))!;
|
||||
print('struc Material');
|
||||
print(response.body);
|
||||
if (response.statusCode == 200) {
|
||||
emit(ShowStrucMatSuccessAlertState());
|
||||
} else {
|
||||
emit(ShowStrucMatErrorAlertState());
|
||||
}
|
||||
} catch (e) {
|
||||
emit(PropertyInfoErrorState(e.toString()));
|
||||
}
|
||||
});
|
||||
|
||||
on<DeleteBuildingFaas>((event, emit) async {
|
||||
print(event.id);
|
||||
emit(PropertyInfoLoading());
|
||||
http.Response response =
|
||||
(await PropertyInfoService.instance.remove(event.id));
|
||||
print(response.statusCode);
|
||||
if (response.statusCode == 200) {
|
||||
emit(BuildingFaasDeletedState(success: true));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -73,3 +73,16 @@ class UpdateStrucMaterials extends PropertyInfoEvent {
|
|||
@override
|
||||
List<Object> get props => [data];
|
||||
}
|
||||
|
||||
class DeleteBuildingFaas extends PropertyInfoEvent {
|
||||
final int id;
|
||||
|
||||
const DeleteBuildingFaas({required this.id});
|
||||
|
||||
@override
|
||||
List<Object> get props => [id];
|
||||
}
|
||||
|
||||
class ShowBldgLocErrorAlert extends PropertyInfoEvent {}
|
||||
|
||||
class ShowLandRefErrorAlert extends PropertyInfoEvent {}
|
||||
|
|
|
@ -24,3 +24,26 @@ class PropertyInfoErrorState extends PropertyInfoState {
|
|||
@override
|
||||
List<Object> get props => [error];
|
||||
}
|
||||
|
||||
class BuildingFaasDeletedState extends PropertyInfoState {
|
||||
final bool success;
|
||||
const BuildingFaasDeletedState({required this.success});
|
||||
@override
|
||||
List<Object> get props => [success];
|
||||
}
|
||||
|
||||
class ShowBldgLocErrorAlertState extends PropertyInfoState {}
|
||||
|
||||
class ShowLandRefErrorAlertState extends PropertyInfoState {}
|
||||
|
||||
class ShowGenDescErrorAlertState extends PropertyInfoState {}
|
||||
|
||||
class ShowStrucMatErrorAlertState extends PropertyInfoState {}
|
||||
|
||||
class ShowStrucMatSuccessAlertState extends PropertyInfoState {}
|
||||
|
||||
class ShowBldgLocSuccessAlertState extends PropertyInfoState {}
|
||||
|
||||
class ShowLandRefSuccessAlertState extends PropertyInfoState {}
|
||||
|
||||
class ShowGenDescSuccessAlertState extends PropertyInfoState {}
|
||||
|
|
|
@ -18,7 +18,7 @@ class LandAppraisalBloc extends Bloc<LandAppraisalEvent, LandAppraisalState> {
|
|||
final tempID = await SharedPreferences.getInstance();
|
||||
print(tempID.getInt('landid'));
|
||||
final additionalItems =
|
||||
await LandAppraisalServices.instance.fetch(tempID.getInt('tempid'));
|
||||
await LandAppraisalServices.instance.fetch(tempID.getInt('landid'));
|
||||
|
||||
globalLandAppraisal
|
||||
.addAll(additionalItems); // Append all items to the list
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
import 'package:bloc/bloc.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:unit2/model/passo/land_property_boundaries.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:unit2/sevices/passo/land/land_boundaries.dart';
|
||||
part 'land_boundaries_edit_event.dart';
|
||||
part 'land_boundaries_edit_state.dart';
|
||||
|
||||
class LandBoundariesEditBloc
|
||||
extends Bloc<LandBoundariesEditEvent, LandBoundariesEditState> {
|
||||
LandBoundariesEditBloc() : super(LandBoundariesEditInitial()) {
|
||||
on<LoadLandBoundariesEdit>((event, emit) async {
|
||||
emit(LandBoundariesEditLoading());
|
||||
try {
|
||||
final tempID = await SharedPreferences.getInstance();
|
||||
|
||||
final assessments =
|
||||
await LandBoundariesService.instance.fetchEdit(event.id);
|
||||
|
||||
emit(LandBoundariesEditLoaded(assessments));
|
||||
} catch (e) {
|
||||
emit(LandBoundariesEditErrorState(e.toString()));
|
||||
}
|
||||
});
|
||||
// on<AddLandLocationEdit>((event, emit) async {
|
||||
// http.Response response = (await LandLocationService.instance
|
||||
// .addEdit(event.land_loc_edit))!;
|
||||
// print('Assessment');
|
||||
// print(response.statusCode);
|
||||
// print(response.body);
|
||||
// if (response.statusCode == 201) {
|
||||
// var jsonResponse = jsonDecode(response.body);
|
||||
// LandPropertyLoc newAssessment =
|
||||
// LandPropertyLoc.fromJson(jsonResponse['data']);
|
||||
|
||||
// globalLandLocationEdit = newAssessment;
|
||||
|
||||
// emit(LandLocationEditLoaded(globalLandBoundariesEdit));
|
||||
// }
|
||||
// });
|
||||
on<UpdateLandBoundariesEdit>((event, emit) async {
|
||||
http.Response response = (await LandBoundariesService.instance
|
||||
.updateEdit(event.land_boundaries_edit, event.id))!;
|
||||
print('landloc edit');
|
||||
print(response.statusCode);
|
||||
print(response.body);
|
||||
// if (response.statusCode == 201) {
|
||||
// final faas = await PropertyInfoRepository.getUsers();
|
||||
// emit(FaasLoaded(faas));
|
||||
// }
|
||||
});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
part of 'land_boundaries_edit_bloc.dart';
|
||||
|
||||
class LandBoundariesEditEvent extends Equatable {
|
||||
const LandBoundariesEditEvent();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class LoadLandBoundariesEdit extends LandBoundariesEditEvent {
|
||||
final LandPropertyBoundaries land_boundaries_edit;
|
||||
final int? id;
|
||||
|
||||
const LoadLandBoundariesEdit(
|
||||
{required this.land_boundaries_edit, required this.id});
|
||||
|
||||
@override
|
||||
List<Object> get props => [land_boundaries_edit];
|
||||
}
|
||||
|
||||
class AddLandBoundariesEdit extends LandBoundariesEditEvent {
|
||||
final LandPropertyBoundaries land_boundaries_edit;
|
||||
|
||||
const AddLandBoundariesEdit({required this.land_boundaries_edit});
|
||||
|
||||
@override
|
||||
List<Object> get props => [land_boundaries_edit];
|
||||
}
|
||||
|
||||
class UpdateLandBoundariesEdit extends LandBoundariesEditEvent {
|
||||
// ignore: non_constant_identifier_names
|
||||
final LandPropertyBoundaries land_boundaries_edit;
|
||||
final int id;
|
||||
|
||||
// ignore: non_constant_identifier_names
|
||||
const UpdateLandBoundariesEdit(
|
||||
{required this.land_boundaries_edit, required this.id});
|
||||
|
||||
@override
|
||||
List<Object> get props => [land_boundaries_edit];
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
part of 'land_boundaries_edit_bloc.dart';
|
||||
|
||||
class LandBoundariesEditState extends Equatable {
|
||||
const LandBoundariesEditState();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class LandBoundariesEditInitial extends LandBoundariesEditState {}
|
||||
|
||||
class LandBoundariesEditLoading extends LandBoundariesEditState {}
|
||||
|
||||
class LandBoundariesEditLoaded extends LandBoundariesEditState {
|
||||
LandBoundariesEditLoaded(this.land_boundaries_edit);
|
||||
final LandPropertyBoundaries land_boundaries_edit;
|
||||
|
||||
@override
|
||||
List<Object> get props => [land_boundaries_edit];
|
||||
}
|
||||
|
||||
class LandBoundariesEditErrorState extends LandBoundariesEditState {
|
||||
LandBoundariesEditErrorState(this.error);
|
||||
final String error;
|
||||
|
||||
@override
|
||||
List<Object> get props => [error];
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:unit2/model/passo/land_property_loc.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:unit2/sevices/passo/land/land_location.dart';
|
||||
part 'land_location_edit_event.dart';
|
||||
part 'land_location_edit_state.dart';
|
||||
|
||||
class LandLocationEditBloc
|
||||
extends Bloc<LandLocationEditEvent, LandLocationEditState> {
|
||||
LandPropertyLoc globalLandLocationEdit;
|
||||
LandLocationEditBloc()
|
||||
: globalLandLocationEdit = LandPropertyLoc(),
|
||||
super(LandLocationEditInitial()) {
|
||||
on<LoadLandLocationEdit>((event, emit) async {
|
||||
emit(LandLocationEditLoading());
|
||||
try {
|
||||
final tempID = await SharedPreferences.getInstance();
|
||||
|
||||
final assessments =
|
||||
await LandLocationService.instance.fetchEdit(event.id);
|
||||
|
||||
emit(LandLocationEditLoaded(assessments));
|
||||
} catch (e) {
|
||||
emit(LandLocationEditErrorState(e.toString()));
|
||||
}
|
||||
});
|
||||
// on<AddLandLocationEdit>((event, emit) async {
|
||||
// http.Response response = (await LandLocationService.instance
|
||||
// .addEdit(event.land_loc_edit))!;
|
||||
// print('Assessment');
|
||||
// print(response.statusCode);
|
||||
// print(response.body);
|
||||
// if (response.statusCode == 201) {
|
||||
// var jsonResponse = jsonDecode(response.body);
|
||||
// LandPropertyLoc newAssessment =
|
||||
// LandPropertyLoc.fromJson(jsonResponse['data']);
|
||||
|
||||
// globalLandLocationEdit = newAssessment;
|
||||
|
||||
// emit(LandLocationEditLoaded(globalLandLocationEdit));
|
||||
// }
|
||||
// });
|
||||
on<UpdateLandLocationEdit>((event, emit) async {
|
||||
http.Response response = (await LandLocationService.instance
|
||||
.updateEdit(event.land_loc_edit, event.id))!;
|
||||
print('landloc edit');
|
||||
print(response.statusCode);
|
||||
print(response.body);
|
||||
// if (response.statusCode == 201) {
|
||||
// final faas = await PropertyInfoRepository.getUsers();
|
||||
// emit(FaasLoaded(faas));
|
||||
// }
|
||||
});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
part of 'land_location_edit_bloc.dart';
|
||||
|
||||
class LandLocationEditEvent extends Equatable {
|
||||
const LandLocationEditEvent();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class LoadLandLocationEdit extends LandLocationEditEvent {
|
||||
final LandPropertyLoc land_loc_edit;
|
||||
final int? id;
|
||||
|
||||
const LoadLandLocationEdit({required this.land_loc_edit, required this.id});
|
||||
|
||||
@override
|
||||
List<Object> get props => [land_loc_edit];
|
||||
}
|
||||
|
||||
class AddLandLocationEdit extends LandLocationEditEvent {
|
||||
final LandPropertyLoc land_loc_edit;
|
||||
|
||||
const AddLandLocationEdit({required this.land_loc_edit});
|
||||
|
||||
@override
|
||||
List<Object> get props => [land_loc_edit];
|
||||
}
|
||||
|
||||
class UpdateLandLocationEdit extends LandLocationEditEvent {
|
||||
// ignore: non_constant_identifier_names
|
||||
final LandPropertyLoc land_loc_edit;
|
||||
final int id;
|
||||
|
||||
// ignore: non_constant_identifier_names
|
||||
const UpdateLandLocationEdit({required this.land_loc_edit, required this.id});
|
||||
|
||||
@override
|
||||
List<Object> get props => [land_loc_edit];
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
part of 'land_location_edit_bloc.dart';
|
||||
|
||||
class LandLocationEditState extends Equatable {
|
||||
const LandLocationEditState();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class LandLocationEditInitial extends LandLocationEditState {}
|
||||
|
||||
class LandLocationEditLoading extends LandLocationEditState {}
|
||||
|
||||
class LandLocationEditLoaded extends LandLocationEditState {
|
||||
LandLocationEditLoaded(this.land_loc_edit);
|
||||
final LandPropertyLoc land_loc_edit;
|
||||
|
||||
@override
|
||||
List<Object> get props => [land_loc_edit];
|
||||
}
|
||||
|
||||
class LandLocationEditErrorState extends LandLocationEditState {
|
||||
LandLocationEditErrorState(this.error);
|
||||
final String error;
|
||||
|
||||
@override
|
||||
List<Object> get props => [error];
|
||||
}
|
|
@ -10,6 +10,7 @@ import 'package:unit2/sevices/passo/land/land_boundaries.dart';
|
|||
import 'package:unit2/sevices/passo/land/land_location.dart';
|
||||
import 'package:unit2/sevices/passo/land/land_property_owner.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:unit2/utils/text_container.dart';
|
||||
part 'land_property_owner_info_event.dart';
|
||||
part 'land_property_owner_info_state.dart';
|
||||
|
||||
|
@ -25,33 +26,39 @@ class LandPropertyOwnerInfoBloc
|
|||
emit(LandErrorState(e.toString()));
|
||||
}
|
||||
});
|
||||
|
||||
on<AddPropertyOwnerLand>((event, emit) async {
|
||||
http.Response response = (await LandServices.instance.add(event.land))!;
|
||||
|
||||
if (response.statusCode == 201) {
|
||||
var jsonResponse = jsonDecode(response.body);
|
||||
var details = jsonResponse['data']['details'];
|
||||
var details = jsonResponse['data'];
|
||||
print(jsonResponse);
|
||||
|
||||
if (details != null) {
|
||||
var id = details['id'];
|
||||
final tempID = await SharedPreferences.getInstance();
|
||||
print(id);
|
||||
await tempID.setInt('landid', id + 1);
|
||||
final faas = await LandServices.instance.fetch();
|
||||
emit(LandLoaded(faas));
|
||||
} else {
|
||||
print("No 'details' object found in the response.");
|
||||
// Handle the case when 'details' is missing
|
||||
}
|
||||
var id = details['id'];
|
||||
final tempID = await SharedPreferences.getInstance();
|
||||
print(id);
|
||||
await tempID.setInt('landid', id + 1);
|
||||
final faas = await LandServices.instance.fetch();
|
||||
emit(LandLoaded(faas));
|
||||
}
|
||||
});
|
||||
|
||||
on<UpdateLandPropertyOwner>((event, emit) async {
|
||||
final state = this.state;
|
||||
http.Response response = (await LandServices.instance
|
||||
.update(event.land_edit, event.land_edit.id))!;
|
||||
print('Land LOc');
|
||||
print(response.body);
|
||||
});
|
||||
|
||||
on<UpdateLandLoc>((event, emit) async {
|
||||
final state = this.state;
|
||||
http.Response response = (await LandLocationService.instance
|
||||
.update(event.land_loc, event.land_loc.id))!;
|
||||
print(event.land_loc.id!);
|
||||
print('Land LOc');
|
||||
print(response.body);
|
||||
print(response.statusCode);
|
||||
});
|
||||
|
||||
on<UpdateLandBoundaries>((event, emit) async {
|
||||
|
|
|
@ -25,6 +25,18 @@ class AddPropertyOwnerLand extends LandPropertyOwnerInfoEvent {
|
|||
List<Object> get props => [land];
|
||||
}
|
||||
|
||||
class UpdateLandPropertyOwner extends LandPropertyOwnerInfoEvent {
|
||||
// ignore: non_constant_identifier_names
|
||||
final LandPropertyOwner land_edit;
|
||||
final int id;
|
||||
|
||||
// ignore: non_constant_identifier_names
|
||||
const UpdateLandPropertyOwner({required this.land_edit, required this.id});
|
||||
|
||||
@override
|
||||
List<Object> get props => [land_edit];
|
||||
}
|
||||
|
||||
class UpdateLandLoc extends LandPropertyOwnerInfoEvent {
|
||||
// ignore: non_constant_identifier_names
|
||||
final LandPropertyLoc land_loc;
|
||||
|
|
|
@ -17,14 +17,6 @@ class LandLoaded extends LandPropertyOwnerInfoState {
|
|||
List<Object> get props => [land];
|
||||
}
|
||||
|
||||
// class PropertyAppraisalLoaded extends AssessorsState {
|
||||
// PropertyAppraisalLoaded(this.appraisal);
|
||||
// final List<PropertyAppraisal> appraisal;
|
||||
|
||||
// @override
|
||||
// List<Object> get props => [appraisal];
|
||||
// }
|
||||
|
||||
class LandErrorState extends LandPropertyOwnerInfoState {
|
||||
const LandErrorState(this.error);
|
||||
final String error;
|
||||
|
|
|
@ -120,17 +120,34 @@ class _AddBuilding extends State<AddBuilding> {
|
|||
if (state is PropertyInfoErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
if (state is ShowGenDescErrorAlertState ||
|
||||
state is ShowLandRefErrorAlertState ||
|
||||
state is ShowStrucMatErrorAlertState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
Fluttertoast.showToast(
|
||||
msg: onError,
|
||||
fontSize: 24,
|
||||
toastLength: Toast.LENGTH_LONG,
|
||||
gravity: ToastGravity.CENTER,
|
||||
backgroundColor: Colors.black,
|
||||
textColor: Colors.white);
|
||||
msg: "Slow internet connection, please try again!");
|
||||
}
|
||||
if (state is ShowLandRefSuccessAlertState ||
|
||||
state is ShowGenDescSuccessAlertState ||
|
||||
state is ShowStrucMatSuccessAlertState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
NextBtn();
|
||||
}
|
||||
}, builder: (context, state) {
|
||||
if (state is PropertyInfoLoaded ||
|
||||
state is PropertyInfoErrorState) {
|
||||
if (state is PropertyInfoLoading ||
|
||||
state is PropertyInfoLoaded ||
|
||||
state is PropertyInfoErrorState ||
|
||||
state is ShowBldgLocErrorAlertState ||
|
||||
state is ShowGenDescErrorAlertState ||
|
||||
state is ShowLandRefErrorAlertState ||
|
||||
state is ShowStrucMatErrorAlertState ||
|
||||
state is ShowBldgLocSuccessAlertState ||
|
||||
state is ShowLandRefSuccessAlertState ||
|
||||
state is ShowGenDescSuccessAlertState ||
|
||||
state is ShowStrucMatSuccessAlertState) {
|
||||
return BlocConsumer<UnitConstructBloc, UnitConstructState>(
|
||||
listener: (
|
||||
context,
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
||||
import 'package:fluttertoast/fluttertoast.dart';
|
||||
import 'package:form_builder_validators/form_builder_validators.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:searchfield/searchfield.dart';
|
||||
|
@ -500,48 +501,56 @@ class _AddExtraItems extends State<AddExtraItems> {
|
|||
padding: const EdgeInsets.all(8.0),
|
||||
child: ElevatedButton(
|
||||
onPressed: () async {
|
||||
final tempID =
|
||||
await SharedPreferences.getInstance();
|
||||
var itemss = AdditionalItems(
|
||||
id: 1,
|
||||
bldgapprDetailsId:
|
||||
tempID.getInt('tempid')! - 1,
|
||||
classId: _classId,
|
||||
className: _className,
|
||||
structType: _structureType,
|
||||
unitValue:
|
||||
_withoutBUCC == true ? 0 : _unitValue,
|
||||
baseUnitValue: _unitBase,
|
||||
area: _areaValue,
|
||||
marketValue:
|
||||
(_unitValue * _unitBase) * _areaValue,
|
||||
depreciationRate: _depValue,
|
||||
adjustedMarketVal: _totalMarketValue(
|
||||
try {
|
||||
final tempID =
|
||||
await SharedPreferences.getInstance();
|
||||
var itemss = AdditionalItems(
|
||||
id: 1,
|
||||
bldgapprDetailsId:
|
||||
tempID.getInt('tempid')! - 1,
|
||||
classId: _classId,
|
||||
className: _className,
|
||||
structType: _structureType,
|
||||
unitValue: _withoutBUCC == true
|
||||
? 0
|
||||
: _unitValue,
|
||||
baseUnitValue: _unitBase,
|
||||
area: _areaValue,
|
||||
marketValue: (_unitValue * _unitBase) *
|
||||
_areaValue,
|
||||
depreciationRate: _depValue,
|
||||
adjustedMarketVal: _totalMarketValue(
|
||||
_unitValue,
|
||||
_unitBase,
|
||||
_areaValue,
|
||||
_depValue,
|
||||
_withoutBUCC,
|
||||
_className,
|
||||
isPainted,
|
||||
isSecondHand,
|
||||
_notPaintedUnitVal,
|
||||
_secondHandUnitVal),
|
||||
actualUse: 'Test',
|
||||
amtDepreciation: _amountofDepreciation(
|
||||
_unitValue,
|
||||
_unitBase,
|
||||
_areaValue,
|
||||
_depValue,
|
||||
_withoutBUCC,
|
||||
_className,
|
||||
isPainted,
|
||||
isSecondHand,
|
||||
_notPaintedUnitVal,
|
||||
_secondHandUnitVal),
|
||||
actualUse: 'Test',
|
||||
amtDepreciation: _amountofDepreciation(
|
||||
_unitValue,
|
||||
_unitBase,
|
||||
_areaValue,
|
||||
_depValue,
|
||||
),
|
||||
painted: true,
|
||||
secondhand: true,
|
||||
paintedUnitval: '1',
|
||||
secondhandUnitval: '1');
|
||||
),
|
||||
painted: true,
|
||||
secondhand: true,
|
||||
paintedUnitval: '1',
|
||||
secondhandUnitval: '1');
|
||||
|
||||
context
|
||||
.read<AdditionalItemBloc>()
|
||||
.add(AddAdditionalItems(items: itemss));
|
||||
context
|
||||
.read<AdditionalItemBloc>()
|
||||
.add(AddAdditionalItems(items: itemss));
|
||||
} catch (e) {
|
||||
Fluttertoast.showToast(
|
||||
msg:
|
||||
"Slow internet connection, please try again!",
|
||||
);
|
||||
}
|
||||
},
|
||||
style: ElevatedButton.styleFrom(
|
||||
primary: Colors.black,
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
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:intl/intl.dart';
|
||||
import 'package:unit2/bloc/passo/bulding/additional_item/additional_item_bloc.dart';
|
||||
import 'package:unit2/model/passo/class_components.dart';
|
||||
import 'package:unit2/model/passo/unit_construct.dart';
|
||||
import 'package:unit2/screens/passo/Building/add_building_components/AddExtraItems.dart';
|
||||
import 'package:unit2/utils/alerts.dart';
|
||||
import 'package:unit2/utils/text_container.dart';
|
||||
import 'package:unit2/widgets/error_state.dart';
|
||||
import 'package:unit2/widgets/passo/custom_button.dart';
|
||||
|
||||
class AdditionalItemPage extends StatefulWidget {
|
||||
|
@ -37,260 +41,252 @@ class _AdditionalItemPage extends State<AdditionalItemPage> {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocConsumer<AdditionalItemBloc, AdditionalItemState>(
|
||||
listener: (context, state) {
|
||||
// TODO: implement listener
|
||||
},
|
||||
builder: (context, state) {
|
||||
final state = context.watch<AdditionalItemBloc>().state;
|
||||
if (state is AdditionalItemsLoaded) {
|
||||
return Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('ADDITIONAL ITEMS',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.topRight,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Colors.red,
|
||||
return Scaffold(
|
||||
body: ProgressHUD(
|
||||
padding: const EdgeInsets.all(24),
|
||||
backgroundColor: Colors.black87,
|
||||
indicatorWidget: const SpinKitFadingCircle(color: Colors.white),
|
||||
child: BlocConsumer<AdditionalItemBloc, AdditionalItemState>(
|
||||
listener: (context, state) {
|
||||
if (state is AdditionalItemsLoading) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress!.showWithText("Please wait...");
|
||||
}
|
||||
if (state is AdditionalItemsLoaded) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
if (state is AdditionalItemsErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
},
|
||||
builder: (context, state) {
|
||||
final state = context.watch<AdditionalItemBloc>().state;
|
||||
if (state is AdditionalItemsLoaded) {
|
||||
return Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('ADDITIONAL ITEMS',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
onPressed: () {
|
||||
context
|
||||
.read<AdditionalItemBloc>()
|
||||
.add(ShowAdditionalItems());
|
||||
},
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: const [
|
||||
Text('ADD ITEM'), // <-- Text
|
||||
SizedBox(
|
||||
width: 5,
|
||||
Align(
|
||||
alignment: Alignment.topRight,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
Icon(
|
||||
// <-- Icon
|
||||
Icons.add,
|
||||
size: 24.0,
|
||||
onPressed: () {
|
||||
context
|
||||
.read<AdditionalItemBloc>()
|
||||
.add(ShowAdditionalItems());
|
||||
},
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: const [
|
||||
Text('ADD ITEM'), // <-- Text
|
||||
SizedBox(
|
||||
width: 5,
|
||||
),
|
||||
Icon(
|
||||
// <-- Icon
|
||||
Icons.add,
|
||||
size: 24.0,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: DataTable(
|
||||
// ignore: prefer_const_literals_to_create_immutables
|
||||
columns: [
|
||||
const DataColumn(
|
||||
label: Text('Items'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Unit Value'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('% of BUCC'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Market Value'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Action'),
|
||||
)
|
||||
],
|
||||
rows: state.items.map((dataRow) {
|
||||
return DataRow(
|
||||
cells: [
|
||||
DataCell(Text(dataRow.className)),
|
||||
DataCell(Text(dataRow.baseUnitValue)),
|
||||
DataCell(Text(dataRow.unitValue)),
|
||||
DataCell(Text(((double.parse(
|
||||
dataRow.adjustedMarketVal)))
|
||||
.toString())),
|
||||
DataCell(Row(
|
||||
children: [
|
||||
InkWell(
|
||||
child: Container(
|
||||
height: 30,
|
||||
width: 30,
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.red,
|
||||
),
|
||||
child: const Icon(
|
||||
Icons.delete,
|
||||
color: Colors.white,
|
||||
size: 20.0,
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
deleteItem(dataRow.id);
|
||||
},
|
||||
),
|
||||
const SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
InkWell(
|
||||
child: Container(
|
||||
height: 30,
|
||||
width: 30,
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.red,
|
||||
),
|
||||
child: const Icon(
|
||||
Icons.edit,
|
||||
color: Colors.white,
|
||||
size: 20.0,
|
||||
),
|
||||
),
|
||||
onTap: () {},
|
||||
),
|
||||
],
|
||||
))
|
||||
SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: DataTable(
|
||||
// ignore: prefer_const_literals_to_create_immutables
|
||||
columns: [
|
||||
const DataColumn(
|
||||
label: Text('Items'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Unit Value'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('% of BUCC'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Market Value'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Action'),
|
||||
)
|
||||
],
|
||||
);
|
||||
}).toList(),
|
||||
),
|
||||
rows: state.items.map((dataRow) {
|
||||
return DataRow(
|
||||
cells: [
|
||||
DataCell(Text(dataRow.className)),
|
||||
DataCell(Text(dataRow.baseUnitValue)),
|
||||
DataCell(Text(dataRow.unitValue)),
|
||||
DataCell(Text(((double.parse(
|
||||
dataRow.adjustedMarketVal)))
|
||||
.toString())),
|
||||
DataCell(Row(
|
||||
children: [
|
||||
InkWell(
|
||||
child: Container(
|
||||
height: 30,
|
||||
width: 30,
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.red,
|
||||
),
|
||||
child: const Icon(
|
||||
Icons.delete,
|
||||
color: Colors.white,
|
||||
size: 20.0,
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
deleteItem(dataRow.id);
|
||||
},
|
||||
),
|
||||
const SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
InkWell(
|
||||
child: Container(
|
||||
height: 30,
|
||||
width: 30,
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.red,
|
||||
),
|
||||
child: const Icon(
|
||||
Icons.edit,
|
||||
color: Colors.white,
|
||||
size: 20.0,
|
||||
),
|
||||
),
|
||||
onTap: () {},
|
||||
),
|
||||
],
|
||||
))
|
||||
],
|
||||
);
|
||||
}).toList(),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 20.0, right: 20.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
const Text(
|
||||
'Total',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold, fontSize: 15),
|
||||
),
|
||||
Text(
|
||||
NumberFormat.currency(locale: 'en-PH', symbol: "₱")
|
||||
.format(_totalMarketValue(state.items)),
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold, fontSize: 15),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 20.0, right: 20.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
const Text(
|
||||
'Total',
|
||||
style:
|
||||
TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.additionalItemsPrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.additionalItemsNextBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
Text(
|
||||
NumberFormat.currency(locale: 'en-PH', symbol: "₱")
|
||||
.format(_totalMarketValue(state.items)),
|
||||
style:
|
||||
TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.additionalItemsPrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.additionalItemsNextBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
if (state is AdditionalItemsDeletedState) {
|
||||
if (state.success) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
successAlert(context, "Deletion Successful",
|
||||
"Extra item has been deleted successfully", () {
|
||||
Navigator.of(context).pop();
|
||||
context
|
||||
.read<AdditionalItemBloc>()
|
||||
.add(const LoadAdditionalItems());
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
if (state is ShowAddItemsScreen) {
|
||||
return ConstrainedBox(
|
||||
constraints: BoxConstraints(maxHeight: 1000.0),
|
||||
child: AlertDialog(
|
||||
insetPadding: const EdgeInsets.symmetric(
|
||||
horizontal: 20.0,
|
||||
vertical: 10.0,
|
||||
),
|
||||
title: const Text(
|
||||
'ADD EXTRA ITEMS',
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(child: AddExtraItems(widget.unit, widget.options))
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
return Container(
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('ADDITIONAL MATERIALS',
|
||||
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.topRight,
|
||||
child: ElevatedButton(
|
||||
onPressed: () {
|
||||
);
|
||||
}
|
||||
if (state is AdditionalItemsDeletedState) {
|
||||
if (state.success) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
successAlert(context, "Deletion Successful",
|
||||
"Extra item has been deleted successfully", () {
|
||||
Navigator.of(context).pop();
|
||||
context
|
||||
.read<AdditionalItemBloc>()
|
||||
.add(ShowAdditionalItems());
|
||||
},
|
||||
child: Row(
|
||||
.add(const LoadAdditionalItems());
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
if (state is ShowAddItemsScreen) {
|
||||
return ConstrainedBox(
|
||||
constraints: BoxConstraints(maxHeight: 1000.0),
|
||||
child: AlertDialog(
|
||||
insetPadding: const EdgeInsets.symmetric(
|
||||
horizontal: 20.0,
|
||||
vertical: 10.0,
|
||||
),
|
||||
title: const Text(
|
||||
'ADD EXTRA ITEMS',
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: const [
|
||||
Text('ADD ITEM'), // <-- Text
|
||||
SizedBox(
|
||||
width: 5,
|
||||
),
|
||||
Icon(
|
||||
// <-- Icon
|
||||
Icons.add,
|
||||
size: 24.0,
|
||||
),
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(
|
||||
child: AddExtraItems(widget.unit, widget.options))
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
if (state is AdditionalItemsErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context.read<AdditionalItemBloc>().add(LoadAdditionalItems());
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import 'package:flutter_form_builder/flutter_form_builder.dart';
|
|||
import 'package:flutter_progress_hud/flutter_progress_hud.dart';
|
||||
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
||||
import 'package:fluttertoast/fluttertoast.dart';
|
||||
import 'package:form_builder_validators/form_builder_validators.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:unit2/bloc/passo/barangay/barangay_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/bulding/property_info/property_info_bloc.dart';
|
||||
|
@ -15,7 +16,9 @@ import 'package:unit2/model/passo/bldg_loc.dart';
|
|||
import 'package:unit2/model/passo/city.dart';
|
||||
import 'package:unit2/model/passo/land_ref.dart';
|
||||
import 'package:unit2/screens/passo/Building/add_building.dart';
|
||||
import 'package:unit2/theme-data.dart/colors.dart';
|
||||
import 'package:unit2/theme-data.dart/form-style.dart';
|
||||
import 'package:unit2/utils/alerts.dart';
|
||||
import 'package:unit2/utils/text_container.dart';
|
||||
import 'package:unit2/widgets/error_state.dart';
|
||||
import 'package:unit2/widgets/passo/custom_button.dart';
|
||||
|
@ -95,204 +98,298 @@ class _BldgLocationLandrefPage extends State<BldgLocationLandrefPage> {
|
|||
.map((brgy) => brgy.barangayDescription)
|
||||
.toList()
|
||||
.cast<String>();
|
||||
return SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(20.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('BUILDING LOCATION',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
return StatefulBuilder(builder: (context, locationState) {
|
||||
return SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(20.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('BUILDING LOCATION',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: Container(
|
||||
height: 45.0,
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
border: Border.all(
|
||||
color: Colors.grey,
|
||||
width: 1.0,
|
||||
),
|
||||
borderRadius:
|
||||
BorderRadius.circular(5.0),
|
||||
),
|
||||
child: Align(
|
||||
alignment: Alignment.center,
|
||||
child: Text(
|
||||
"AGUSAN DEL NORTE",
|
||||
style: TextStyle(fontSize: 15),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: FormBuilderDropdown<City>(
|
||||
name: 'municipality',
|
||||
autofocus: false,
|
||||
decoration: normalTextFieldStyle(
|
||||
"Municipality", ""),
|
||||
items: cityList
|
||||
.map((city) =>
|
||||
DropdownMenuItem<City>(
|
||||
value: city,
|
||||
child: Text(city
|
||||
.cityDescription!), // Use cityDescription instead of cityName
|
||||
))
|
||||
.toList(),
|
||||
onChanged: (selectedCity) {
|
||||
if (selectedCity != null) {
|
||||
final selectedCityCode =
|
||||
selectedCity.cityCode;
|
||||
final barangayBloc =
|
||||
context.read<BarangayBloc>();
|
||||
barangayBloc.add(LoadBarangay(
|
||||
id: selectedCityCode!)); // Use selectedCityCode directly
|
||||
}
|
||||
},
|
||||
)),
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Province / City", "", 'province')),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
"No. / Street", "", 'street'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customDropDownField(
|
||||
"Brgy. / District",
|
||||
"",
|
||||
'brgy',
|
||||
brgyNAmes))
|
||||
]),
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('LAND REFERENCE',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
customTextField("Land Owner", "", 'l_owner'),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: FormBuilderDropdown<City>(
|
||||
name: 'municipality',
|
||||
autofocus: false,
|
||||
decoration: normalTextFieldStyle(
|
||||
"Municipality", ""),
|
||||
items: cityList
|
||||
.map((city) =>
|
||||
DropdownMenuItem<City>(
|
||||
value: city,
|
||||
child: Text(city
|
||||
.cityDescription!), // Use cityDescription instead of cityName
|
||||
))
|
||||
.toList(),
|
||||
onChanged: (selectedCity) {
|
||||
if (selectedCity != null) {
|
||||
final selectedCityCode =
|
||||
selectedCity.cityCode;
|
||||
final barangayBloc =
|
||||
context.read<BarangayBloc>();
|
||||
barangayBloc.add(LoadBarangay(
|
||||
id: selectedCityCode!)); // Use selectedCityCode directly
|
||||
}
|
||||
},
|
||||
)),
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"No. / Street", "", 'street'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customDropDownField(
|
||||
"Brgy. / District",
|
||||
"",
|
||||
'brgy',
|
||||
brgyNAmes))
|
||||
]),
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('LAND REFERENCE',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
customTextField("Land Owner", "", 'l_owner'),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"OCT/TCT/CLOA No.", "", 'oct_tct_cloa'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
child: customTextField("OCT/TCT/CLOA No.",
|
||||
"", 'oct_tct_cloa'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Survey No.", "", 'survey_no'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Survey No.", "", 'survey_no'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Lot No.", "", 'lot_no'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
"Lot No.", "", 'lot_no'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Blk No.", "", 'blk_no'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Blk No.", "", 'blk_no'))
|
||||
]),
|
||||
Row(
|
||||
"TD / ARP No.", "", 'l_td_arp'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child:
|
||||
customTextField("Area", "", 'area'))
|
||||
]),
|
||||
SizedBox(
|
||||
height: 50,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"TD / ARP No.", "", 'l_td_arp'),
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.PrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child:
|
||||
customTextField("Area", "", 'area'))
|
||||
]),
|
||||
SizedBox(
|
||||
height: 50,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.PrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () async {
|
||||
{
|
||||
final tempID =
|
||||
await SharedPreferences.getInstance();
|
||||
var bldgLocData = BldgLoc(
|
||||
id: tempID.getInt('tempid')! - 1,
|
||||
street: formKey
|
||||
.currentState?.value['street'],
|
||||
barangay:
|
||||
formKey.currentState?.value['brgy'],
|
||||
municipality: formKey
|
||||
.currentState
|
||||
?.value['municipality']
|
||||
.cityDescription,
|
||||
province: formKey
|
||||
.currentState?.value['province'],
|
||||
);
|
||||
var landRefData = LandRef(
|
||||
id: tempID.getInt('tempid')! - 1,
|
||||
owner: formKey
|
||||
.currentState?.value['l_owner'],
|
||||
cloaNo: formKey.currentState
|
||||
?.value['oct_tct_cloa'],
|
||||
lotNo: formKey
|
||||
.currentState?.value['lot_no'],
|
||||
tdn: formKey
|
||||
.currentState?.value['l_td_arp'],
|
||||
area:
|
||||
formKey.currentState?.value['area'],
|
||||
surveyNo: formKey
|
||||
.currentState?.value['survey_no'],
|
||||
blkNo: formKey
|
||||
.currentState?.value['blk_no'],
|
||||
);
|
||||
context.read<PropertyInfoBloc>()
|
||||
..add(UpdateBldgLoc(
|
||||
bldg_loc: bldgLocData))
|
||||
..add(UpdateLandRef(
|
||||
land_ref: landRefData));
|
||||
// Builder(builder: (context) {
|
||||
// return CustomButton(
|
||||
// icon: const Icon(
|
||||
// Icons.chevron_right_rounded,
|
||||
// color: Colors.white),
|
||||
// onPressed: () async {
|
||||
// {
|
||||
// try {
|
||||
// final progress =
|
||||
// ProgressHUD.of(context);
|
||||
// Future.delayed(Duration(seconds: 3),
|
||||
// () {
|
||||
// progress?.dismiss();
|
||||
// });
|
||||
// final tempID = await SharedPreferences
|
||||
// .getInstance();
|
||||
// var bldgLocData = BldgLoc(
|
||||
// id: tempID.getInt('tempid')! - 1,
|
||||
// street: formKey.currentState
|
||||
// ?.value['street'],
|
||||
// barangay: formKey
|
||||
// .currentState?.value['brgy'],
|
||||
// municipality: formKey
|
||||
// .currentState
|
||||
// ?.value['municipality']
|
||||
// .cityDescription,
|
||||
// province: "Agusan Del Norte");
|
||||
// var landRefData = LandRef(
|
||||
// id: tempID.getInt('tempid')! - 1,
|
||||
// owner: formKey
|
||||
// .currentState?.value['l_owner'],
|
||||
// cloaNo: formKey.currentState
|
||||
// ?.value['oct_tct_cloa'],
|
||||
// lotNo: formKey
|
||||
// .currentState?.value['lot_no'],
|
||||
// tdn: formKey.currentState
|
||||
// ?.value['l_td_arp'],
|
||||
// area: formKey
|
||||
// .currentState?.value['area'],
|
||||
// surveyNo: formKey.currentState
|
||||
// ?.value['survey_no'],
|
||||
// blkNo: formKey
|
||||
// .currentState?.value['blk_no'],
|
||||
// );
|
||||
// context.read<PropertyInfoBloc>()
|
||||
// ..add(UpdateBldgLoc(
|
||||
// bldg_loc: bldgLocData))
|
||||
// ..add(UpdateLandRef(
|
||||
// land_ref: landRefData));
|
||||
// } catch (e) {
|
||||
// Fluttertoast.showToast(
|
||||
// msg:
|
||||
// "Slow internet connection, please try again!");
|
||||
// }
|
||||
// }
|
||||
// ;
|
||||
// },
|
||||
// );
|
||||
// })
|
||||
Builder(builder: (context) {
|
||||
return CustomButton(
|
||||
icon: const Icon(
|
||||
Icons.chevron_right_rounded,
|
||||
color: Colors.white,
|
||||
),
|
||||
onPressed: () async {
|
||||
try {
|
||||
// Get the ProgressHUD instance
|
||||
final progress =
|
||||
ProgressHUD.of(context);
|
||||
|
||||
widget.NextBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
)
|
||||
],
|
||||
// Show the progress indicator
|
||||
progress?.show();
|
||||
|
||||
// Dismiss the progress indicator
|
||||
progress?.dismiss();
|
||||
|
||||
// Rest of your code...
|
||||
final tempID = await SharedPreferences
|
||||
.getInstance();
|
||||
var bldgLocData = BldgLoc(
|
||||
id: tempID.getInt('tempid')! - 1,
|
||||
street: formKey.currentState
|
||||
?.value['street'],
|
||||
barangay: formKey
|
||||
.currentState?.value['brgy'],
|
||||
municipality: formKey
|
||||
.currentState
|
||||
?.value['municipality']
|
||||
.cityDescription,
|
||||
province: "Agusan Del Norte");
|
||||
var landRefData = LandRef(
|
||||
id: tempID.getInt('tempid')! - 1,
|
||||
owner: formKey
|
||||
.currentState?.value['l_owner'],
|
||||
cloaNo: formKey.currentState
|
||||
?.value['oct_tct_cloa'],
|
||||
lotNo: formKey
|
||||
.currentState?.value['lot_no'],
|
||||
tdn: formKey.currentState
|
||||
?.value['l_td_arp'],
|
||||
area: formKey
|
||||
.currentState?.value['area'],
|
||||
surveyNo: formKey.currentState
|
||||
?.value['survey_no'],
|
||||
blkNo: formKey
|
||||
.currentState?.value['blk_no'],
|
||||
);
|
||||
context.read<PropertyInfoBloc>()
|
||||
..add(UpdateBldgLoc(
|
||||
bldg_loc: bldgLocData))
|
||||
..add(UpdateLandRef(
|
||||
land_ref: landRefData));
|
||||
} catch (e) {
|
||||
Fluttertoast.showToast(
|
||||
msg:
|
||||
"Slow internet connection, please try again!",
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
})
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
);
|
||||
});
|
||||
}
|
||||
if (state is BarangayErrorState) {
|
||||
return SomethingWentWrong(
|
||||
|
@ -314,6 +411,22 @@ class _BldgLocationLandrefPage extends State<BldgLocationLandrefPage> {
|
|||
},
|
||||
);
|
||||
}
|
||||
if (state is ShowBldgLocErrorAlertState) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
errorAlert(
|
||||
context, "Something went wrong", "Please try again...", () {
|
||||
Navigator.of(context).pop();
|
||||
});
|
||||
});
|
||||
}
|
||||
if (state is ShowLandRefErrorAlertState) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
errorAlert(
|
||||
context, "Something went wrong", "Please try again...", () {
|
||||
Navigator.of(context).pop();
|
||||
});
|
||||
});
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
),
|
||||
|
@ -325,12 +438,13 @@ class _BldgLocationLandrefPage extends State<BldgLocationLandrefPage> {
|
|||
// Wait for the state change indicating completion
|
||||
final propertyInfoState = context.read<PropertyInfoBloc>().state;
|
||||
|
||||
if (propertyInfoState is PropertyInfoErrorState) {
|
||||
if (propertyInfoState is ShowBldgLocErrorAlertState ||
|
||||
propertyInfoState is ShowLandRefErrorAlertState) {
|
||||
// Check if the add operation was successful
|
||||
return true; // You'll need to define this in your state class
|
||||
return false; // You'll need to define this in your state class
|
||||
}
|
||||
|
||||
// Return false if the state didn't change as expected
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
||||
import 'package:fluttertoast/fluttertoast.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:unit2/bloc/passo/bulding/property_info/property_info_bloc.dart';
|
||||
import 'package:unit2/model/passo/general_description.dart';
|
||||
|
@ -177,41 +178,48 @@ class _GeneralDescriptionPage extends State<GeneralDescriptionPage> {
|
|||
color: Colors.white),
|
||||
onPressed: () async {
|
||||
{
|
||||
final tempID = await SharedPreferences.getInstance();
|
||||
widget.onPutGeneralDescription();
|
||||
var genDescData = GeneralDesc(
|
||||
id: tempID.getInt('tempid')! - 1,
|
||||
bldgKind:
|
||||
formKey.currentState?.value['bldg_type'].building,
|
||||
strucType:
|
||||
formKey.currentState?.value['bldg_type'].bldgType,
|
||||
bldgPermit:
|
||||
formKey.currentState?.value['bldg_permit'],
|
||||
dateIssued: formKey.currentState?.value['coc_issued'],
|
||||
cct: formKey.currentState?.value['cct'],
|
||||
certCompletionIssued:
|
||||
formKey.currentState?.value['coc_issued'],
|
||||
certOccupancyIssued:
|
||||
formKey.currentState?.value['coo_issued'],
|
||||
dateCompleted:
|
||||
formKey.currentState?.value['date_cnstructed'],
|
||||
dateOccupied:
|
||||
formKey.currentState?.value['date_occupied'],
|
||||
bldgAge: int.tryParse(
|
||||
formKey.currentState?.value['bldg_age']),
|
||||
noStoreys: int.tryParse(
|
||||
formKey.currentState?.value['no_of_storeys']),
|
||||
area1Stfloor: '0',
|
||||
area2Ndfloor: '0',
|
||||
area3Rdfloor: '0',
|
||||
area4Thfloor: '0',
|
||||
totalFloorArea:
|
||||
formKey.currentState?.value['total_area'],
|
||||
floorSketch: null,
|
||||
actualUse: formKey.currentState?.value['actual_use']);
|
||||
try {
|
||||
final tempID = await SharedPreferences.getInstance();
|
||||
|
||||
context.read<PropertyInfoBloc>()
|
||||
..add(UpdateGeneralDesc(gen_desc: genDescData));
|
||||
var genDescData = GeneralDesc(
|
||||
id: tempID.getInt('tempid')! - 1,
|
||||
bldgKind: formKey
|
||||
.currentState?.value['bldg_type'].building,
|
||||
strucType: formKey
|
||||
.currentState?.value['bldg_type'].bldgType,
|
||||
bldgPermit:
|
||||
formKey.currentState?.value['bldg_permit'],
|
||||
dateIssued:
|
||||
formKey.currentState?.value['coc_issued'],
|
||||
cct: formKey.currentState?.value['cct'],
|
||||
certCompletionIssued:
|
||||
formKey.currentState?.value['coc_issued'],
|
||||
certOccupancyIssued:
|
||||
formKey.currentState?.value['coo_issued'],
|
||||
dateCompleted:
|
||||
formKey.currentState?.value['date_cnstructed'],
|
||||
dateOccupied:
|
||||
formKey.currentState?.value['date_occupied'],
|
||||
bldgAge: int.tryParse(
|
||||
formKey.currentState?.value['bldg_age']),
|
||||
noStoreys: int.tryParse(
|
||||
formKey.currentState?.value['no_of_storeys']),
|
||||
area1Stfloor: '0',
|
||||
area2Ndfloor: '0',
|
||||
area3Rdfloor: '0',
|
||||
area4Thfloor: '0',
|
||||
totalFloorArea:
|
||||
formKey.currentState?.value['total_area'],
|
||||
floorSketch: null,
|
||||
actualUse:
|
||||
formKey.currentState?.value['actual_use']);
|
||||
|
||||
context.read<PropertyInfoBloc>()
|
||||
..add(UpdateGeneralDesc(gen_desc: genDescData));
|
||||
} catch (e) {
|
||||
Fluttertoast.showToast(
|
||||
msg: "Slow internet connection, please try again!");
|
||||
}
|
||||
}
|
||||
;
|
||||
},
|
||||
|
@ -223,4 +231,17 @@ class _GeneralDescriptionPage extends State<GeneralDescriptionPage> {
|
|||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<bool> _waitForAddPropertyInfoToComplete() async {
|
||||
// Wait for the state change indicating completion
|
||||
final propertyInfoState = context.read<PropertyInfoBloc>().state;
|
||||
|
||||
if (propertyInfoState is ShowGenDescErrorAlertState) {
|
||||
// Check if the add operation was unsuccessful
|
||||
return true; // You'll need to define this in your state class
|
||||
}
|
||||
|
||||
// Return false if the state didn't change as expected
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'package:intl/intl.dart';
|
|||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:unit2/bloc/passo/bulding/additional_item/additional_item_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/bulding/property_appraisal/property_appraisal_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/bulding/property_info/property_info_bloc.dart';
|
||||
import 'package:unit2/model/passo/additional_items.dart';
|
||||
import 'package:unit2/model/passo/property_appraisal.dart';
|
||||
import 'package:unit2/screens/passo/Building/add_building.dart';
|
||||
|
@ -1029,4 +1030,17 @@ class _PropertyAppraisalPage extends State<PropertyAppraisalPage> {
|
|||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future<bool> _waitForAddPropertyInfoToComplete() async {
|
||||
// Wait for the state change indicating completion
|
||||
final propertyInfoState = context.read<PropertyInfoBloc>().state;
|
||||
|
||||
if (propertyInfoState is PropertyInfoErrorState) {
|
||||
// Check if the add operation was unsuccessful
|
||||
return true; // You'll need to define this in your state class
|
||||
}
|
||||
|
||||
// Return false if the state didn't change as expected
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1002,76 +1002,104 @@ class _PropertyAssessmentPage extends State<PropertyAssessmentPage> {
|
|||
bldgapprDetailsId:
|
||||
tempID.getInt('tempid')! - 1,
|
||||
actualUse: formKey.currentState!
|
||||
.value['actual_use'],
|
||||
.value['actual_use'] ??
|
||||
'', // Replace null with an empty string
|
||||
marketValue: '0.00',
|
||||
assessmentLevel: '0.00',
|
||||
assessedValue: '0.00',
|
||||
taxable: isTaxable,
|
||||
exempt: isExempt,
|
||||
qtr: int.parse(formKey
|
||||
.currentState!.value['qtr']),
|
||||
.currentState!
|
||||
.value['qtr'] ??
|
||||
'0'), // Replace null with '0'
|
||||
yr: int.parse(formKey
|
||||
.currentState!.value['yr']),
|
||||
appraisedbyName: formKey
|
||||
.currentState!
|
||||
.value['appraised_by']
|
||||
.firstname +
|
||||
.value['yr'] ??
|
||||
'0'), // Replace null with '0'
|
||||
appraisedbyName: (formKey
|
||||
.currentState!
|
||||
.value['appraised_by']
|
||||
?.firstname ??
|
||||
'') +
|
||||
' ' +
|
||||
formKey
|
||||
.currentState!
|
||||
.value['appraised_by']
|
||||
.middlename +
|
||||
(formKey
|
||||
.currentState!
|
||||
.value['appraised_by']
|
||||
?.middlename ??
|
||||
'') +
|
||||
' ' +
|
||||
formKey
|
||||
.currentState!
|
||||
.value['appraised_by']
|
||||
.lastname,
|
||||
(formKey
|
||||
.currentState!
|
||||
.value['appraised_by']
|
||||
?.lastname ??
|
||||
''),
|
||||
appraisedbyDate: formKey
|
||||
.currentState!
|
||||
.value['app_date'],
|
||||
recommendapprName: formKey
|
||||
.currentState!
|
||||
.value['rec_approval']
|
||||
.firstname +
|
||||
.currentState!
|
||||
.value['app_date']
|
||||
as DateTime? ??
|
||||
DateTime
|
||||
.now(), // Replace null with current date
|
||||
recommendapprName: (formKey
|
||||
.currentState!
|
||||
.value['rec_approval']
|
||||
?.firstname ??
|
||||
'') +
|
||||
' ' +
|
||||
formKey
|
||||
.currentState!
|
||||
.value['rec_approval']
|
||||
.middlename +
|
||||
(formKey
|
||||
.currentState!
|
||||
.value['rec_approval']
|
||||
?.middlename ??
|
||||
'') +
|
||||
' ' +
|
||||
formKey
|
||||
.currentState!
|
||||
.value['rec_approval']
|
||||
.lastname,
|
||||
(formKey
|
||||
.currentState!
|
||||
.value['rec_approval']
|
||||
?.lastname ??
|
||||
''),
|
||||
recommendapprDate: formKey
|
||||
.currentState!
|
||||
.value['rec_date'],
|
||||
approvedbyName: formKey
|
||||
.currentState!
|
||||
.value['apprvd_by']
|
||||
.firstname +
|
||||
.currentState!
|
||||
.value['rec_date']
|
||||
as DateTime? ??
|
||||
DateTime
|
||||
.now(), // Replace null with current date
|
||||
approvedbyName: (formKey
|
||||
.currentState!
|
||||
.value['apprvd_by']
|
||||
?.firstname ??
|
||||
'') +
|
||||
' ' +
|
||||
formKey
|
||||
.currentState!
|
||||
.value['apprvd_by']
|
||||
.middlename +
|
||||
(formKey
|
||||
.currentState!
|
||||
.value['apprvd_by']
|
||||
?.middlename ??
|
||||
'') +
|
||||
' ' +
|
||||
formKey
|
||||
.currentState!
|
||||
.value['apprvd_by']
|
||||
.lastname,
|
||||
(formKey
|
||||
.currentState!
|
||||
.value['apprvd_by']
|
||||
?.lastname ??
|
||||
''),
|
||||
memoranda: _memoranda,
|
||||
swornstatementNo: formKey
|
||||
.currentState!
|
||||
.value['sworn_statement'],
|
||||
.currentState!.value[
|
||||
'sworn_statement'] ??
|
||||
'', // Replace null with an empty string
|
||||
dateReceived: formKey
|
||||
.currentState!
|
||||
.value['date_received'],
|
||||
.currentState!
|
||||
.value['date_received']
|
||||
as DateTime? ??
|
||||
DateTime
|
||||
.now(), // Replace null with current date
|
||||
entryDateAssessment: formKey
|
||||
.currentState!
|
||||
.value['date_of_entry'],
|
||||
entryDateBy: formKey
|
||||
.currentState!.value['by'],
|
||||
.currentState!
|
||||
.value['date_of_entry']
|
||||
as DateTime? ??
|
||||
DateTime
|
||||
.now(), // Replace null with current date
|
||||
entryDateBy: formKey.currentState!
|
||||
.value['by'] ??
|
||||
'', // Replace null with an empty string
|
||||
);
|
||||
|
||||
propertyAssessments.add(ass);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
||||
import 'package:fluttertoast/fluttertoast.dart';
|
||||
import 'package:unit2/bloc/passo/bulding/property_info/property_info_bloc.dart';
|
||||
import 'package:unit2/model/passo/property_info.dart';
|
||||
import 'package:unit2/screens/passo/Building/add_building.dart';
|
||||
|
@ -98,42 +99,52 @@ class _PropertyInfoPage extends State<PropertyInfoPage> {
|
|||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right, color: Colors.white),
|
||||
onPressed: () async {
|
||||
var property_info = PropertyInfo(
|
||||
id: 1,
|
||||
transCode: formKey.currentState!.value['transaction_code']
|
||||
.toString(),
|
||||
tdn: formKey.currentState!.value['arp_td'],
|
||||
pin: formKey.currentState!.value['pin'],
|
||||
owner: formKey.currentState!.value['owner'],
|
||||
address: formKey.currentState!.value['address'],
|
||||
telno: formKey.currentState!.value['tel_no'],
|
||||
tin: formKey.currentState!.value['tin'],
|
||||
adminUser: formKey.currentState!.value['benificiary'],
|
||||
adminAddress:
|
||||
formKey.currentState!.value['benificiary_address'],
|
||||
adminTin: formKey.currentState!.value['benificiary_tin'],
|
||||
adminTelno:
|
||||
formKey.currentState!.value['benificiary_telno'],
|
||||
assessedById: '1',
|
||||
assessedByName: 'Cyril',
|
||||
faasType: "BUILDING",
|
||||
dateModified: DateTime.now(),
|
||||
dateCreated: DateTime.now());
|
||||
try {
|
||||
var property_info = PropertyInfo(
|
||||
id: 1,
|
||||
transCode: formKey
|
||||
.currentState!.value['transaction_code']
|
||||
.toString(),
|
||||
tdn: formKey.currentState!.value['arp_td'],
|
||||
pin: formKey.currentState!.value['pin'],
|
||||
owner: formKey.currentState!.value['owner'],
|
||||
address: formKey.currentState!.value['address'],
|
||||
telno: formKey.currentState!.value['tel_no'],
|
||||
tin: formKey.currentState!.value['tin'],
|
||||
adminUser: formKey.currentState!.value['benificiary'],
|
||||
adminAddress:
|
||||
formKey.currentState!.value['benificiary_address'],
|
||||
adminTin:
|
||||
formKey.currentState!.value['benificiary_tin'],
|
||||
adminTelno:
|
||||
formKey.currentState!.value['benificiary_telno'],
|
||||
assessedById: '1',
|
||||
assessedByName: 'Cyril',
|
||||
faasType: "BUILDING",
|
||||
dateModified: DateTime.now(),
|
||||
dateCreated: DateTime.now());
|
||||
|
||||
// Dispatch the event to add the property_info
|
||||
context.read<PropertyInfoBloc>().add(
|
||||
AddPropertyInfo(property_info: property_info),
|
||||
);
|
||||
// Dispatch the event to add the property_info
|
||||
context.read<PropertyInfoBloc>().add(
|
||||
AddPropertyInfo(property_info: property_info),
|
||||
);
|
||||
widget.handleButtonPress();
|
||||
} catch (e) {
|
||||
Fluttertoast.showToast(
|
||||
msg: "Slow internet connection, please try again!");
|
||||
}
|
||||
|
||||
// Wait for the event to complete and get the result
|
||||
bool success = await _waitForAddPropertyInfoToComplete();
|
||||
// bool failed = await _waitForAddPropertyInfoToComplete();
|
||||
|
||||
if (success) {
|
||||
// Proceed to the next step or perform an action
|
||||
widget.handleButtonPress();
|
||||
} else {
|
||||
// Stay or show an error message
|
||||
}
|
||||
// if (failed) {
|
||||
// // Proceed to the next step or perform an action
|
||||
// Fluttertoast.showToast(
|
||||
// msg: "Slow internet connection, please try again!");
|
||||
// } else {
|
||||
// // Stay or show an error message
|
||||
// widget.handleButtonPress();
|
||||
// }
|
||||
},
|
||||
)
|
||||
]),
|
||||
|
@ -145,8 +156,8 @@ class _PropertyInfoPage extends State<PropertyInfoPage> {
|
|||
// Wait for the state change indicating completion
|
||||
final propertyInfoState = context.read<PropertyInfoBloc>().state;
|
||||
|
||||
if (propertyInfoState is PropertyInfoLoaded) {
|
||||
// Check if the add operation was successful
|
||||
if (propertyInfoState is PropertyInfoErrorState) {
|
||||
// Check if the add operation was unsuccessful
|
||||
return true; // You'll need to define this in your state class
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:fluttertoast/fluttertoast.dart';
|
||||
import 'package:multiselect/multiselect.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:unit2/bloc/passo/bulding/property_info/property_info_bloc.dart';
|
||||
|
@ -51,371 +52,380 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SingleChildScrollView(
|
||||
padding: const EdgeInsets.all(30.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin:
|
||||
const EdgeInsets.only(left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('STRUCTURAL MATERIALS',
|
||||
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'FOUNDATION',
|
||||
textAlign: TextAlign.start,
|
||||
return StatefulBuilder(builder: (context, structuralState) {
|
||||
return SingleChildScrollView(
|
||||
padding: const EdgeInsets.all(30.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin:
|
||||
const EdgeInsets.only(left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('STRUCTURAL MATERIALS',
|
||||
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: foundationOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
foundationOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: foundationOthers,
|
||||
child: customTextField(
|
||||
"Enter other foundation", "", "other_foundation"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
foundation = x;
|
||||
});
|
||||
},
|
||||
options: const ['Reinforced Concrete', 'Plain Concrete'],
|
||||
selectedValues: foundation,
|
||||
whenEmpty: 'Select Foundations',
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'FOUNDATION',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'COLUMNS',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: columOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
columOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: columOthers,
|
||||
child: customTextField("Enter other columns", "", "other_column"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
column = x;
|
||||
});
|
||||
},
|
||||
options: const ['Steel', 'Reinforced Concrete', 'Wood'],
|
||||
selectedValues: column,
|
||||
whenEmpty: 'Select Column/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'BEAMS',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: beamsOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
beamsOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: beamsOthers,
|
||||
child: customTextField("Enter other beam/s", "", "other_beam"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
beam = x;
|
||||
});
|
||||
},
|
||||
options: const ['Steel', 'Reinforced Concrete', 'Wood'],
|
||||
selectedValues: beam,
|
||||
whenEmpty: 'Select Beam/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'TRUSS FRAMING',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: tfOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
tfOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: tfOthers,
|
||||
child: customTextField(
|
||||
"Enter other truss framing/s", "", "other_tf"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
truss_framing = x;
|
||||
});
|
||||
},
|
||||
options: const ['Steel', 'Wood'],
|
||||
selectedValues: truss_framing,
|
||||
whenEmpty: 'Select Truss Framing/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'ROOF',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: roofOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
roofOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: roofOthers,
|
||||
child: customTextField("Enter other roof/s", "", "other_roof"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
roof = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Reinforced Concrete',
|
||||
'Tiles',
|
||||
'G.I Sheet',
|
||||
'Aluminum',
|
||||
'Asbestos',
|
||||
'Long Span',
|
||||
'Concrete Desk',
|
||||
'Nipa/Anahaw/Cogon'
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: foundationOthers,
|
||||
onChanged: (bool? value) {
|
||||
structuralState(() {
|
||||
foundationOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
selectedValues: roof,
|
||||
whenEmpty: 'Select Roof/s',
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: foundationOthers,
|
||||
child: customTextField(
|
||||
"Enter other foundation", "", "other_foundation"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
structuralState(() {
|
||||
foundation = x;
|
||||
});
|
||||
},
|
||||
options: const ['Reinforced Concrete', 'Plain Concrete'],
|
||||
selectedValues: foundation,
|
||||
whenEmpty: 'Select Foundations',
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'FLOORING',
|
||||
textAlign: TextAlign.start,
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'COLUMNS',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: columOthers,
|
||||
onChanged: (bool? value) {
|
||||
structuralState(() {
|
||||
columOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: columOthers,
|
||||
child:
|
||||
customTextField("Enter other columns", "", "other_column"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
structuralState(() {
|
||||
column = x;
|
||||
});
|
||||
},
|
||||
options: const ['Steel', 'Reinforced Concrete', 'Wood'],
|
||||
selectedValues: column,
|
||||
whenEmpty: 'Select Column/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'BEAMS',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: beamsOthers,
|
||||
onChanged: (bool? value) {
|
||||
structuralState(() {
|
||||
beamsOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: beamsOthers,
|
||||
child: customTextField("Enter other beam/s", "", "other_beam"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
structuralState(() {
|
||||
beam = x;
|
||||
});
|
||||
},
|
||||
options: const ['Steel', 'Reinforced Concrete', 'Wood'],
|
||||
selectedValues: beam,
|
||||
whenEmpty: 'Select Beam/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'TRUSS FRAMING',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: tfOthers,
|
||||
onChanged: (bool? value) {
|
||||
structuralState(() {
|
||||
tfOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: tfOthers,
|
||||
child: customTextField(
|
||||
"Enter other truss framing/s", "", "other_tf"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
structuralState(() {
|
||||
truss_framing = x;
|
||||
});
|
||||
},
|
||||
options: const ['Steel', 'Wood'],
|
||||
selectedValues: truss_framing,
|
||||
whenEmpty: 'Select Truss Framing/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'ROOF',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: roofOthers,
|
||||
onChanged: (bool? value) {
|
||||
structuralState(() {
|
||||
roofOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: roofOthers,
|
||||
child: customTextField("Enter other roof/s", "", "other_roof"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
structuralState(() {
|
||||
roof = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Reinforced Concrete',
|
||||
'Tiles',
|
||||
'G.I Sheet',
|
||||
'Aluminum',
|
||||
'Asbestos',
|
||||
'Long Span',
|
||||
'Concrete Desk',
|
||||
'Nipa/Anahaw/Cogon'
|
||||
],
|
||||
selectedValues: roof,
|
||||
whenEmpty: 'Select Roof/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'FLOORING',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: flooringOthers,
|
||||
onChanged: (bool? value) {
|
||||
structuralState(() {
|
||||
flooringOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: flooringOthers,
|
||||
child: customTextField(
|
||||
"Enter other flooring/s", "", "other_flooring"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
structuralState(() {
|
||||
flooring = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Reinforced Concrete',
|
||||
'Plain Cement',
|
||||
'Marble',
|
||||
'Wood',
|
||||
'Tiles'
|
||||
],
|
||||
selectedValues: flooring,
|
||||
whenEmpty: 'Select Flooring/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'WALLS & PARTITIONS',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: wpOthers,
|
||||
onChanged: (bool? value) {
|
||||
structuralState(() {
|
||||
wpOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: wpOthers,
|
||||
child: customTextField(
|
||||
"Enter other walls & partition/s", "", "other_wp"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
walls = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Reinforced Concrete',
|
||||
'Plain Concrete',
|
||||
'Wood',
|
||||
'CHIB',
|
||||
'G.I Sheet',
|
||||
'Build-a-wall',
|
||||
'Sawali',
|
||||
'Bamboo'
|
||||
],
|
||||
selectedValues: walls,
|
||||
whenEmpty: 'Select Walls & Partition/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: flooringOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
flooringOthers = value!;
|
||||
});
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.PrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () async {
|
||||
{
|
||||
try {
|
||||
final tempID = await SharedPreferences.getInstance();
|
||||
var strucMaterials = StructureMaterialsII(
|
||||
id: tempID.getInt('tempid')! - 1,
|
||||
foundation: foundationOthers
|
||||
? formKey
|
||||
.currentState!.value['other_foundation']
|
||||
.split(',')
|
||||
: foundation,
|
||||
columns: columOthers
|
||||
? formKey.currentState!.value['other_column']
|
||||
.split(',')
|
||||
: column,
|
||||
beams: beamsOthers
|
||||
? formKey.currentState!.value['other_beam']
|
||||
.split(',')
|
||||
: beam,
|
||||
trussFraming: tfOthers
|
||||
? formKey.currentState!.value['other_tf']
|
||||
.split(',')
|
||||
: truss_framing,
|
||||
roof: roofOthers
|
||||
? formKey.currentState!.value['other_roof']
|
||||
.split(',')
|
||||
: roof,
|
||||
flooring: flooringOthers
|
||||
? formKey.currentState!.value['other_flooring']
|
||||
.split(',')
|
||||
: flooring,
|
||||
walls: wpOthers
|
||||
? formKey.currentState!.value['other_wp']
|
||||
.split(',')
|
||||
: walls,
|
||||
others: ["Others"]);
|
||||
context.read<PropertyInfoBloc>()
|
||||
..add(UpdateStrucMaterials(data: strucMaterials));
|
||||
} catch (e) {
|
||||
Fluttertoast.showToast(
|
||||
msg: "Slow internet connection, please try again!");
|
||||
}
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: flooringOthers,
|
||||
child: customTextField(
|
||||
"Enter other flooring/s", "", "other_flooring"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
flooring = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Reinforced Concrete',
|
||||
'Plain Cement',
|
||||
'Marble',
|
||||
'Wood',
|
||||
'Tiles'
|
||||
],
|
||||
selectedValues: flooring,
|
||||
whenEmpty: 'Select Flooring/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'WALLS & PARTITIONS',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: wpOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
wpOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: wpOthers,
|
||||
child: customTextField(
|
||||
"Enter other walls & partition/s", "", "other_wp"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
walls = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Reinforced Concrete',
|
||||
'Plain Concrete',
|
||||
'Wood',
|
||||
'CHIB',
|
||||
'G.I Sheet',
|
||||
'Build-a-wall',
|
||||
'Sawali',
|
||||
'Bamboo'
|
||||
],
|
||||
selectedValues: walls,
|
||||
whenEmpty: 'Select Walls & Partition/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon:
|
||||
const Icon(Icons.chevron_left_rounded, color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.NextBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () async {
|
||||
{
|
||||
final tempID = await SharedPreferences.getInstance();
|
||||
var strucMaterials = StructureMaterialsII(
|
||||
id: tempID.getInt('tempid')! - 1,
|
||||
foundation: foundationOthers
|
||||
? formKey.currentState!.value['other_foundation']
|
||||
.split(',')
|
||||
: foundation,
|
||||
columns: columOthers
|
||||
? formKey.currentState!.value['other_column']
|
||||
.split(',')
|
||||
: column,
|
||||
beams: beamsOthers
|
||||
? formKey.currentState!.value['other_beam']
|
||||
.split(',')
|
||||
: beam,
|
||||
trussFraming: tfOthers
|
||||
? formKey.currentState!.value['other_tf'].split(',')
|
||||
: truss_framing,
|
||||
roof: roofOthers
|
||||
? formKey.currentState!.value['other_roof']
|
||||
.split(',')
|
||||
: roof,
|
||||
flooring: flooringOthers
|
||||
? formKey.currentState!.value['other_flooring']
|
||||
.split(',')
|
||||
: flooring,
|
||||
walls: wpOthers
|
||||
? formKey.currentState!.value['other_wp'].split(',')
|
||||
: walls,
|
||||
others: ["Others"]);
|
||||
context.read<PropertyInfoBloc>()
|
||||
..add(UpdateStrucMaterials(data: strucMaterials));
|
||||
|
||||
widget.PrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
||||
import 'package:flutter_progress_hud/flutter_progress_hud.dart';
|
||||
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
||||
|
||||
|
@ -16,6 +17,8 @@ import 'package:unit2/screens/passo/Building/edit_building/property_appraisal.da
|
|||
import 'package:unit2/screens/passo/Building/edit_building/property_assessement_edit.dart';
|
||||
import 'package:unit2/screens/passo/Building/edit_building/property_owner_info.dart';
|
||||
import 'package:unit2/screens/passo/Building/edit_building/structural_materials.dart';
|
||||
import 'package:unit2/screens/passo/Building/edit_building/structural_materials_edit.dart';
|
||||
import 'package:unit2/screens/passo/Land/add_land.dart';
|
||||
import 'package:unit2/theme-data.dart/colors.dart';
|
||||
import 'package:unit2/utils/text_container.dart';
|
||||
import 'package:unit2/widgets/error_state.dart';
|
||||
|
@ -54,117 +57,121 @@ class _EditBuilding extends State<EditBuilding> {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
debugShowCheckedModeBanner: false,
|
||||
home: Scaffold(
|
||||
appBar: AppBar(
|
||||
centerTitle: true,
|
||||
backgroundColor: primary,
|
||||
title: Text('Building FAAS Edit'),
|
||||
),
|
||||
body: ProgressHUD(
|
||||
padding: const EdgeInsets.all(24),
|
||||
backgroundColor: Colors.black87,
|
||||
indicatorWidget: const SpinKitFadingCircle(color: Colors.white),
|
||||
child: BlocConsumer<UnitConstructBloc, UnitConstructState>(
|
||||
listener: (context, state) {
|
||||
if (state is UnitConstructLoading) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress!.showWithText("Please wait...");
|
||||
}
|
||||
if (state is UnitConstructLoaded) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
if (state is UnitConstructErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
// Fluttertoast.showToast(
|
||||
// msg: onError,
|
||||
// fontSize: 24,
|
||||
// toastLength: Toast.LENGTH_LONG,
|
||||
// gravity: ToastGravity.CENTER,
|
||||
// backgroundColor: Colors.black,
|
||||
// textColor: Colors.white);
|
||||
}
|
||||
},
|
||||
builder: (context, state) {
|
||||
if (state is UnitConstructLoaded) {
|
||||
final unit = state.unit;
|
||||
return BlocConsumer<ClassComponentsBloc, ClassComponentsState>(
|
||||
listener: (context, state) {
|
||||
if (state is ClassComponentLoading) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress!.showWithText("Please wait...");
|
||||
}
|
||||
if (state is ClassComponentLoaded) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
if (state is ClassComponentErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
// Fluttertoast.showToast(
|
||||
// msg: onError,
|
||||
// fontSize: 24,
|
||||
// toastLength: Toast.LENGTH_LONG,
|
||||
// gravity: ToastGravity.CENTER,
|
||||
// backgroundColor: Colors.black,
|
||||
// textColor: Colors.white);
|
||||
}
|
||||
},
|
||||
builder: (context, state) {
|
||||
if (state is ClassComponentLoaded) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
children: [
|
||||
NumberStepper(
|
||||
numbers: [1, 2, 3, 4, 5, 6, 7],
|
||||
activeStepColor: primary,
|
||||
numberStyle: TextStyle(color: Colors.white),
|
||||
lineColor: primary,
|
||||
// activeStep property set to activeStep variable defined above.
|
||||
activeStep: activeStep,
|
||||
activeStepBorderColor: Colors.white,
|
||||
activeStepBorderWidth: 1,
|
||||
// This ensures step-tapping updates the activeStep.
|
||||
onStepReached: (index) {
|
||||
setState(() {
|
||||
activeStep = index;
|
||||
});
|
||||
},
|
||||
),
|
||||
content(unit, state.classes),
|
||||
],
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
centerTitle: true,
|
||||
backgroundColor: primary,
|
||||
title: Text('Building FAAS Edit'),
|
||||
),
|
||||
body: ProgressHUD(
|
||||
padding: const EdgeInsets.all(24),
|
||||
backgroundColor: Colors.black87,
|
||||
indicatorWidget: const SpinKitFadingCircle(color: Colors.white),
|
||||
child: BlocConsumer<UnitConstructBloc, UnitConstructState>(
|
||||
listener: (context, state) {
|
||||
if (state is UnitConstructLoading) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress!.showWithText("Please wait...");
|
||||
}
|
||||
if (state is UnitConstructLoaded) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
if (state is UnitConstructErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
// Fluttertoast.showToast(
|
||||
// msg: onError,
|
||||
// fontSize: 24,
|
||||
// toastLength: Toast.LENGTH_LONG,
|
||||
// gravity: ToastGravity.CENTER,
|
||||
// backgroundColor: Colors.black,
|
||||
// textColor: Colors.white);
|
||||
}
|
||||
},
|
||||
builder: (context, state) {
|
||||
if (state is UnitConstructLoaded) {
|
||||
final unit = state.unit;
|
||||
return BlocConsumer<ClassComponentsBloc, ClassComponentsState>(
|
||||
listener: (context, state) {
|
||||
if (state is ClassComponentLoading) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress!.showWithText("Please wait...");
|
||||
}
|
||||
if (state is ClassComponentLoaded) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
if (state is ClassComponentErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
// Fluttertoast.showToast(
|
||||
// msg: onError,
|
||||
// fontSize: 24,
|
||||
// toastLength: Toast.LENGTH_LONG,
|
||||
// gravity: ToastGravity.CENTER,
|
||||
// backgroundColor: Colors.black,
|
||||
// textColor: Colors.white);
|
||||
}
|
||||
},
|
||||
builder: (context, state) {
|
||||
if (state is ClassComponentLoaded) {
|
||||
return Column(
|
||||
children: [
|
||||
NumberStepper(
|
||||
numbers: [1, 2, 3, 4, 5, 6, 7],
|
||||
activeStepColor: primary,
|
||||
numberStyle: TextStyle(color: Colors.white),
|
||||
lineColor: primary,
|
||||
// activeStep property set to activeStep variable defined above.
|
||||
activeStep: activeStep,
|
||||
activeStepBorderColor: Colors.white,
|
||||
activeStepBorderWidth: 1,
|
||||
// This ensures step-tapping updates the activeStep.
|
||||
onStepReached: (index) {
|
||||
setState(() {
|
||||
activeStep = index;
|
||||
});
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
if (state is ClassComponentErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context
|
||||
.read<ClassComponentsBloc>()
|
||||
.add(LoadClassComponents());
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
);
|
||||
}
|
||||
if (state is UnitConstructErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context.read<UnitConstructBloc>().add(LoadUnitConstruct());
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
),
|
||||
Expanded(
|
||||
child: StatefulBuilder(builder:
|
||||
(BuildContext context, StateSetter setState) {
|
||||
return Container(
|
||||
child: content(
|
||||
unit,
|
||||
state.classes,
|
||||
),
|
||||
);
|
||||
}),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
if (state is ClassComponentErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context
|
||||
.read<ClassComponentsBloc>()
|
||||
.add(LoadClassComponents());
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
);
|
||||
}
|
||||
if (state is UnitConstructErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context.read<UnitConstructBloc>().add(LoadUnitConstruct());
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
|
@ -184,7 +191,7 @@ class _EditBuilding extends State<EditBuilding> {
|
|||
return GeneralDescriptionEdit(unit, widget.faas.id!, NextBtn, PrevBtn);
|
||||
|
||||
case 3:
|
||||
return StructuralMaterialsPageEdit(widget.faas.id!, NextBtn, PrevBtn);
|
||||
return StructuralMaterialsEditPage(widget.faas.id!, NextBtn, PrevBtn);
|
||||
|
||||
case 4:
|
||||
return AdditionalItemEditPage(
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
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:intl/intl.dart';
|
||||
import 'package:unit2/bloc/passo/bulding/additional_item/additional_item_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/bulding/additional_items_edit/additional_items_edit_bloc.dart';
|
||||
|
@ -41,265 +43,286 @@ class _AdditionalItemEditPage extends State<AdditionalItemEditPage> {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocConsumer<AdditionalItemsEditBloc, AdditionalItemsEditState>(
|
||||
listener: (context, state) {
|
||||
// TODO: implement listener
|
||||
},
|
||||
builder: (context, state) {
|
||||
final state = context.watch<AdditionalItemsEditBloc>().state;
|
||||
if (state is AdditionalItemsEditLoaded) {
|
||||
return Column(
|
||||
children: [
|
||||
Container(
|
||||
height: 500,
|
||||
child: Expanded(
|
||||
child: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('ADDITIONAL ITEMS',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.topRight,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Colors.red,
|
||||
return Scaffold(
|
||||
body: ProgressHUD(
|
||||
padding: const EdgeInsets.all(24),
|
||||
backgroundColor: Colors.black87,
|
||||
indicatorWidget: const SpinKitFadingCircle(color: Colors.white),
|
||||
child: BlocConsumer<AdditionalItemsEditBloc, AdditionalItemsEditState>(
|
||||
listener: (context, state) {
|
||||
if (state is AdditionalItemsEditLoading) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress!.showWithText("Please wait...");
|
||||
}
|
||||
if (state is AdditionalItemsEditLoaded) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
if (state is AdditionalItemsEditErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
},
|
||||
builder: (context, state) {
|
||||
final state = context.watch<AdditionalItemsEditBloc>().state;
|
||||
if (state is AdditionalItemsEditLoaded) {
|
||||
return Column(
|
||||
children: [
|
||||
Container(
|
||||
height: 500,
|
||||
child: Expanded(
|
||||
child: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('ADDITIONAL ITEMS',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
onPressed: () {
|
||||
context
|
||||
.read<AdditionalItemsEditBloc>()
|
||||
.add(ShowAdditionalItemsEdit());
|
||||
},
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Text('ADD ITEM'), // <-- Text
|
||||
const SizedBox(
|
||||
width: 5,
|
||||
Align(
|
||||
alignment: Alignment.topRight,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
const Icon(
|
||||
// <-- Icon
|
||||
Icons.add,
|
||||
size: 24.0,
|
||||
onPressed: () {
|
||||
context
|
||||
.read<AdditionalItemsEditBloc>()
|
||||
.add(ShowAdditionalItemsEdit());
|
||||
},
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Text('ADD ITEM'), // <-- Text
|
||||
const SizedBox(
|
||||
width: 5,
|
||||
),
|
||||
const Icon(
|
||||
// <-- Icon
|
||||
Icons.add,
|
||||
size: 24.0,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: DataTable(
|
||||
// ignore: prefer_const_literals_to_create_immutables
|
||||
columns: [
|
||||
const DataColumn(
|
||||
label: Text('Items'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Unit Value'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('% of BUCC'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Market Value'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Action'),
|
||||
)
|
||||
],
|
||||
rows: state.items.map((dataRow) {
|
||||
return DataRow(
|
||||
cells: [
|
||||
DataCell(Text(dataRow.className)),
|
||||
DataCell(Text(dataRow.baseUnitValue)),
|
||||
DataCell(Text(dataRow.unitValue)),
|
||||
DataCell(Text(((double.parse(
|
||||
dataRow.adjustedMarketVal)))
|
||||
.toString())),
|
||||
DataCell(Row(
|
||||
children: [
|
||||
InkWell(
|
||||
child: Container(
|
||||
height: 30,
|
||||
width: 30,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.red,
|
||||
),
|
||||
child: Icon(
|
||||
Icons.delete,
|
||||
color: Colors.white,
|
||||
size: 20.0,
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
deleteItem(dataRow.id);
|
||||
},
|
||||
),
|
||||
SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
InkWell(
|
||||
child: Container(
|
||||
height: 30,
|
||||
width: 30,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.red,
|
||||
),
|
||||
child: Icon(
|
||||
Icons.edit,
|
||||
color: Colors.white,
|
||||
size: 20.0,
|
||||
),
|
||||
),
|
||||
onTap: () {},
|
||||
),
|
||||
],
|
||||
))
|
||||
SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: DataTable(
|
||||
// ignore: prefer_const_literals_to_create_immutables
|
||||
columns: [
|
||||
const DataColumn(
|
||||
label: Text('Items'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Unit Value'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('% of BUCC'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Market Value'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Action'),
|
||||
)
|
||||
],
|
||||
);
|
||||
}).toList(),
|
||||
),
|
||||
rows: state.items.map((dataRow) {
|
||||
return DataRow(
|
||||
cells: [
|
||||
DataCell(Text(dataRow.className)),
|
||||
DataCell(Text(dataRow.baseUnitValue)),
|
||||
DataCell(Text(dataRow.unitValue)),
|
||||
DataCell(Text(((double.parse(
|
||||
dataRow.adjustedMarketVal)))
|
||||
.toString())),
|
||||
DataCell(Row(
|
||||
children: [
|
||||
InkWell(
|
||||
child: Container(
|
||||
height: 30,
|
||||
width: 30,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.red,
|
||||
),
|
||||
child: Icon(
|
||||
Icons.delete,
|
||||
color: Colors.white,
|
||||
size: 20.0,
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
deleteItem(dataRow.id);
|
||||
},
|
||||
),
|
||||
SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
InkWell(
|
||||
child: Container(
|
||||
height: 30,
|
||||
width: 30,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.red,
|
||||
),
|
||||
child: Icon(
|
||||
Icons.edit,
|
||||
color: Colors.white,
|
||||
size: 20.0,
|
||||
),
|
||||
),
|
||||
onTap: () {},
|
||||
),
|
||||
],
|
||||
))
|
||||
],
|
||||
);
|
||||
}).toList(),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
// Padding(
|
||||
// padding: const EdgeInsets.only(left: 20.0, right: 20.0),
|
||||
// child: Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
// children: [
|
||||
// Text(
|
||||
// 'Total',
|
||||
// style:
|
||||
// TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
|
||||
// ),
|
||||
// Text(
|
||||
// NumberFormat.currency(locale: 'en-PH', symbol: "₱")
|
||||
// .format(_totalMarketValue(state.items)),
|
||||
// style:
|
||||
// TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
|
||||
// )
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.PrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.NextBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
if (state is AdditionalItemsEditDeletedState) {
|
||||
if (state.success) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
successAlert(context, "Deletion Successful",
|
||||
"Extra item has been deleted successfully", () {
|
||||
Navigator.of(context).pop();
|
||||
context.read<AdditionalItemsEditBloc>().add(
|
||||
LoadAdditionalItemsEdit(
|
||||
items: const <AdditionalItems>[],
|
||||
id: widget.tempId));
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
if (state is ShowAddItemsScreenEdit) {
|
||||
return ConstrainedBox(
|
||||
constraints: BoxConstraints(maxHeight: 1000.0),
|
||||
child: AlertDialog(
|
||||
insetPadding: EdgeInsets.symmetric(
|
||||
horizontal: 20.0,
|
||||
vertical: 10.0,
|
||||
),
|
||||
title: Text(
|
||||
'ADD EXTRA ITEMS',
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(
|
||||
child: AddExtraItemsEdit(
|
||||
widget.unit, widget.options, widget.tempId))
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
return Container(
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('ADDITIONAL MATERIALS',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.topRight,
|
||||
child: ElevatedButton(
|
||||
onPressed: () {
|
||||
context
|
||||
.read<AdditionalItemBloc>()
|
||||
.add(ShowAdditionalItems());
|
||||
},
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Text('ADD ITEM'), // <-- Text
|
||||
const SizedBox(
|
||||
width: 5,
|
||||
),
|
||||
const Icon(
|
||||
// <-- Icon
|
||||
Icons.add,
|
||||
size: 24.0,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
// Padding(
|
||||
// padding: const EdgeInsets.only(left: 20.0, right: 20.0),
|
||||
// child: Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
// children: [
|
||||
// Text(
|
||||
// 'Total',
|
||||
// style:
|
||||
// TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
|
||||
// ),
|
||||
// Text(
|
||||
// NumberFormat.currency(locale: 'en-PH', symbol: "₱")
|
||||
// .format(_totalMarketValue(state.items)),
|
||||
// style:
|
||||
// TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
|
||||
// )
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.PrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.NextBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
if (state is AdditionalItemsEditDeletedState) {
|
||||
if (state.success) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
successAlert(context, "Deletion Successful",
|
||||
"Extra item has been deleted successfully", () {
|
||||
Navigator.of(context).pop();
|
||||
context.read<AdditionalItemsEditBloc>().add(
|
||||
LoadAdditionalItemsEdit(
|
||||
items: const <AdditionalItems>[], id: widget.tempId));
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
if (state is ShowAddItemsScreenEdit) {
|
||||
return ConstrainedBox(
|
||||
constraints: BoxConstraints(maxHeight: 1000.0),
|
||||
child: AlertDialog(
|
||||
insetPadding: EdgeInsets.symmetric(
|
||||
horizontal: 20.0,
|
||||
vertical: 10.0,
|
||||
),
|
||||
title: Text(
|
||||
'ADD EXTRA ITEMS',
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(
|
||||
child: AddExtraItemsEdit(
|
||||
widget.unit, widget.options, widget.tempId))
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
return Container(
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('ADDITIONAL MATERIALS',
|
||||
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.topRight,
|
||||
child: ElevatedButton(
|
||||
onPressed: () {
|
||||
context
|
||||
.read<AdditionalItemBloc>()
|
||||
.add(ShowAdditionalItems());
|
||||
},
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Text('ADD ITEM'), // <-- Text
|
||||
const SizedBox(
|
||||
width: 5,
|
||||
),
|
||||
const Icon(
|
||||
// <-- Icon
|
||||
Icons.add,
|
||||
size: 24.0,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,388 +35,395 @@ class _BldgLocLandRefEdit extends State<BldgLocLandRefEdit> {
|
|||
Set<String> seenCityCodes = Set<String>();
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ProgressHUD(
|
||||
padding: const EdgeInsets.all(24),
|
||||
backgroundColor: Colors.black87,
|
||||
indicatorWidget: const SpinKitFadingCircle(color: Colors.white),
|
||||
child: BlocConsumer<LocationBloc, LocationState>(
|
||||
listener: (context, state) {
|
||||
if (state is LocationLoading) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress!.showWithText("Please wait...");
|
||||
}
|
||||
if (state is LocationLoaded) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
if (state is LocationErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
},
|
||||
builder: (context, state) {
|
||||
if (state is LocationLoaded) {
|
||||
final bldgloc = state.bldgloc;
|
||||
return BlocConsumer<LandrefBloc, LandrefState>(
|
||||
listener: (context, state) {
|
||||
if (state is LandrefLoading) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress!.showWithText("Please wait...");
|
||||
}
|
||||
if (state is LandrefLoaded) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
if (state is LandrefErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
},
|
||||
builder: (context, state) {
|
||||
if (state is LandrefLoaded) {
|
||||
final landRef = state.landRef;
|
||||
return BlocConsumer<MunicipalityBloc, MunicipalityState>(
|
||||
listener: (context, state) {
|
||||
if (state is MunicipalityLoading) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress!.showWithText("Please wait...");
|
||||
}
|
||||
if (state is MunicipalityLoaded) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
if (state is MunicipalityErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
}, builder: (context, state) {
|
||||
if (state is MunicipalityLoaded) {
|
||||
final cityList = state.municipality;
|
||||
Set<City> uniqueItems = {};
|
||||
|
||||
// Iterate through the dropdownItems list to filter out duplicates
|
||||
for (var item in cityList) {
|
||||
uniqueItems.add(item);
|
||||
return Scaffold(
|
||||
body: ProgressHUD(
|
||||
padding: const EdgeInsets.all(24),
|
||||
backgroundColor: Colors.black87,
|
||||
indicatorWidget: const SpinKitFadingCircle(color: Colors.white),
|
||||
child: BlocConsumer<LocationBloc, LocationState>(
|
||||
listener: (context, state) {
|
||||
if (state is LocationLoading) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress!.showWithText("Please wait...");
|
||||
}
|
||||
if (state is LocationLoaded) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
if (state is LocationErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
},
|
||||
builder: (context, state) {
|
||||
if (state is LocationLoaded) {
|
||||
final bldgloc = state.bldgloc;
|
||||
return BlocConsumer<LandrefBloc, LandrefState>(
|
||||
listener: (context, state) {
|
||||
if (state is LandrefLoading) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress!.showWithText("Please wait...");
|
||||
}
|
||||
if (state is LandrefLoaded) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
if (state is LandrefErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
},
|
||||
builder: (context, state) {
|
||||
if (state is LandrefLoaded) {
|
||||
final landRef = state.landRef;
|
||||
return BlocConsumer<MunicipalityBloc, MunicipalityState>(
|
||||
listener: (context, state) {
|
||||
if (state is MunicipalityLoading) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress!.showWithText("Please wait...");
|
||||
}
|
||||
return BlocConsumer<BarangayBloc, BarangayState>(
|
||||
listener: (context, state) {
|
||||
if (state is BarangayLoading) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress!.showWithText("Please wait...");
|
||||
if (state is MunicipalityLoaded) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
if (state is MunicipalityErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
}, builder: (context, state) {
|
||||
if (state is MunicipalityLoaded) {
|
||||
final cityList = state.municipality;
|
||||
Set<City> uniqueItems = {};
|
||||
|
||||
// Iterate through the dropdownItems list to filter out duplicates
|
||||
for (var item in cityList) {
|
||||
uniqueItems.add(item);
|
||||
}
|
||||
if (state is BarangayLoaded) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
if (state is BarangayErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
}, builder: (context, state) {
|
||||
if (state is BarangayLoaded) {
|
||||
List<Brgy> brgyList = state.brgy;
|
||||
List<String> brgyNAmes = brgyList
|
||||
.map((brgy) => brgy.barangayDescription)
|
||||
.toList()
|
||||
.cast<String>();
|
||||
return FormBuilder(
|
||||
key: keys,
|
||||
initialValue: {
|
||||
'street': bldgloc.street ?? "",
|
||||
'province': bldgloc.province ?? "",
|
||||
'l_owner': landRef.owner,
|
||||
'oct_tct_cloa': landRef.cloaNo ?? "",
|
||||
'survey_no': landRef.surveyNo ?? "",
|
||||
'lot_no': landRef.lotNo ?? "",
|
||||
'blk_no': landRef.blkNo ?? "",
|
||||
'l_td_arp': landRef.tdn ?? "",
|
||||
'area': landRef.area ?? ""
|
||||
},
|
||||
enabled: true,
|
||||
onChanged: () {
|
||||
keys.currentState!.save();
|
||||
debugPrint(keys.currentState!.value.toString());
|
||||
},
|
||||
autovalidateMode: AutovalidateMode.disabled,
|
||||
skipDisabled: true,
|
||||
child: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(20.0),
|
||||
child: ListView(
|
||||
shrinkWrap: true,
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0,
|
||||
top: 20,
|
||||
right: 0,
|
||||
bottom: 10),
|
||||
child: const Text('BUILDING LOCATION',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: FormBuilderDropdown<City>(
|
||||
name: 'municipality',
|
||||
autofocus: false,
|
||||
decoration: normalTextFieldStyle(
|
||||
bldgloc.municipality ??
|
||||
"Municipality",
|
||||
"",
|
||||
return BlocConsumer<BarangayBloc, BarangayState>(
|
||||
listener: (context, state) {
|
||||
if (state is BarangayLoading) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress!.showWithText("Please wait...");
|
||||
}
|
||||
if (state is BarangayLoaded) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
if (state is BarangayErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
}, builder: (context, state) {
|
||||
if (state is BarangayLoaded) {
|
||||
List<Brgy> brgyList = state.brgy;
|
||||
List<String> brgyNAmes = brgyList
|
||||
.map((brgy) => brgy.barangayDescription)
|
||||
.toList()
|
||||
.cast<String>();
|
||||
return FormBuilder(
|
||||
key: keys,
|
||||
initialValue: {
|
||||
'street': bldgloc.street ?? "",
|
||||
'province': bldgloc.province ?? "",
|
||||
'l_owner': landRef.owner,
|
||||
'oct_tct_cloa': landRef.cloaNo ?? "",
|
||||
'survey_no': landRef.surveyNo ?? "",
|
||||
'lot_no': landRef.lotNo ?? "",
|
||||
'blk_no': landRef.blkNo ?? "",
|
||||
'l_td_arp': landRef.tdn ?? "",
|
||||
'area': landRef.area ?? ""
|
||||
},
|
||||
enabled: true,
|
||||
onChanged: () {
|
||||
keys.currentState!.save();
|
||||
debugPrint(keys.currentState!.value.toString());
|
||||
},
|
||||
autovalidateMode: AutovalidateMode.disabled,
|
||||
skipDisabled: true,
|
||||
child: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(20.0),
|
||||
child: ListView(
|
||||
shrinkWrap: true,
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0,
|
||||
top: 20,
|
||||
right: 0,
|
||||
bottom: 10),
|
||||
child: const Text('BUILDING LOCATION',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: FormBuilderDropdown<City>(
|
||||
name: 'municipality',
|
||||
autofocus: false,
|
||||
decoration:
|
||||
normalTextFieldStyle(
|
||||
bldgloc.municipality ??
|
||||
"Municipality",
|
||||
"",
|
||||
),
|
||||
items: uniqueItems
|
||||
.map(
|
||||
(city) =>
|
||||
DropdownMenuItem<
|
||||
City>(
|
||||
value: city,
|
||||
child: Text(
|
||||
city.cityDescription ??
|
||||
''),
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
onChanged: (selectedCityCode) {
|
||||
// Find the corresponding City object using selectedCityCode
|
||||
final selectedCity = cityList
|
||||
.firstWhere((city) =>
|
||||
city.cityCode ==
|
||||
selectedCityCode);
|
||||
|
||||
final barangayBloc = context
|
||||
.read<BarangayBloc>();
|
||||
barangayBloc.add(LoadBarangay(
|
||||
id: selectedCityCode!
|
||||
.cityCode!));
|
||||
},
|
||||
),
|
||||
items: uniqueItems
|
||||
.map(
|
||||
(city) =>
|
||||
DropdownMenuItem<City>(
|
||||
value: city,
|
||||
child: Text(
|
||||
city.cityDescription ??
|
||||
''),
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
onChanged: (selectedCityCode) {
|
||||
// Find the corresponding City object using selectedCityCode
|
||||
final selectedCity = cityList
|
||||
.firstWhere((city) =>
|
||||
city.cityCode ==
|
||||
selectedCityCode);
|
||||
|
||||
final barangayBloc = context
|
||||
.read<BarangayBloc>();
|
||||
barangayBloc.add(LoadBarangay(
|
||||
id: selectedCityCode!
|
||||
.cityCode!));
|
||||
},
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Province / City",
|
||||
"",
|
||||
'province'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Province / City",
|
||||
"No. / Street", "", 'street'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customDropDownField(
|
||||
bldgloc.barangay ?? "",
|
||||
"Barangay",
|
||||
'brgy',
|
||||
brgyNAmes))
|
||||
]),
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0,
|
||||
top: 20,
|
||||
right: 0,
|
||||
bottom: 10),
|
||||
child: const Text('LAND REFERENCE',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
customTextField(
|
||||
"Land Owner", "", 'l_owner'),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"OCT/TCT/CLOA No.",
|
||||
"",
|
||||
'province'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"No. / Street", "", 'street'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customDropDownField(
|
||||
bldgloc.barangay ?? "",
|
||||
"Barangay",
|
||||
'brgy',
|
||||
brgyNAmes))
|
||||
]),
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0,
|
||||
top: 20,
|
||||
right: 0,
|
||||
bottom: 10),
|
||||
child: const Text('LAND REFERENCE',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
customTextField(
|
||||
"Land Owner", "", 'l_owner'),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"OCT/TCT/CLOA No.",
|
||||
"",
|
||||
'oct_tct_cloa'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
'oct_tct_cloa'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Survey No.",
|
||||
"",
|
||||
'survey_no'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Survey No.",
|
||||
"Lot No.", "", 'lot_no'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Blk No.", "", 'blk_no'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"TD / ARP No.",
|
||||
"",
|
||||
'survey_no'))
|
||||
]),
|
||||
Row(
|
||||
'l_td_arp'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Area", "", 'area'))
|
||||
]),
|
||||
SizedBox(
|
||||
height: 50,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Lot No.", "", 'lot_no'),
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(
|
||||
Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.PrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Blk No.", "", 'blk_no'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"TD / ARP No.", "", 'l_td_arp'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Area", "", 'area'))
|
||||
]),
|
||||
SizedBox(
|
||||
height: 50,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(
|
||||
Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.PrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
CustomButton(
|
||||
icon: const Icon(
|
||||
Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
var bldgLocData = BldgLoc(
|
||||
id: widget.tempId,
|
||||
street: keys.currentState
|
||||
?.value['street'],
|
||||
barangay: keys.currentState
|
||||
?.value['brgy'],
|
||||
municipality: keys
|
||||
.currentState
|
||||
?.value['municipality']
|
||||
?.cityDescription ??
|
||||
bldgloc.municipality,
|
||||
province: keys.currentState
|
||||
?.value['province'],
|
||||
);
|
||||
var landRefData = LandRef(
|
||||
id: widget.tempId,
|
||||
owner: keys.currentState
|
||||
?.value['l_owner'],
|
||||
cloaNo: keys.currentState
|
||||
?.value['oct_tct_cloa'],
|
||||
lotNo: keys.currentState
|
||||
?.value['lot_no'],
|
||||
tdn: keys.currentState
|
||||
?.value['l_td_arp'],
|
||||
area: keys.currentState
|
||||
?.value['area'],
|
||||
surveyNo: keys.currentState
|
||||
?.value['survey_no'],
|
||||
blkNo: keys.currentState
|
||||
?.value['blk_no'],
|
||||
);
|
||||
context.read<PropertyInfoBloc>()
|
||||
..add(UpdateBldgLoc(
|
||||
bldg_loc: bldgLocData))
|
||||
..add(UpdateLandRef(
|
||||
land_ref: landRefData));
|
||||
CustomButton(
|
||||
icon: const Icon(
|
||||
Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
var bldgLocData = BldgLoc(
|
||||
id: widget.tempId,
|
||||
street: keys.currentState
|
||||
?.value['street'],
|
||||
barangay: keys.currentState
|
||||
?.value['brgy'],
|
||||
municipality: keys
|
||||
.currentState
|
||||
?.value[
|
||||
'municipality']
|
||||
?.cityDescription ??
|
||||
bldgloc.municipality,
|
||||
province: keys.currentState
|
||||
?.value['province'],
|
||||
);
|
||||
var landRefData = LandRef(
|
||||
id: widget.tempId,
|
||||
owner: keys.currentState
|
||||
?.value['l_owner'],
|
||||
cloaNo: keys.currentState
|
||||
?.value['oct_tct_cloa'],
|
||||
lotNo: keys.currentState
|
||||
?.value['lot_no'],
|
||||
tdn: keys.currentState
|
||||
?.value['l_td_arp'],
|
||||
area: keys.currentState
|
||||
?.value['area'],
|
||||
surveyNo: keys.currentState
|
||||
?.value['survey_no'],
|
||||
blkNo: keys.currentState
|
||||
?.value['blk_no'],
|
||||
);
|
||||
context.read<PropertyInfoBloc>()
|
||||
..add(UpdateBldgLoc(
|
||||
bldg_loc: bldgLocData))
|
||||
..add(UpdateLandRef(
|
||||
land_ref: landRefData));
|
||||
|
||||
widget.NextBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
)
|
||||
],
|
||||
widget.NextBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
if (state is BarangayErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context
|
||||
.read<BarangayBloc>()
|
||||
.add(LoadBarangay(id: '01'));
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
});
|
||||
}
|
||||
if (state is MunicipalityErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context
|
||||
.read<MunicipalityBloc>()
|
||||
.add(LoadMunicipality());
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
});
|
||||
}
|
||||
if (state is LandrefErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context.read<LandrefBloc>().add(
|
||||
LoadLandref(id: widget.tempId, landRef: LandRef()));
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
if (state is BarangayErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context
|
||||
.read<BarangayBloc>()
|
||||
.add(LoadBarangay(id: '01'));
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
});
|
||||
}
|
||||
if (state is MunicipalityErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context
|
||||
.read<MunicipalityBloc>()
|
||||
.add(LoadMunicipality());
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
});
|
||||
}
|
||||
if (state is LandrefErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context.read<LandrefBloc>().add(
|
||||
LoadLandref(id: widget.tempId, landRef: LandRef()));
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
if (state is LocationErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context
|
||||
.read<LocationBloc>()
|
||||
.add(LoadLocation(id: widget.tempId, bldgloc: BldgLoc()));
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
if (state is LocationErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context
|
||||
.read<LocationBloc>()
|
||||
.add(LoadLocation(id: widget.tempId, bldgloc: BldgLoc()));
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
|
|||
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
||||
import 'package:flutter_progress_hud/flutter_progress_hud.dart';
|
||||
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:unit2/bloc/passo/bulding/general_description/general_description_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/bulding/property_info/property_info_bloc.dart';
|
||||
import 'package:unit2/model/passo/general_description.dart';
|
||||
|
@ -39,267 +40,322 @@ class _GeneralDescriptionEdit extends State<GeneralDescriptionEdit> {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Expanded(
|
||||
child: ProgressHUD(
|
||||
padding: const EdgeInsets.all(24),
|
||||
backgroundColor: Colors.black87,
|
||||
indicatorWidget: const SpinKitFadingCircle(color: Colors.white),
|
||||
child: BlocConsumer<GeneralDescriptionBloc, GeneralDescriptionState>(
|
||||
listener: (context, state) {
|
||||
// TODO: implement listener
|
||||
},
|
||||
builder: (context, state) {
|
||||
if (state is GenDescLoaded) {
|
||||
return FormBuilder(
|
||||
key: keys,
|
||||
initialValue: {
|
||||
'bldg_permit': state.gendesc.bldgPermit,
|
||||
'date_issued': state.gendesc.dateIssued.toString(),
|
||||
'cct': state.gendesc.cct.toString(),
|
||||
'coc_issued': state.gendesc.certCompletionIssued.toString(),
|
||||
'coo_issued': state.gendesc.certOccupancyIssued.toString(),
|
||||
'date_cnstructed': state.gendesc.dateIssued.toString(),
|
||||
'date_occupied': state.gendesc.dateOccupied.toString(),
|
||||
'bldg_age': state.gendesc.bldgAge.toString(),
|
||||
'no_of_storeys': state.gendesc.noStoreys.toString(),
|
||||
'area_of_1stFl': state.gendesc.area1Stfloor,
|
||||
'area_of_2ndFl': state.gendesc.area2Ndfloor,
|
||||
'area_of_3rdFl': state.gendesc.area3Rdfloor,
|
||||
'area_of_4thFl': state.gendesc.area4Thfloor,
|
||||
'total_area': state.gendesc.totalFloorArea.toString(),
|
||||
'actual_use': state.gendesc.actualUse
|
||||
return Scaffold(
|
||||
body: Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: ProgressHUD(
|
||||
padding: const EdgeInsets.all(24),
|
||||
backgroundColor: Colors.black87,
|
||||
indicatorWidget: const SpinKitFadingCircle(color: Colors.white),
|
||||
child:
|
||||
BlocConsumer<GeneralDescriptionBloc, GeneralDescriptionState>(
|
||||
listener: (context, state) async {
|
||||
if (state is GenDescLoading) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress!.showWithText("Please wait...");
|
||||
}
|
||||
if (state is GenDescLoaded) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
|
||||
final tempID = await SharedPreferences.getInstance();
|
||||
await tempID.setInt(
|
||||
'totalValue', int.parse(state.gendesc.totalFloorArea!));
|
||||
await tempID.setString(
|
||||
'actualUse', state.gendesc.actualUse!);
|
||||
|
||||
}
|
||||
if (state is GenDescErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
},
|
||||
enabled: true,
|
||||
onChanged: () {
|
||||
keys.currentState!.save();
|
||||
debugPrint(keys.currentState!.value.toString());
|
||||
},
|
||||
autovalidateMode: AutovalidateMode.disabled,
|
||||
skipDisabled: true,
|
||||
child: Expanded(
|
||||
child: SingleChildScrollView(
|
||||
scrollDirection: Axis.vertical,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(20.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('GENERAL DESCRIPTION',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 10, right: 0, bottom: 0),
|
||||
child: FormBuilderDropdown(
|
||||
name: 'bldg_type',
|
||||
autofocus: false,
|
||||
decoration: normalTextFieldStyle(
|
||||
state.gendesc.bldgKind ?? "Kind of Building",
|
||||
"Kind of Building"),
|
||||
items: widget.unit
|
||||
.map((e) => DropdownMenuItem(
|
||||
value: e,
|
||||
child:
|
||||
Text(e.bldgType + '-' + e.building),
|
||||
))
|
||||
.toList(),
|
||||
builder: (context, state) {
|
||||
if (state is GenDescLoaded) {
|
||||
return FormBuilder(
|
||||
key: keys,
|
||||
initialValue: {
|
||||
'bldg_permit': state.gendesc.bldgPermit,
|
||||
'date_issued': state.gendesc.dateIssued.toString(),
|
||||
'cct': state.gendesc.cct.toString(),
|
||||
'coc_issued':
|
||||
state.gendesc.certCompletionIssued.toString(),
|
||||
'coo_issued':
|
||||
state.gendesc.certOccupancyIssued.toString(),
|
||||
'date_cnstructed': state.gendesc.dateIssued.toString(),
|
||||
'date_occupied': state.gendesc.dateOccupied.toString(),
|
||||
'bldg_age': state.gendesc.bldgAge.toString(),
|
||||
'no_of_storeys': state.gendesc.noStoreys.toString(),
|
||||
'area_of_1stFl': state.gendesc.area1Stfloor,
|
||||
'area_of_2ndFl': state.gendesc.area2Ndfloor,
|
||||
'area_of_3rdFl': state.gendesc.area3Rdfloor,
|
||||
'area_of_4thFl': state.gendesc.area4Thfloor,
|
||||
'total_area': state.gendesc.totalFloorArea.toString(),
|
||||
'actual_use': state.gendesc.actualUse
|
||||
},
|
||||
enabled: true,
|
||||
onChanged: () {
|
||||
keys.currentState!.save();
|
||||
debugPrint(keys.currentState!.value.toString());
|
||||
},
|
||||
autovalidateMode: AutovalidateMode.disabled,
|
||||
skipDisabled: true,
|
||||
child: Expanded(
|
||||
child: SingleChildScrollView(
|
||||
scrollDirection: Axis.vertical,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(20.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('GENERAL DESCRIPTION',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 10, right: 0, bottom: 0),
|
||||
child: FormBuilderDropdown(
|
||||
name: 'bldg_type',
|
||||
autofocus: false,
|
||||
decoration: normalTextFieldStyle(
|
||||
state.gendesc.bldgKind ??
|
||||
"Kind of Building",
|
||||
"Kind of Building"),
|
||||
items: widget.unit
|
||||
.map((e) => DropdownMenuItem(
|
||||
value: e,
|
||||
child: Text(e.bldgType +
|
||||
'-' +
|
||||
e.building),
|
||||
))
|
||||
.toList(),
|
||||
),
|
||||
),
|
||||
customDropDownField(
|
||||
"Actual Use", "", 'actual_use', actual_use),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Bldg. Permit No.",
|
||||
"",
|
||||
'bldg_permit'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customDatTimePicker(
|
||||
"Certificate of Occupancy Issued ON",
|
||||
"",
|
||||
'date_issued'))
|
||||
]),
|
||||
customTextField(
|
||||
"Condominium Certificate of Title (CCT)",
|
||||
"",
|
||||
'cct'),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customDatTimePicker(
|
||||
"Certificate of Completion Issued ON",
|
||||
"",
|
||||
'coc_issued'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customDatTimePicker(
|
||||
"Certificate of Occupancy Issued ON",
|
||||
"",
|
||||
'coo_issued'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customDatTimePicker(
|
||||
"Date Constructed /Completed",
|
||||
"",
|
||||
'date_cnstructed'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customDatTimePicker(
|
||||
"Date Occupied",
|
||||
"",
|
||||
'date_occupied'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Bldg. Age", "", 'bldg_age'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"No. of storeys",
|
||||
"",
|
||||
'no_of_storeys'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Area of 1st Floor",
|
||||
"",
|
||||
'area_of_1stFl'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Area of 2nd Floor",
|
||||
"",
|
||||
'area_of_2ndFl'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Area of 3rd Floor",
|
||||
"",
|
||||
'area_of_3rdFl')),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Area of 4th Floor",
|
||||
"",
|
||||
'area_of_4thFl'))
|
||||
]),
|
||||
customTextField("Total Area", "", 'total_area'),
|
||||
SizedBox(
|
||||
height: 50,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(
|
||||
Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.PrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
CustomButton(
|
||||
icon: const Icon(
|
||||
Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
keys.currentState!.save();
|
||||
var genDescData = GeneralDesc(
|
||||
id: widget.tempId,
|
||||
bldgKind: keys
|
||||
.currentState
|
||||
?.value['bldg_type']
|
||||
?.building ??
|
||||
state.gendesc.bldgKind,
|
||||
strucType: keys
|
||||
.currentState
|
||||
?.value['bldg_type']
|
||||
?.bldgType ??
|
||||
state.gendesc.strucType,
|
||||
bldgPermit: keys.currentState
|
||||
?.value['bldg_permit'],
|
||||
dateIssued: keys.currentState
|
||||
?.value['coc_issued'],
|
||||
cct: keys
|
||||
.currentState?.value['cct'],
|
||||
certCompletionIssued: keys
|
||||
.currentState
|
||||
?.value['coc_issued'],
|
||||
certOccupancyIssued: keys
|
||||
.currentState
|
||||
?.value['coo_issued'],
|
||||
dateCompleted:
|
||||
keys.currentState?.value['date_cnstructed'],
|
||||
dateOccupied: keys.currentState?.value['date_occupied'],
|
||||
bldgAge: int.tryParse(keys.currentState?.value['bldg_age']),
|
||||
noStoreys: int.tryParse(keys.currentState?.value['no_of_storeys']),
|
||||
area1Stfloor: keys.currentState?.value['area_of_1stFl'],
|
||||
area2Ndfloor: keys.currentState?.value['area_of_2ndFl'],
|
||||
area3Rdfloor: keys.currentState?.value['area_of_3rdFl'],
|
||||
area4Thfloor: keys.currentState?.value['area_of_4thFl'],
|
||||
totalFloorArea: keys.currentState?.value['total_area'],
|
||||
floorSketch: null,
|
||||
actualUse: keys.currentState?.value['actual_use']);
|
||||
|
||||
context.read<PropertyInfoBloc>()
|
||||
..add(UpdateGeneralDesc(
|
||||
gen_desc: genDescData));
|
||||
|
||||
widget.NextBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
customDropDownField(
|
||||
"Actual Use", "", 'actual_use', actual_use),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Bldg. Permit No.", "", 'bldg_permit'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customDatTimePicker(
|
||||
"Certificate of Occupancy Issued ON",
|
||||
"",
|
||||
'date_issued'))
|
||||
]),
|
||||
customTextField(
|
||||
"Condominium Certificate of Title (CCT)",
|
||||
"",
|
||||
'cct'),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customDatTimePicker(
|
||||
"Certificate of Completion Issued ON",
|
||||
"",
|
||||
'coc_issued'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customDatTimePicker(
|
||||
"Certificate of Occupancy Issued ON",
|
||||
"",
|
||||
'coo_issued'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customDatTimePicker(
|
||||
"Date Constructed /Completed",
|
||||
"",
|
||||
'date_cnstructed'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customDatTimePicker(
|
||||
"Date Occupied", "", 'date_occupied'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Bldg. Age", "", 'bldg_age'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"No. of storeys", "", 'no_of_storeys'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Area of 1st Floor", "", 'area_of_1stFl'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField("Area of 2nd Floor",
|
||||
"", 'area_of_2ndFl'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField("Area of 3rd Floor",
|
||||
"", 'area_of_3rdFl')),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField("Area of 4th Floor",
|
||||
"", 'area_of_4thFl'))
|
||||
]),
|
||||
customTextField("Total Area", "", 'total_area'),
|
||||
SizedBox(
|
||||
height: 50,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.PrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
keys.currentState!.save();
|
||||
var genDescData = GeneralDesc(
|
||||
id: widget.tempId,
|
||||
bldgKind: keys
|
||||
.currentState
|
||||
?.value['bldg_type']
|
||||
?.building ??
|
||||
state.gendesc.bldgKind,
|
||||
strucType: keys
|
||||
.currentState
|
||||
?.value['bldg_type']
|
||||
?.bldgType ??
|
||||
state.gendesc.strucType,
|
||||
bldgPermit: keys
|
||||
.currentState?.value['bldg_permit'],
|
||||
dateIssued: keys
|
||||
.currentState?.value['coc_issued'],
|
||||
cct: keys.currentState?.value['cct'],
|
||||
certCompletionIssued: keys
|
||||
.currentState?.value['coc_issued'],
|
||||
certOccupancyIssued: keys
|
||||
.currentState?.value['coo_issued'],
|
||||
dateCompleted: keys.currentState
|
||||
?.value['date_cnstructed'],
|
||||
dateOccupied: keys.currentState
|
||||
?.value['date_occupied'],
|
||||
bldgAge: int.tryParse(keys.currentState?.value['bldg_age']),
|
||||
noStoreys: int.tryParse(keys.currentState?.value['no_of_storeys']),
|
||||
area1Stfloor: keys.currentState?.value['area_of_1stFl'],
|
||||
area2Ndfloor: keys.currentState?.value['area_of_2ndFl'],
|
||||
area3Rdfloor: keys.currentState?.value['area_of_3rdFl'],
|
||||
area4Thfloor: keys.currentState?.value['area_of_4thFl'],
|
||||
totalFloorArea: keys.currentState?.value['total_area'],
|
||||
floorSketch: null,
|
||||
actualUse: keys.currentState?.value['actual_use']);
|
||||
|
||||
context.read<PropertyInfoBloc>()
|
||||
..add(UpdateGeneralDesc(
|
||||
gen_desc: genDescData));
|
||||
|
||||
widget.NextBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
if (state is GenDescErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context.read<GeneralDescriptionBloc>().add(
|
||||
LoadGenDesc(id: widget.tempId, gendesc: GeneralDesc()));
|
||||
);
|
||||
}
|
||||
if (state is GenDescErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context.read<GeneralDescriptionBloc>().add(LoadGenDesc(
|
||||
id: widget.tempId, gendesc: GeneralDesc()));
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -67,151 +67,168 @@ class _PropertyOwnerInfoEdit extends State<PropertyOwnerInfoEdit> {
|
|||
if (state is PropertyInfoLoaded) {
|
||||
return SingleChildScrollView(
|
||||
scrollDirection: Axis.vertical,
|
||||
child: Expanded(
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
FormBuilder(
|
||||
key: keys,
|
||||
initialValue: {
|
||||
'transaction_code': widget.faas.transCode,
|
||||
'arp_td': widget.faas.tdn,
|
||||
'pin': widget.faas.pin,
|
||||
'owner': widget.faas.owner,
|
||||
'address': widget.faas.address,
|
||||
'tel_no': widget.faas.telno,
|
||||
'tin': widget.faas.tin,
|
||||
'benificiary': widget.faas.adminUser,
|
||||
'benificiary_telno': widget.faas.adminTelno,
|
||||
'benificiary_address': widget.faas.adminAddress,
|
||||
'benificaiary_tin': widget.faas.adminTin,
|
||||
},
|
||||
enabled: true,
|
||||
onChanged: () {
|
||||
keys.currentState!.save();
|
||||
debugPrint(keys.currentState!.value.toString());
|
||||
},
|
||||
autovalidateMode: AutovalidateMode.disabled,
|
||||
skipDisabled: true,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: <Widget>[
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('PROPERTY OWNER INFO',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
const SizedBox(height: 15),
|
||||
customDropDownField("Transaction Code", "",
|
||||
"transaction_code", transaction_codes),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"ARP No. / TD No.", "", 'arp_td')),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField("Pin", "", 'pin')),
|
||||
],
|
||||
),
|
||||
customTextField("Owner", "", 'owner'),
|
||||
customTextField("Address", "", 'address'),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
child: Column(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Expanded(
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
FormBuilder(
|
||||
key: keys,
|
||||
initialValue: {
|
||||
'transaction_code': widget.faas.transCode,
|
||||
'arp_td': widget.faas.tdn,
|
||||
'pin': widget.faas.pin,
|
||||
'owner': widget.faas.owner,
|
||||
'address': widget.faas.address,
|
||||
'tel_no': widget.faas.telno,
|
||||
'tin': widget.faas.tin,
|
||||
'benificiary': widget.faas.adminUser,
|
||||
'benificiary_telno': widget.faas.adminTelno,
|
||||
'benificiary_address': widget.faas.adminAddress,
|
||||
'benificaiary_tin': widget.faas.adminTin,
|
||||
},
|
||||
enabled: true,
|
||||
onChanged: () {
|
||||
keys.currentState!.save();
|
||||
debugPrint(keys.currentState!.value.toString());
|
||||
},
|
||||
autovalidateMode: AutovalidateMode.disabled,
|
||||
skipDisabled: true,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child:
|
||||
customTextField("Tel No.", "", 'tel_no'),
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('PROPERTY OWNER INFO',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField("TIN", "", 'tin'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Administrator / Benificial User",
|
||||
"",
|
||||
'benificiary'),
|
||||
const SizedBox(height: 15),
|
||||
customDropDownField("Transaction Code", "",
|
||||
"transaction_code", transaction_codes),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"ARP No. / TD No.", "", 'arp_td')),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child:
|
||||
customTextField("Pin", "", 'pin')),
|
||||
],
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"TIN", "", 'benificiary_tin'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Address", "", 'benificiary_address'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Tel No.", "", 'benificiary_telno'))
|
||||
]),
|
||||
const SizedBox(height: 25),
|
||||
SizedBox(
|
||||
width: MediaQuery.of(context).size.width,
|
||||
child: CustomButton(
|
||||
icon: const Icon(Icons.chevron_right,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
var property_info = PropertyInfo(
|
||||
id: widget.faas.id,
|
||||
transCode: keys
|
||||
.currentState!.value['transaction_code']
|
||||
.toString(),
|
||||
tdn: keys.currentState!.value['arp_td'],
|
||||
pin: keys.currentState!.value['pin'],
|
||||
owner: keys.currentState!.value['owner'],
|
||||
address:
|
||||
keys.currentState!.value['address'],
|
||||
telno: keys.currentState!.value['tel_no'],
|
||||
tin: keys.currentState!.value['tin'],
|
||||
adminUser:
|
||||
keys.currentState!.value['benificiary'],
|
||||
adminAddress: keys.currentState!
|
||||
.value['benificiary_address'],
|
||||
adminTin: keys
|
||||
.currentState!.value['benificiary_tin'],
|
||||
adminTelno: keys.currentState!
|
||||
.value['benificiary_telno'],
|
||||
assessedById: '1',
|
||||
assessedByName: 'Cyril',
|
||||
dateModified: DateTime.now(),
|
||||
dateCreated: DateTime.now());
|
||||
customTextField("Owner", "", 'owner'),
|
||||
customTextField("Address", "", 'address'),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Tel No.", "", 'tel_no'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child:
|
||||
customTextField("TIN", "", 'tin'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Administrator / Benificial User",
|
||||
"",
|
||||
'benificiary'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"TIN", "", 'benificiary_tin'))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField("Address", "",
|
||||
'benificiary_address'),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField("Tel No.", "",
|
||||
'benificiary_telno'))
|
||||
]),
|
||||
const SizedBox(height: 25),
|
||||
SizedBox(
|
||||
width: MediaQuery.of(context).size.width,
|
||||
child: CustomButton(
|
||||
icon: const Icon(Icons.chevron_right,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
var property_info = PropertyInfo(
|
||||
id: widget.faas.id,
|
||||
transCode: keys.currentState!
|
||||
.value['transaction_code']
|
||||
.toString(),
|
||||
tdn: keys
|
||||
.currentState!.value['arp_td'],
|
||||
pin: keys.currentState!.value['pin'],
|
||||
owner:
|
||||
keys.currentState!.value['owner'],
|
||||
address: keys
|
||||
.currentState!.value['address'],
|
||||
telno: keys
|
||||
.currentState!.value['tel_no'],
|
||||
tin: keys.currentState!.value['tin'],
|
||||
adminUser: keys.currentState!
|
||||
.value['benificiary'],
|
||||
adminAddress: keys.currentState!
|
||||
.value['benificiary_address'],
|
||||
adminTin: keys.currentState!
|
||||
.value['benificiary_tin'],
|
||||
adminTelno: keys.currentState!
|
||||
.value['benificiary_telno'],
|
||||
assessedById: '1',
|
||||
assessedByName: 'Cyril',
|
||||
dateModified: DateTime.now(),
|
||||
dateCreated: DateTime.now());
|
||||
|
||||
context.read<PropertyInfoBloc>().add(
|
||||
UpdatPropertyInfo(
|
||||
property_info: property_info));
|
||||
context.read<PropertyInfoBloc>().add(
|
||||
UpdatPropertyInfo(
|
||||
property_info: property_info));
|
||||
|
||||
widget.NextBtn();
|
||||
},
|
||||
),
|
||||
),
|
||||
])),
|
||||
],
|
||||
),
|
||||
widget.NextBtn();
|
||||
},
|
||||
),
|
||||
),
|
||||
])),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
@ -56,356 +56,388 @@ class _StructuralMaterialsPageEdit extends State<StructuralMaterialsPageEdit> {
|
|||
// TODO: implement listener
|
||||
}, builder: (context, state) {
|
||||
if (state is StructuralMaterialsLoaded) {
|
||||
return Expanded(
|
||||
child: SingleChildScrollView(
|
||||
padding: const EdgeInsets.all(30.0),
|
||||
return SingleChildScrollView(
|
||||
scrollDirection: Axis.vertical,
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('STRUCTURAL MATERIALS',
|
||||
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'FOUNDATION',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
Expanded(
|
||||
child: Column(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: foundationOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
foundationOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: foundationOthers,
|
||||
child: customTextField(
|
||||
"Enter other foundation", "", "other_foundation"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
foundation = x;
|
||||
});
|
||||
},
|
||||
options: const ['Reinforced Concrete', 'Plain Concrete'],
|
||||
selectedValues: foundation,
|
||||
whenEmpty: 'Select Foundations',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'COLUMNS',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: columOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
columOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: columOthers,
|
||||
child: customTextField(
|
||||
"Enter other columns", "", "other_column"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
column = x;
|
||||
});
|
||||
},
|
||||
options: const ['Steel', 'Reinforced Concrete', 'Wood'],
|
||||
selectedValues: column,
|
||||
whenEmpty: 'Select Column/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'BEAMS',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: beamsOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
beamsOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: beamsOthers,
|
||||
child:
|
||||
customTextField("Enter other beam/s", "", "other_beam"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
beam = x;
|
||||
});
|
||||
},
|
||||
options: const ['Steel', 'Reinforced Concrete', 'Wood'],
|
||||
selectedValues: beam,
|
||||
whenEmpty: 'Select Beam/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'TRUSS FRAMING',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: tfOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
tfOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: tfOthers,
|
||||
child: customTextField(
|
||||
"Enter other truss framing/s", "", "other_tf"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
truss_framing = x;
|
||||
});
|
||||
},
|
||||
options: const ['Steel', 'Wood'],
|
||||
selectedValues: truss_framing,
|
||||
whenEmpty: 'Select Truss Framing/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'ROOF',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: roofOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
roofOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: roofOthers,
|
||||
child:
|
||||
customTextField("Enter other roof/s", "", "other_roof"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
roof = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Reinforced Concrete',
|
||||
'Tiles',
|
||||
'G.I Sheet',
|
||||
'Aluminum',
|
||||
'Asbestos',
|
||||
'Long Span',
|
||||
'Concrete Desk',
|
||||
'Nipa/Anahaw/Cogon'
|
||||
],
|
||||
selectedValues: roof,
|
||||
whenEmpty: 'Select Roof/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'FLOORING',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: flooringOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
flooringOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: flooringOthers,
|
||||
child: customTextField(
|
||||
"Enter other flooring/s", "", "other_flooring"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
flooring = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Reinforced Concrete',
|
||||
'Plain Cement',
|
||||
'Marble',
|
||||
'Wood',
|
||||
'Tiles'
|
||||
],
|
||||
selectedValues: flooring,
|
||||
whenEmpty: 'Select Flooring/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||
Text(
|
||||
'WALLS & PARTITIONS',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: wpOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
wpOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: wpOthers,
|
||||
child: customTextField(
|
||||
"Enter other walls & partition/s", "", "other_wp"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
walls = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Reinforced Concrete',
|
||||
'Plain Concrete',
|
||||
'Wood',
|
||||
'CHIB',
|
||||
'G.I Sheet',
|
||||
'Build-a-wall',
|
||||
'Sawali',
|
||||
'Bamboo'
|
||||
],
|
||||
selectedValues: walls,
|
||||
whenEmpty: 'Select Walls & Partition/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.PrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
var strucMaterials = StructureMaterialsII(
|
||||
id: widget.tempId,
|
||||
foundation: foundation,
|
||||
columns: column,
|
||||
beams: beam,
|
||||
trussFraming: truss_framing,
|
||||
roof: roof,
|
||||
flooring: flooring,
|
||||
walls: walls,
|
||||
others: ["Others"]);
|
||||
context.read<PropertyInfoBloc>()
|
||||
..add(UpdateStrucMaterials(data: strucMaterials));
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('STRUCTURAL MATERIALS',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'FOUNDATION',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: foundationOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
foundationOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: foundationOthers,
|
||||
child: customTextField(
|
||||
"Enter other foundation", "", "other_foundation"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
foundation = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Reinforced Concrete',
|
||||
'Plain Concrete'
|
||||
],
|
||||
selectedValues: foundation,
|
||||
whenEmpty: 'Select Foundations',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'COLUMNS',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: columOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
columOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: columOthers,
|
||||
child: customTextField(
|
||||
"Enter other columns", "", "other_column"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
column = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Steel',
|
||||
'Reinforced Concrete',
|
||||
'Wood'
|
||||
],
|
||||
selectedValues: column,
|
||||
whenEmpty: 'Select Column/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'BEAMS',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: beamsOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
beamsOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: beamsOthers,
|
||||
child: customTextField(
|
||||
"Enter other beam/s", "", "other_beam"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
beam = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Steel',
|
||||
'Reinforced Concrete',
|
||||
'Wood'
|
||||
],
|
||||
selectedValues: beam,
|
||||
whenEmpty: 'Select Beam/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'TRUSS FRAMING',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: tfOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
tfOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: tfOthers,
|
||||
child: customTextField(
|
||||
"Enter other truss framing/s", "", "other_tf"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
truss_framing = x;
|
||||
});
|
||||
},
|
||||
options: const ['Steel', 'Wood'],
|
||||
selectedValues: truss_framing,
|
||||
whenEmpty: 'Select Truss Framing/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'ROOF',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: roofOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
roofOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: roofOthers,
|
||||
child: customTextField(
|
||||
"Enter other roof/s", "", "other_roof"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
roof = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Reinforced Concrete',
|
||||
'Tiles',
|
||||
'G.I Sheet',
|
||||
'Aluminum',
|
||||
'Asbestos',
|
||||
'Long Span',
|
||||
'Concrete Desk',
|
||||
'Nipa/Anahaw/Cogon'
|
||||
],
|
||||
selectedValues: roof,
|
||||
whenEmpty: 'Select Roof/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'FLOORING',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: flooringOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
flooringOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: flooringOthers,
|
||||
child: customTextField(
|
||||
"Enter other flooring/s", "", "other_flooring"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
flooring = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Reinforced Concrete',
|
||||
'Plain Cement',
|
||||
'Marble',
|
||||
'Wood',
|
||||
'Tiles'
|
||||
],
|
||||
selectedValues: flooring,
|
||||
whenEmpty: 'Select Flooring/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'WALLS & PARTITIONS',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: wpOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
wpOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: wpOthers,
|
||||
child: customTextField(
|
||||
"Enter other walls & partition/s", "", "other_wp"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
walls = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Reinforced Concrete',
|
||||
'Plain Concrete',
|
||||
'Wood',
|
||||
'CHIB',
|
||||
'G.I Sheet',
|
||||
'Build-a-wall',
|
||||
'Sawali',
|
||||
'Bamboo'
|
||||
],
|
||||
selectedValues: walls,
|
||||
whenEmpty: 'Select Walls & Partition/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.PrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
var strucMaterials = StructureMaterialsII(
|
||||
id: widget.tempId,
|
||||
foundation: foundation,
|
||||
columns: column,
|
||||
beams: beam,
|
||||
trussFraming: truss_framing,
|
||||
roof: roof,
|
||||
flooring: flooring,
|
||||
walls: walls,
|
||||
others: ["Others"]);
|
||||
context.read<PropertyInfoBloc>()
|
||||
..add(
|
||||
UpdateStrucMaterials(data: strucMaterials));
|
||||
|
||||
widget.NextBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
)
|
||||
widget.NextBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
));
|
||||
);
|
||||
}
|
||||
if (state is StructuralMaterialsErrorState) {
|
||||
return Text(state.error);
|
||||
|
|
|
@ -0,0 +1,481 @@
|
|||
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:multiselect/multiselect.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:unit2/bloc/passo/bulding/property_info/property_info_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/bulding/structural_material/structural_material_bloc.dart';
|
||||
import 'package:unit2/model/passo/structural_materials_ii.dart';
|
||||
import 'package:unit2/screens/passo/Building/add_building.dart';
|
||||
import 'package:unit2/widgets/passo/custom_button.dart';
|
||||
import 'package:unit2/widgets/passo/custom_formBuilder_fields.dart';
|
||||
|
||||
class MaterialOption {
|
||||
final String id;
|
||||
final String label;
|
||||
|
||||
MaterialOption(this.id, this.label);
|
||||
}
|
||||
|
||||
class StructuralMaterialsEditPage extends StatefulWidget {
|
||||
final int tempId;
|
||||
final VoidCallback NextBtn;
|
||||
final VoidCallback PrevBtn;
|
||||
|
||||
StructuralMaterialsEditPage(this.tempId, this.NextBtn, this.PrevBtn);
|
||||
|
||||
@override
|
||||
_StructuralMaterialsEditPage createState() => _StructuralMaterialsEditPage();
|
||||
}
|
||||
|
||||
class _StructuralMaterialsEditPage extends State<StructuralMaterialsEditPage> {
|
||||
List<String> foundation = [];
|
||||
List<String> column = [];
|
||||
List<String> beam = [];
|
||||
List<String> truss_framing = [];
|
||||
List<String> roof = [];
|
||||
List<String> flooring = [];
|
||||
List<String> walls = [];
|
||||
bool foundationOthers = false;
|
||||
bool columOthers = false;
|
||||
bool beamsOthers = false;
|
||||
bool tfOthers = false;
|
||||
bool roofOthers = false;
|
||||
bool flooringOthers = false;
|
||||
bool wpOthers = false;
|
||||
|
||||
List<MaterialOption> columnOptions = [
|
||||
MaterialOption('steel', 'Steel'),
|
||||
MaterialOption('concrete', 'Reinforced Concrete'),
|
||||
MaterialOption('wood', 'Wood'),
|
||||
];
|
||||
|
||||
List<String> selectedColumnValues = [];
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body: ProgressHUD(
|
||||
padding: const EdgeInsets.all(24),
|
||||
backgroundColor: Colors.black87,
|
||||
indicatorWidget: const SpinKitFadingCircle(color: Colors.white),
|
||||
child: BlocConsumer<StructuralMaterialBloc, StructuralMaterialState>(
|
||||
listener: (context, state) {
|
||||
if (state is StructuralMaterialsLoading) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress!.showWithText("Please wait...");
|
||||
}
|
||||
|
||||
if (state is StructuralMaterialsLoaded) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
setState(() {
|
||||
foundation = state.structure.foundation!.split(',');
|
||||
column = state.structure.columns!.split(',');
|
||||
beam = state.structure.beams!.split(',');
|
||||
truss_framing = state.structure.trussFraming!.split(',');
|
||||
roof = state.structure.roof!.split(',');
|
||||
flooring = state.structure.flooring!.split(',');
|
||||
walls = state.structure.walls!.split(',');
|
||||
// Update other local state variables here if needed
|
||||
});
|
||||
}
|
||||
if (state is StructuralMaterialsErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
}, builder: (context, state) {
|
||||
return SingleChildScrollView(
|
||||
padding: const EdgeInsets.all(30.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('STRUCTURAL MATERIALS',
|
||||
style:
|
||||
TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'FOUNDATION',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: foundationOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
foundationOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: foundationOthers,
|
||||
child: customTextField(
|
||||
"Enter other foundation", "", "other_foundation"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
foundation = x;
|
||||
});
|
||||
},
|
||||
options: const ['Reinforced Concrete', 'Plain Concrete'],
|
||||
selectedValues: foundation,
|
||||
whenEmpty: 'Select Foundations',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'COLUMNS',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: columOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
columOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: columOthers,
|
||||
child: customTextField(
|
||||
"Enter other columns", "", "other_column"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
column = x;
|
||||
});
|
||||
},
|
||||
options: const ['Steel', 'Reinforced Concrete', 'Wood'],
|
||||
selectedValues: column,
|
||||
whenEmpty: 'Select Column/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'BEAMS',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: beamsOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
beamsOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: beamsOthers,
|
||||
child:
|
||||
customTextField("Enter other beam/s", "", "other_beam"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
beam = x;
|
||||
});
|
||||
},
|
||||
options: const ['Steel', 'Reinforced Concrete', 'Wood'],
|
||||
selectedValues: beam,
|
||||
whenEmpty: 'Select Beam/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'TRUSS FRAMING',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: tfOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
tfOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: tfOthers,
|
||||
child: customTextField(
|
||||
"Enter other truss framing/s", "", "other_tf"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
truss_framing = x;
|
||||
});
|
||||
},
|
||||
options: const ['Steel', 'Wood'],
|
||||
selectedValues: truss_framing,
|
||||
whenEmpty: 'Select Truss Framing/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'ROOF',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: roofOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
roofOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: roofOthers,
|
||||
child:
|
||||
customTextField("Enter other roof/s", "", "other_roof"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
roof = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Reinforced Concrete',
|
||||
'Tiles',
|
||||
'G.I Sheet',
|
||||
'Aluminum',
|
||||
'Asbestos',
|
||||
'Long Span',
|
||||
'Concrete Desk',
|
||||
'Nipa/Anahaw/Cogon'
|
||||
],
|
||||
selectedValues: roof,
|
||||
whenEmpty: 'Select Roof/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'FLOORING',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: flooringOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
flooringOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: flooringOthers,
|
||||
child: customTextField(
|
||||
"Enter other flooring/s", "", "other_flooring"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
flooring = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Reinforced Concrete',
|
||||
'Plain Cement',
|
||||
'Marble',
|
||||
'Wood',
|
||||
'Tiles'
|
||||
],
|
||||
selectedValues: flooring,
|
||||
whenEmpty: 'Select Flooring/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'WALLS & PARTITIONS',
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Others'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: wpOthers,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
wpOthers = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
|
||||
child: Visibility(
|
||||
visible: wpOthers,
|
||||
child: customTextField(
|
||||
"Enter other walls & partition/s", "", "other_wp"),
|
||||
replacement: DropDownMultiSelect(
|
||||
selected_values_style: TextStyle(color: Colors.black),
|
||||
onChanged: (List<String> x) {
|
||||
setState(() {
|
||||
walls = x;
|
||||
});
|
||||
},
|
||||
options: const [
|
||||
'Reinforced Concrete',
|
||||
'Plain Concrete',
|
||||
'Wood',
|
||||
'CHIB',
|
||||
'G.I Sheet',
|
||||
'Build-a-wall',
|
||||
'Sawali',
|
||||
'Bamboo'
|
||||
],
|
||||
selectedValues: walls,
|
||||
whenEmpty: 'Select Walls & Partition/s',
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.NextBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () async {
|
||||
{
|
||||
final tempID = await SharedPreferences.getInstance();
|
||||
var strucMaterials = StructureMaterialsII(
|
||||
id: tempID.getInt('tempid')! - 1,
|
||||
foundation: foundationOthers
|
||||
? formKey
|
||||
.currentState!.value['other_foundation']
|
||||
.split(',')
|
||||
: foundation,
|
||||
columns: columOthers
|
||||
? formKey.currentState!.value['other_column']
|
||||
.split(',')
|
||||
: column,
|
||||
beams: beamsOthers
|
||||
? formKey.currentState!.value['other_beam']
|
||||
.split(',')
|
||||
: beam,
|
||||
trussFraming: tfOthers
|
||||
? formKey.currentState!.value['other_tf']
|
||||
.split(',')
|
||||
: truss_framing,
|
||||
roof: roofOthers
|
||||
? formKey.currentState!.value['other_roof']
|
||||
.split(',')
|
||||
: roof,
|
||||
flooring: flooringOthers
|
||||
? formKey
|
||||
.currentState!.value['other_flooring']
|
||||
.split(',')
|
||||
: flooring,
|
||||
walls: wpOthers
|
||||
? formKey.currentState!.value['other_wp']
|
||||
.split(',')
|
||||
: walls,
|
||||
others: ["Others"]);
|
||||
context.read<PropertyInfoBloc>()
|
||||
..add(UpdateStrucMaterials(data: strucMaterials));
|
||||
|
||||
widget.PrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -107,7 +107,6 @@ class _AddLandAppraisalModal extends State<AddLandAppraisalModal> {
|
|||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Container(
|
||||
height: 800,
|
||||
child: SingleChildScrollView(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
|
@ -387,7 +386,7 @@ class _AddLandAppraisalModal extends State<AddLandAppraisalModal> {
|
|||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
|
@ -5,6 +5,8 @@ import 'package:unit2/bloc/passo/land/land_appraisal/land_appraisal_bloc.dart';
|
|||
import 'package:unit2/model/passo/land_appr.dart';
|
||||
import 'package:unit2/screens/passo/Land/add_land/AddLandAppraisal.dart';
|
||||
import 'package:unit2/utils/alerts.dart';
|
||||
import 'package:unit2/utils/text_container.dart';
|
||||
import 'package:unit2/widgets/error_state.dart';
|
||||
import 'package:unit2/widgets/passo/custom_button.dart';
|
||||
|
||||
class LandAppraisal extends StatefulWidget {
|
||||
|
@ -237,11 +239,21 @@ class _LandAppraisal extends State<LandAppraisal> {
|
|||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [Expanded(child: AddLandAppraisalModal())],
|
||||
children: [
|
||||
Expanded(child: AddLandAppraisalModal()),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
if (state is LandAppraisalErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context.read<LandAppraisalBloc>().add(LoadLandAppraisal());
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:unit2/bloc/passo/land/land_property_owner_info/land_property_owner_info_bloc.dart';
|
||||
import 'package:unit2/model/passo/land_property_boundaries.dart';
|
||||
import 'package:unit2/model/passo/land_property_loc.dart';
|
||||
|
@ -107,16 +108,18 @@ class _LandLocationAndBoundaries extends State<LandLocationAndBoundaries> {
|
|||
CustomButton(
|
||||
icon:
|
||||
const Icon(Icons.chevron_right, color: Colors.white),
|
||||
onPressed: () {
|
||||
onPressed: () async {
|
||||
final tempID = await SharedPreferences.getInstance();
|
||||
print(tempID.getInt('landid'));
|
||||
var boundaries = LandPropertyBoundaries(
|
||||
id: 3,
|
||||
id: tempID.getInt('landid')! - 1,
|
||||
north: landKey.currentState?.value['north'],
|
||||
east: landKey.currentState?.value['east'],
|
||||
west: landKey.currentState?.value['west'],
|
||||
south: landKey.currentState?.value['south'],
|
||||
);
|
||||
var location = LandPropertyLoc(
|
||||
id: 3,
|
||||
id: tempID.getInt('landid')! - 1,
|
||||
street: landKey.currentState?.value['street'],
|
||||
barangay: landKey.currentState?.value['brgy'],
|
||||
municipality:
|
||||
|
|
|
@ -76,7 +76,6 @@ class _LandPropertyOwnerInfo extends State<LandPropertyOwnerInfo> {
|
|||
flex: 1,
|
||||
child: customTextField("Blk", "", "blk")),
|
||||
]),
|
||||
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
|
@ -117,45 +116,6 @@ class _LandPropertyOwnerInfo extends State<LandPropertyOwnerInfo> {
|
|||
flex: 1,
|
||||
child: customTextField("Tel No.", "", "admin_telno"))
|
||||
]),
|
||||
|
||||
// SizedBox(
|
||||
// width: double.infinity,
|
||||
// height: 50,
|
||||
// child: ElevatedButton(
|
||||
// style: secondaryBtnStyle(const Color(0xffd92828),
|
||||
// Color.fromARGB(0, 253, 252, 252), Colors.white54),
|
||||
// child: const Text(
|
||||
// "SUBMIT & PROCEED",
|
||||
// style: TextStyle(
|
||||
// color: Color.fromARGB(239, 255, 255, 255),
|
||||
// fontWeight: FontWeight.w700),
|
||||
// ),
|
||||
// onPressed: () {
|
||||
// // formKey.currentState?.save();
|
||||
// // // var faas = PropertyInfo(
|
||||
// // // id: 1,
|
||||
// // // transCode: formKey
|
||||
// // // .currentState!.value['transaction_code']
|
||||
// // // .toString(),
|
||||
// // // tdn: formKey.currentState!.value['arp_td'],
|
||||
// // // pin: formKey.currentState!.value['pin'],
|
||||
// // // owner: formKey.currentState!.value['owner'],
|
||||
// // // address: formKey.currentState!.value['address'],
|
||||
// // // telno: formKey.currentState!.value['tel_no'],
|
||||
// // // tin: formKey.currentState!.value['tin'],
|
||||
// // // adminUser: formKey.currentState!.value['benificiary'],
|
||||
// // // adminAddress: formKey
|
||||
// // // .currentState!.value['benificiary_address'],
|
||||
// // // adminTin:
|
||||
// // // formKey.currentState!.value['benificiary_tin'],
|
||||
// // // adminTelno:
|
||||
// // // formKey.currentState!.value['benificiary_telno']);
|
||||
// // // context.read<AssessorsBloc>().add(AddFaas(faas: faas));
|
||||
// // // _loadTempId();
|
||||
// // _pageController.nextPage(
|
||||
// // duration: _kDuration, curve: _kCurve);
|
||||
// }),
|
||||
// ),
|
||||
SizedBox(
|
||||
height: 30,
|
||||
),
|
||||
|
|
|
@ -0,0 +1,128 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
||||
|
||||
import 'package:im_stepper/stepper.dart';
|
||||
import 'package:unit2/model/passo/land_property_owner.dart';
|
||||
import 'package:unit2/screens/passo/Land/edit_land/land_appraisal.dart';
|
||||
import 'package:unit2/screens/passo/Land/edit_land/location_and_boundaries_edit.dart';
|
||||
import 'package:unit2/screens/passo/Land/edit_land/other_improvements_edit.dart';
|
||||
import 'package:unit2/screens/passo/Land/edit_land/property_assessment_cont_edit.dart';
|
||||
import 'package:unit2/screens/passo/Land/edit_land/property_assessment_edit.dart';
|
||||
import 'package:unit2/screens/passo/Land/edit_land/property_owner_info_edit.dart';
|
||||
import 'package:unit2/screens/passo/Land/edit_land/value_adjustments_edit.dart';
|
||||
import 'package:unit2/theme-data.dart/colors.dart';
|
||||
|
||||
GlobalKey<FormBuilderState> landKey = GlobalKey<FormBuilderState>();
|
||||
|
||||
class EditLand extends StatefulWidget {
|
||||
final int index;
|
||||
final LandPropertyOwner faas;
|
||||
final String title;
|
||||
|
||||
const EditLand(
|
||||
{super.key,
|
||||
required this.title,
|
||||
required this.index,
|
||||
required this.faas});
|
||||
@override
|
||||
_EditLand createState() => _EditLand();
|
||||
}
|
||||
|
||||
class _EditLand extends State<EditLand> {
|
||||
// THE FOLLOWING TWO VARIABLES ARE REQUIRED TO CONTROL THE STEPPER.
|
||||
int activeStep = 0; // Initial step set to 5.
|
||||
|
||||
int upperBound = 6; // upperBound MUST BE total number of icons minus 1.
|
||||
|
||||
void PrevBtn() {
|
||||
setState(() {
|
||||
activeStep--;
|
||||
});
|
||||
}
|
||||
|
||||
void NextBtn() {
|
||||
setState(() {
|
||||
activeStep++;
|
||||
});
|
||||
}
|
||||
|
||||
void onSAveAll() {
|
||||
return Navigator.of(context).pop();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
centerTitle: true,
|
||||
backgroundColor: primary,
|
||||
title: Text('Land FAAS'),
|
||||
),
|
||||
body: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
children: [
|
||||
NumberStepper(
|
||||
numbers: [1, 2, 3, 4, 5, 6, 7],
|
||||
activeStepColor: primary,
|
||||
numberStyle: TextStyle(color: Colors.white),
|
||||
lineColor: primary,
|
||||
// activeStep property set to activeStep variable defined above.
|
||||
activeStep: activeStep,
|
||||
activeStepBorderColor: Colors.white,
|
||||
activeStepBorderWidth: 1,
|
||||
// This ensures step-tapping updates the activeStep.
|
||||
onStepReached: (index) {
|
||||
setState(() {
|
||||
activeStep = index;
|
||||
});
|
||||
},
|
||||
),
|
||||
Expanded(
|
||||
child: FormBuilder(
|
||||
key: landKey,
|
||||
|
||||
// enabled: false,
|
||||
onChanged: () {
|
||||
landKey.currentState?.save();
|
||||
|
||||
print(landKey.currentState?.value.toString());
|
||||
},
|
||||
autovalidateMode: AutovalidateMode.disabled,
|
||||
skipDisabled: true,
|
||||
child: Container(
|
||||
child: content(PrevBtn, NextBtn, onSAveAll),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/// Returns the next button.
|
||||
|
||||
// Returns the content widget based on the activeStep.
|
||||
Widget content(PrevBtn, NextBtn, onSAveAll) {
|
||||
switch (activeStep) {
|
||||
case 0:
|
||||
return LandPropertyOwnerInfoEdit(NextBtn, widget.faas!);
|
||||
case 1:
|
||||
return LandLocationAndBoundariesEdit(PrevBtn, NextBtn, widget.faas!);
|
||||
case 2:
|
||||
return LandAppraisalEdit(PrevBtn, NextBtn);
|
||||
case 3:
|
||||
return OtherImprovementEditPage(PrevBtn, NextBtn);
|
||||
case 4:
|
||||
return ValueAdjustmentEditPage(PrevBtn, NextBtn);
|
||||
case 5:
|
||||
return LandPropertyAssessmentEditPage(PrevBtn, NextBtn);
|
||||
case 6:
|
||||
return LandSignatoriesEdit(onSAveAll);
|
||||
|
||||
default:
|
||||
return LandPropertyOwnerInfoEdit(NextBtn, widget.faas!);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,262 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:unit2/bloc/passo/land/land_appraisal/land_appraisal_bloc.dart';
|
||||
import 'package:unit2/model/passo/land_appr.dart';
|
||||
import 'package:unit2/screens/passo/Land/add_land/AddLandAppraisal.dart';
|
||||
import 'package:unit2/utils/alerts.dart';
|
||||
import 'package:unit2/utils/text_container.dart';
|
||||
import 'package:unit2/widgets/error_state.dart';
|
||||
import 'package:unit2/widgets/passo/custom_button.dart';
|
||||
|
||||
class LandAppraisalEdit extends StatefulWidget {
|
||||
Function PrevBtn;
|
||||
Function NextBtn;
|
||||
LandAppraisalEdit(this.PrevBtn, this.NextBtn);
|
||||
@override
|
||||
_LandAppraisalEdit createState() => _LandAppraisalEdit();
|
||||
}
|
||||
|
||||
class _LandAppraisalEdit extends State<LandAppraisalEdit> {
|
||||
// double _totalMarketValue(items) {
|
||||
// double total = 0;
|
||||
// items.forEach((row) {
|
||||
// total += double.parse(row);
|
||||
// });
|
||||
// return total;
|
||||
// }
|
||||
|
||||
void deleteItem(int itemId) {
|
||||
context.read<LandAppraisalBloc>().add(DeleteLandAppraisal(id: itemId));
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocConsumer<LandAppraisalBloc, LandAppraisalState>(
|
||||
listener: (context, state) {
|
||||
// TODO: implement listener
|
||||
}, builder: (context, state) {
|
||||
final state = context.watch<LandAppraisalBloc>().state;
|
||||
if (state is LandAppraisalLoaded) {
|
||||
return Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('LAND APPRAISAL',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.topRight,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
onPressed: () {
|
||||
context
|
||||
.read<LandAppraisalBloc>()
|
||||
.add(ShowLandAppraisal());
|
||||
},
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Text('ADD ITEM'), // <-- Text
|
||||
const SizedBox(
|
||||
width: 5,
|
||||
),
|
||||
const Icon(
|
||||
// <-- Icon
|
||||
Icons.add,
|
||||
size: 24.0,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: DataTable(
|
||||
// ignore: prefer_const_literals_to_create_immutables
|
||||
columns: [
|
||||
const DataColumn(
|
||||
label: Text('Classification'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Sub-Classification'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Area'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Unit Value'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Base MArket Value'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Action'),
|
||||
)
|
||||
],
|
||||
rows: state.land_appr.map((dataRow) {
|
||||
return DataRow(
|
||||
cells: [
|
||||
DataCell(Text(dataRow.classification!)),
|
||||
DataCell(Text(dataRow.subClass!)),
|
||||
DataCell(Text(dataRow.area!)),
|
||||
DataCell(Text(
|
||||
((double.parse(dataRow.unitValue!)))
|
||||
.toString())),
|
||||
DataCell(Text(
|
||||
((double.parse(dataRow.baseMarketval!)))
|
||||
.toString())),
|
||||
DataCell(Row(
|
||||
children: [
|
||||
InkWell(
|
||||
child: Container(
|
||||
height: 30,
|
||||
width: 30,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.red,
|
||||
),
|
||||
child: Icon(
|
||||
Icons.delete,
|
||||
color: Colors.white,
|
||||
size: 20.0,
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
deleteItem(dataRow.id!);
|
||||
},
|
||||
),
|
||||
SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
InkWell(
|
||||
child: Container(
|
||||
height: 30,
|
||||
width: 30,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.red,
|
||||
),
|
||||
child: Icon(
|
||||
Icons.edit,
|
||||
color: Colors.white,
|
||||
size: 20.0,
|
||||
),
|
||||
),
|
||||
onTap: () {},
|
||||
),
|
||||
],
|
||||
))
|
||||
],
|
||||
);
|
||||
}).toList()))
|
||||
],
|
||||
),
|
||||
),
|
||||
)),
|
||||
// Padding(
|
||||
// padding: const EdgeInsets.only(left: 20.0, right: 20.0),
|
||||
// child: Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
// children: [
|
||||
// Text(
|
||||
// 'Total',
|
||||
// style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
|
||||
// ),
|
||||
// Text(
|
||||
// NumberFormat.currency(locale: 'en-PH', symbol: "₱")
|
||||
// .format('1.0'),
|
||||
// style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
|
||||
// )
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.PrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.NextBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
if (state is LandAppraisalDeletedState) {
|
||||
if (state.success) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
successAlert(context, "Deletion Successful",
|
||||
"Extra item has been deleted successfully", () {
|
||||
Navigator.of(context).pop();
|
||||
context.read<LandAppraisalBloc>().add(const LoadLandAppraisal());
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
if (state is ShowAddLandAppraisalScreen) {
|
||||
return ConstrainedBox(
|
||||
constraints: BoxConstraints(
|
||||
maxHeight: 700.0,
|
||||
),
|
||||
child: AlertDialog(
|
||||
insetPadding: EdgeInsets.symmetric(
|
||||
horizontal: 20.0,
|
||||
vertical: 10.0,
|
||||
),
|
||||
title: Text(
|
||||
'ADD LAND APPRAISAL',
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(child: AddLandAppraisalModal()),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
if (state is LandAppraisalErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context.read<LandAppraisalBloc>().add(LoadLandAppraisal());
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,266 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
||||
import 'package:flutter_progress_hud/flutter_progress_hud.dart';
|
||||
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
||||
import 'package:unit2/bloc/passo/land/land_boundaries_edit/land_boundaries_edit_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/land/land_location_edit/land_location_edit_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/land/land_property_owner_info/land_property_owner_info_bloc.dart';
|
||||
import 'package:unit2/model/passo/land_property_boundaries.dart';
|
||||
import 'package:unit2/model/passo/land_property_loc.dart';
|
||||
import 'package:unit2/model/passo/land_property_owner.dart';
|
||||
import 'package:unit2/screens/passo/Land/add_land.dart';
|
||||
import 'package:unit2/screens/passo/Land/edit_land/property_owner_info_edit.dart';
|
||||
import 'package:unit2/utils/text_container.dart';
|
||||
import 'package:unit2/widgets/error_state.dart';
|
||||
import 'package:unit2/widgets/passo/custom_button.dart';
|
||||
import 'package:unit2/widgets/passo/custom_formBuilder_fields.dart';
|
||||
|
||||
class LandLocationAndBoundariesEdit extends StatefulWidget {
|
||||
Function PrevBtn;
|
||||
Function NextBtn;
|
||||
LandPropertyOwner land;
|
||||
LandLocationAndBoundariesEdit(this.PrevBtn, this.NextBtn, this.land);
|
||||
@override
|
||||
_LandLocationAndBoundariesEdit createState() =>
|
||||
_LandLocationAndBoundariesEdit();
|
||||
}
|
||||
|
||||
class _LandLocationAndBoundariesEdit
|
||||
extends State<LandLocationAndBoundariesEdit> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body: ProgressHUD(
|
||||
padding: const EdgeInsets.all(24),
|
||||
backgroundColor: Colors.black87,
|
||||
indicatorWidget: const SpinKitFadingCircle(color: Colors.white),
|
||||
child: BlocConsumer<LandLocationEditBloc, LandLocationEditState>(
|
||||
listener: (context, state) {
|
||||
if (state is LandLocationEditLoading) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress!.showWithText("Please wait...");
|
||||
}
|
||||
|
||||
if (state is LandLocationEditErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
},
|
||||
builder: (context, state) {
|
||||
if (state is LandLocationEditLoaded) {
|
||||
final landLoc = state.land_loc_edit;
|
||||
return BlocConsumer<LandBoundariesEditBloc,
|
||||
LandBoundariesEditState>(
|
||||
listener: (context, state) {
|
||||
if (state is LandLocationEditLoaded) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
if (state is LandBoundariesEditErrorState) {
|
||||
final progress = ProgressHUD.of(context);
|
||||
progress?.dismiss();
|
||||
}
|
||||
},
|
||||
builder: (context, state) {
|
||||
if (state is LandBoundariesEditLoaded) {
|
||||
return FormBuilder(
|
||||
key: landEditKey,
|
||||
initialValue: {
|
||||
'street': landLoc.street,
|
||||
'brgy': landLoc.barangay,
|
||||
'municipality': landLoc.municipality,
|
||||
'province': landLoc.province
|
||||
},
|
||||
enabled: true,
|
||||
onChanged: () {
|
||||
landEditKey.currentState!.save();
|
||||
debugPrint(landEditKey.currentState!.value.toString());
|
||||
},
|
||||
autovalidateMode: AutovalidateMode.disabled,
|
||||
skipDisabled: true,
|
||||
child: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: <Widget>[
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('PROPERTY LOCATION',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
const SizedBox(height: 15),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"No. / Street", "", "street")),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Brgy./District", "", "brgy")),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Municipality", "", "municipality"),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Province/City", "", "province"))
|
||||
]),
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('PROPERTY BOUNDARIES',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"North", "", "north"),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"East", "", "east"))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"South", "", "south"),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"West", "", "west"))
|
||||
]),
|
||||
SizedBox(
|
||||
height: 50,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_left,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
widget.PrevBtn();
|
||||
}),
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
print(widget.land.id);
|
||||
var boundaries =
|
||||
LandPropertyBoundaries(
|
||||
id: widget.land.id,
|
||||
north: landEditKey
|
||||
.currentState?.value['north'],
|
||||
east: landEditKey
|
||||
.currentState?.value['east'],
|
||||
west: landEditKey
|
||||
.currentState?.value['west'],
|
||||
south: landEditKey
|
||||
.currentState?.value['south'],
|
||||
);
|
||||
var location = LandPropertyLoc(
|
||||
id: widget.land.id,
|
||||
street: landEditKey
|
||||
.currentState?.value['street'],
|
||||
barangay: landEditKey
|
||||
.currentState?.value['brgy'],
|
||||
municipality: landEditKey
|
||||
.currentState
|
||||
?.value['municipality'],
|
||||
province: landEditKey.currentState
|
||||
?.value['province'],
|
||||
);
|
||||
|
||||
context.read<LandLocationEditBloc>()
|
||||
..add(UpdateLandLocationEdit(
|
||||
land_loc_edit: location,
|
||||
id: widget.land.id!));
|
||||
|
||||
context.read<LandBoundariesEditBloc>()
|
||||
..add(UpdateLandBoundariesEdit(
|
||||
land_boundaries_edit:
|
||||
boundaries,
|
||||
id: widget.land.id!));
|
||||
|
||||
widget.NextBtn();
|
||||
})
|
||||
],
|
||||
)
|
||||
]),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
if (state is LandBoundariesEditErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context.read<LandBoundariesEditBloc>().add(
|
||||
LoadLandBoundariesEdit(
|
||||
land_boundaries_edit: LandPropertyBoundaries(),
|
||||
id: widget.land.id!));
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
);
|
||||
}
|
||||
;
|
||||
if (state is LandLocationEditErrorState) {
|
||||
return SomethingWentWrong(
|
||||
message: onError,
|
||||
onpressed: () {
|
||||
context.read<LandLocationEditBloc>().add(LoadLandLocationEdit(
|
||||
land_loc_edit: LandPropertyLoc(), id: widget.land.id!));
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,263 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/land/other_improvements/other_improvements_bloc.dart';
|
||||
import 'package:unit2/screens/passo/Land/add_land/AddOtherImprovementModal.dart';
|
||||
import 'package:unit2/utils/alerts.dart';
|
||||
import 'package:unit2/widgets/passo/custom_button.dart';
|
||||
|
||||
class OtherImprovementEditPage extends StatefulWidget {
|
||||
Function PrevBtn;
|
||||
Function NextBtn;
|
||||
OtherImprovementEditPage(this.PrevBtn, this.NextBtn);
|
||||
@override
|
||||
_OtherImprovementEditPage createState() => _OtherImprovementEditPage();
|
||||
}
|
||||
|
||||
class _OtherImprovementEditPage extends State<OtherImprovementEditPage> {
|
||||
// double _totalMarketValue(items) {
|
||||
// double total = 0;
|
||||
// items.forEach((row) {
|
||||
// total += double.parse(row);
|
||||
// });
|
||||
// return total;
|
||||
// }
|
||||
|
||||
void deleteItem(int itemId) {
|
||||
context
|
||||
.read<OtherImprovementsBloc>()
|
||||
.add(DeleteOtherImprovement(id: itemId));
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocConsumer<OtherImprovementsBloc, OtherImprovementsState>(
|
||||
listener: (context, state) {
|
||||
// TODO: implement listener
|
||||
}, builder: (context, state) {
|
||||
final state = context.watch<OtherImprovementsBloc>().state;
|
||||
if (state is OtherImprovementLoaded) {
|
||||
return Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('OTHER IMPROVEMENTS',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.topRight,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
onPressed: () {
|
||||
context
|
||||
.read<OtherImprovementsBloc>()
|
||||
.add(ShowOtherImprovement());
|
||||
},
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Text('ADD ITEM'), // <-- Text
|
||||
const SizedBox(
|
||||
width: 5,
|
||||
),
|
||||
const Icon(
|
||||
// <-- Icon
|
||||
Icons.add,
|
||||
size: 24.0,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: DataTable(
|
||||
// ignore: prefer_const_literals_to_create_immutables
|
||||
columns: [
|
||||
const DataColumn(
|
||||
label: Text('Kinds of Tress'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Sub-Class / Age'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Type of Tree'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('No.'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('No. of Productive'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('No. of Non-Productive'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Unit Value'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Base Market Value'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Action'),
|
||||
)
|
||||
],
|
||||
rows: state.other_imp.map((dataRow) {
|
||||
return DataRow(
|
||||
cells: [
|
||||
DataCell(Text(dataRow.kindsOfTrees!)),
|
||||
DataCell(Text(dataRow.subclassAge!)),
|
||||
DataCell(Text(dataRow.fruitBearing!
|
||||
? "Fruit Bearing"
|
||||
: "Non-Fruit Bearing")),
|
||||
DataCell(Text(dataRow.quantity.toString()!)),
|
||||
DataCell(
|
||||
Text(dataRow.noOfProductive.toString()!)),
|
||||
DataCell(Text(
|
||||
dataRow.noOfNonproductive.toString()!)),
|
||||
DataCell(Text(dataRow.unitValue.toString()!)),
|
||||
DataCell(
|
||||
Text(dataRow.baseMarketval.toString()!)),
|
||||
DataCell(Row(
|
||||
children: [
|
||||
InkWell(
|
||||
child: Container(
|
||||
height: 30,
|
||||
width: 30,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.red,
|
||||
),
|
||||
child: Icon(
|
||||
Icons.delete,
|
||||
color: Colors.white,
|
||||
size: 20.0,
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
deleteItem(dataRow.id!);
|
||||
},
|
||||
),
|
||||
SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
InkWell(
|
||||
child: Container(
|
||||
height: 30,
|
||||
width: 30,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.red,
|
||||
),
|
||||
child: Icon(
|
||||
Icons.edit,
|
||||
color: Colors.white,
|
||||
size: 20.0,
|
||||
),
|
||||
),
|
||||
onTap: () {},
|
||||
),
|
||||
],
|
||||
))
|
||||
],
|
||||
);
|
||||
}).toList()))
|
||||
],
|
||||
),
|
||||
),
|
||||
)),
|
||||
// Padding(
|
||||
// padding: const EdgeInsets.only(left: 20.0, right: 20.0),
|
||||
// child: Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
// children: [
|
||||
// Text(
|
||||
// 'Total',
|
||||
// style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
|
||||
// ),
|
||||
// Text(
|
||||
// NumberFormat.currency(locale: 'en-PH', symbol: "₱")
|
||||
// .format('1.0'),
|
||||
// style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
|
||||
// )
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.PrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.NextBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
if (state is OtherImprovementDeletedState) {
|
||||
if (state.success) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
successAlert(context, "Deletion Successful",
|
||||
"Extra item has been deleted successfully", () {
|
||||
Navigator.of(context).pop();
|
||||
context
|
||||
.read<OtherImprovementsBloc>()
|
||||
.add(const LoadOtherImprovement());
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
if (state is ShowAddOtherImprovementScreen) {
|
||||
return ConstrainedBox(
|
||||
constraints: BoxConstraints(maxHeight: 1000.0),
|
||||
child: AlertDialog(
|
||||
insetPadding: EdgeInsets.symmetric(
|
||||
horizontal: 20.0,
|
||||
vertical: 10.0,
|
||||
),
|
||||
title: Text(
|
||||
'ADD OTHER IMPROVEMENTS',
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [Container(child: AddOtherImprovementModal())],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,541 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
||||
import 'package:form_builder_validators/form_builder_validators.dart';
|
||||
import 'package:searchfield/searchfield.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:unit2/bloc/passo/land/land_ext/land_ext_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/memoranda/memoranda_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/signatories/signatories_bloc.dart';
|
||||
import 'package:unit2/model/passo/land_ext.dart';
|
||||
import 'package:unit2/model/passo/memoranda.dart';
|
||||
import 'package:unit2/model/passo/signatories.dart';
|
||||
import 'package:unit2/screens/passo/Land/add_land.dart';
|
||||
import 'package:unit2/theme-data.dart/colors.dart';
|
||||
|
||||
class LandSignatoriesEdit extends StatefulWidget {
|
||||
Function onSAve;
|
||||
LandSignatoriesEdit(this.onSAve);
|
||||
|
||||
@override
|
||||
_LandSignatoriesEdit createState() => _LandSignatoriesEdit();
|
||||
}
|
||||
|
||||
class _LandSignatoriesEdit extends State<LandSignatoriesEdit> {
|
||||
bool isTaxable = false;
|
||||
bool isExempt = false;
|
||||
final focus = FocusNode();
|
||||
String _memoranda = "";
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocConsumer<LandExtBloc, LandExtState>(
|
||||
listener: (context, state) {
|
||||
// TODO: implement listener
|
||||
},
|
||||
builder: (context, state) {
|
||||
if (state is LandExtLoaded) {
|
||||
return BlocConsumer<SignatoriesBloc, SignatoriesState>(
|
||||
listener: (context, state) {
|
||||
// TODO: implement listener
|
||||
},
|
||||
builder: (context, state) {
|
||||
if (state is SignatoriesLoaded) {
|
||||
final signatories = state.signatories;
|
||||
return BlocConsumer<MemorandaBloc, MemorandaState>(
|
||||
listener: (context, state) {
|
||||
// TODO: implement listener
|
||||
},
|
||||
builder: (context, state) {
|
||||
if (state is MemorandaLoaded) {
|
||||
return SingleChildScrollView(
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('PROPERTY ASSESSMENT cont..',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
const Text('Taxable'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: isTaxable,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
isTaxable = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Exempt'),
|
||||
Checkbox(
|
||||
checkColor: Colors.white,
|
||||
value: isExempt,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
isExempt = value!;
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
Column(
|
||||
children: [
|
||||
const SizedBox(
|
||||
height: 20,
|
||||
),
|
||||
const Text(
|
||||
'EFFECTIVITY OF ASSESSMENT / REASSESSMENT :',
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 20,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceAround,
|
||||
children: [
|
||||
const Text('Qtr.'),
|
||||
SizedBox(
|
||||
width: 70,
|
||||
height: 25,
|
||||
child: FormBuilderTextField(
|
||||
name: 'land_qtr',
|
||||
validator:
|
||||
FormBuilderValidators.compose([]),
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
width: 20,
|
||||
),
|
||||
const Text('Yr.'),
|
||||
SizedBox(
|
||||
width: 70,
|
||||
height: 25,
|
||||
child: FormBuilderTextField(
|
||||
name: 'land_yr',
|
||||
validator:
|
||||
FormBuilderValidators.compose([]),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 40, right: 0, bottom: 10),
|
||||
child: const Text('SIGNATORIES',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 30,
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Text(
|
||||
'APPRAISED/ASSESSED BY:',
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
children: [
|
||||
Column(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 200,
|
||||
child: FormBuilderDropdown<Signatories>(
|
||||
name: 'appraised_by_land',
|
||||
autofocus: false,
|
||||
items: signatories
|
||||
.map((signatories) =>
|
||||
DropdownMenuItem(
|
||||
value: signatories,
|
||||
child: Text(
|
||||
'${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'),
|
||||
))
|
||||
.toList()),
|
||||
),
|
||||
Text('Name'),
|
||||
],
|
||||
),
|
||||
const SizedBox(
|
||||
width: 15,
|
||||
),
|
||||
Column(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 100,
|
||||
child: FormBuilderDateTimePicker(
|
||||
name: 'app_date_land',
|
||||
initialEntryMode:
|
||||
DatePickerEntryMode.calendarOnly,
|
||||
initialValue: DateTime.now(),
|
||||
inputType: InputType.date,
|
||||
|
||||
initialTime:
|
||||
const TimeOfDay(hour: 8, minute: 0),
|
||||
// locale: const Locale.fromSubtags(languageCode: 'fr'),
|
||||
),
|
||||
),
|
||||
Text('Date'),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(
|
||||
height: 30,
|
||||
),
|
||||
const Align(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Text(
|
||||
'RECOMMENDING APPROVAL:',
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
)),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
children: [
|
||||
Column(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 200,
|
||||
child: FormBuilderDropdown<Signatories>(
|
||||
name: 'rec_approval_land',
|
||||
autofocus: false,
|
||||
items: signatories
|
||||
.map((signatories) =>
|
||||
DropdownMenuItem(
|
||||
value: signatories,
|
||||
child: Text(
|
||||
'${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'),
|
||||
))
|
||||
.toList()),
|
||||
),
|
||||
Text('Name'),
|
||||
],
|
||||
),
|
||||
const SizedBox(
|
||||
width: 15,
|
||||
),
|
||||
Column(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 100,
|
||||
child: FormBuilderDateTimePicker(
|
||||
name: 'rec_date_land',
|
||||
initialEntryMode:
|
||||
DatePickerEntryMode.calendarOnly,
|
||||
initialValue: DateTime.now(),
|
||||
inputType: InputType.date,
|
||||
|
||||
initialTime:
|
||||
const TimeOfDay(hour: 8, minute: 0),
|
||||
// locale: const Locale.fromSubtags(languageCode: 'fr'),
|
||||
),
|
||||
),
|
||||
Text('Date'),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(
|
||||
height: 30,
|
||||
),
|
||||
const Align(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Text(
|
||||
'APPROVED BY:',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
)),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Column(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 200,
|
||||
child: FormBuilderDropdown<Signatories>(
|
||||
name: 'apprvd_by_land',
|
||||
autofocus: false,
|
||||
items: signatories
|
||||
.map((signatories) =>
|
||||
DropdownMenuItem(
|
||||
value: signatories,
|
||||
child: Text(
|
||||
'${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'),
|
||||
))
|
||||
.toList()),
|
||||
),
|
||||
Text('Name'),
|
||||
],
|
||||
),
|
||||
const SizedBox(
|
||||
width: 15,
|
||||
),
|
||||
Column(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 100,
|
||||
child: FormBuilderDateTimePicker(
|
||||
name: 'apprvd_by_date_land',
|
||||
initialEntryMode:
|
||||
DatePickerEntryMode.calendarOnly,
|
||||
initialValue: DateTime.now(),
|
||||
inputType: InputType.date,
|
||||
|
||||
initialTime:
|
||||
const TimeOfDay(hour: 8, minute: 0),
|
||||
// locale: const Locale.fromSubtags(languageCode: 'fr'),
|
||||
),
|
||||
),
|
||||
Text('Date'),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(
|
||||
height: 50,
|
||||
),
|
||||
const Align(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Text(
|
||||
'MEMORANDA: ',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
)),
|
||||
SizedBox(
|
||||
height: 50,
|
||||
),
|
||||
SizedBox(
|
||||
width: 500,
|
||||
height: 100,
|
||||
child: SearchField(
|
||||
suggestions: state.memorada
|
||||
.map((Memoranda memoranda) =>
|
||||
SearchFieldListItem(
|
||||
'${memoranda.memoranda}',
|
||||
item:
|
||||
memoranda, // Change: Use individual Memoranda object
|
||||
child: ListTile(
|
||||
title: Text(
|
||||
'${memoranda.memoranda}',
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
),
|
||||
))
|
||||
.toList(),
|
||||
validator: FormBuilderValidators.required(
|
||||
errorText: "This field is required"),
|
||||
// searchInputDecoration:
|
||||
// normalTextFieldStyle(
|
||||
// "Memoranda", "")
|
||||
// .copyWith(
|
||||
// suffixIcon: const Icon(
|
||||
// Icons.arrow_drop_down),
|
||||
// ),
|
||||
// focusNode: focus,
|
||||
suggestionState: Suggestion.expand,
|
||||
onSuggestionTap: (memoranda) {
|
||||
setState(() {
|
||||
_memoranda = memoranda.item!.memoranda!;
|
||||
});
|
||||
focus.unfocus();
|
||||
},
|
||||
)),
|
||||
SizedBox(
|
||||
height: 30,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text('Sworn Statement No. :'),
|
||||
SizedBox(
|
||||
width: 150,
|
||||
height: 20,
|
||||
child: FormBuilderTextField(
|
||||
name: 'sworn_statement_land',
|
||||
decoration: InputDecoration(),
|
||||
validator: FormBuilderValidators.compose([]),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 30,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text('Date Received:'),
|
||||
SizedBox(
|
||||
width: 150,
|
||||
height: 20,
|
||||
child: FormBuilderDateTimePicker(
|
||||
name: 'date_received_land',
|
||||
initialEntryMode:
|
||||
DatePickerEntryMode.calendarOnly,
|
||||
initialValue: DateTime.now(),
|
||||
inputType: InputType.date,
|
||||
|
||||
initialTime:
|
||||
const TimeOfDay(hour: 8, minute: 0),
|
||||
// locale: const Locale.fromSubtags(languageCode: 'fr'),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 30,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text('Date of Entry in the Rec. of Ass. :'),
|
||||
SizedBox(
|
||||
width: 100,
|
||||
height: 20,
|
||||
child: FormBuilderDateTimePicker(
|
||||
name: 'date_of_entry_land',
|
||||
initialEntryMode:
|
||||
DatePickerEntryMode.calendarOnly,
|
||||
initialValue: DateTime.now(),
|
||||
inputType: InputType.date,
|
||||
|
||||
initialTime:
|
||||
const TimeOfDay(hour: 8, minute: 0),
|
||||
// locale: const Locale.fromSubtags(languageCode: 'fr'),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 30,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text('By:'),
|
||||
SizedBox(
|
||||
width: 150,
|
||||
height: 20,
|
||||
child: FormBuilderTextField(
|
||||
name: 'by_land',
|
||||
decoration: InputDecoration(),
|
||||
validator: FormBuilderValidators.compose([]),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 30,
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () async {
|
||||
final tempID =
|
||||
await SharedPreferences.getInstance();
|
||||
var ext = LandExt(
|
||||
landapprDetailsId:
|
||||
tempID.getInt('landid')! - 1,
|
||||
taxable: isTaxable,
|
||||
exempt: isExempt,
|
||||
qtr: int.parse(
|
||||
landKey.currentState!.value['land_qtr']),
|
||||
yr: int.parse(
|
||||
landKey.currentState!.value['land_yr']),
|
||||
appraisedbyName: landKey.currentState!.value['appraised_by_land'].firstname +
|
||||
' ' +
|
||||
landKey
|
||||
.currentState!
|
||||
.value['appraised_by_land']
|
||||
.middlename +
|
||||
' ' +
|
||||
landKey.currentState!
|
||||
.value['appraised_by_land'].lastname,
|
||||
appraisedbyDate: landKey
|
||||
.currentState!.value['app_date_land'],
|
||||
recommendapprName: landKey
|
||||
.currentState!
|
||||
.value['rec_approval_land']
|
||||
.firstname +
|
||||
' ' +
|
||||
landKey
|
||||
.currentState!
|
||||
.value['rec_approval_land']
|
||||
.middlename +
|
||||
' ' +
|
||||
landKey.currentState!
|
||||
.value['rec_approval_land'].lastname,
|
||||
recommendapprDate: landKey
|
||||
.currentState!.value['rec_date_land'],
|
||||
approvedbyName: landKey.currentState!.value['apprvd_by_land'].firstname +
|
||||
' ' +
|
||||
landKey.currentState!.value['apprvd_by_land'].middlename +
|
||||
' ' +
|
||||
landKey.currentState!.value['apprvd_by_land'].lastname,
|
||||
approvedbyDate: landKey.currentState!.value['apprvd_by_date_land'],
|
||||
memoranda: _memoranda,
|
||||
swornstatementNo: landKey.currentState!.value['sworn_statement_land'],
|
||||
dateReceived: landKey.currentState!.value['date_received_land'],
|
||||
entryDateAssessment: landKey.currentState!.value['date_of_entry_land'],
|
||||
entryDateBy: landKey.currentState!.value['by_land']);
|
||||
|
||||
context.read<LandExtBloc>()
|
||||
..add(UpdateLandExt(landext: ext));
|
||||
widget.onSAve();
|
||||
},
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: primary,
|
||||
foregroundColor: Colors.red),
|
||||
child: SizedBox(
|
||||
width: 250,
|
||||
height: 50,
|
||||
child: Align(
|
||||
alignment: Alignment.center,
|
||||
child: Text(
|
||||
'Save',
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
),
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
height: 30,
|
||||
),
|
||||
],
|
||||
));
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,245 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/land/land_property_assessment/land_property_assessment_bloc.dart';
|
||||
import 'package:unit2/screens/passo/Land/add_land/AddPropertyAssessmentModal.dart';
|
||||
import 'package:unit2/utils/alerts.dart';
|
||||
import 'package:unit2/widgets/passo/custom_button.dart';
|
||||
|
||||
class LandPropertyAssessmentEditPage extends StatefulWidget {
|
||||
Function PrevBtn;
|
||||
Function NextBtn;
|
||||
LandPropertyAssessmentEditPage(this.PrevBtn, this.NextBtn);
|
||||
@override
|
||||
_LandPropertyAssessmentEditPage createState() =>
|
||||
_LandPropertyAssessmentEditPage();
|
||||
}
|
||||
|
||||
class _LandPropertyAssessmentEditPage
|
||||
extends State<LandPropertyAssessmentEditPage> {
|
||||
// double _totalMarketValue(items) {
|
||||
// double total = 0;
|
||||
// items.forEach((row) {
|
||||
// total += double.parse(row);
|
||||
// });
|
||||
// return total;
|
||||
// }
|
||||
|
||||
void deleteItem(int itemId) {
|
||||
context
|
||||
.read<LandPropertyAssessmentBloc>()
|
||||
.add(DeleteLandPropertyAssessment(id: itemId));
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocConsumer<LandPropertyAssessmentBloc,
|
||||
LandPropertyAssessmentState>(listener: (context, state) {
|
||||
// TODO: implement listener
|
||||
}, builder: (context, state) {
|
||||
final state = context.watch<LandPropertyAssessmentBloc>().state;
|
||||
if (state is LandPropertyAssessmentLoaded) {
|
||||
return Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('PROPERTY ASSESSMENT',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.topRight,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
onPressed: () {
|
||||
context
|
||||
.read<LandPropertyAssessmentBloc>()
|
||||
.add(ShowLandPropertyAssessment());
|
||||
},
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Text('ADD ITEM'), // <-- Text
|
||||
const SizedBox(
|
||||
width: 5,
|
||||
),
|
||||
const Icon(
|
||||
// <-- Icon
|
||||
Icons.add,
|
||||
size: 24.0,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: DataTable(
|
||||
// ignore: prefer_const_literals_to_create_immutables
|
||||
columns: [
|
||||
const DataColumn(
|
||||
label: Text('Actual Use'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Market Value'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Assessment Level'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Assessed Value'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Action'),
|
||||
)
|
||||
],
|
||||
rows: state.assessment.map((dataRow) {
|
||||
return DataRow(
|
||||
cells: [
|
||||
DataCell(Text(dataRow.actualUse!)),
|
||||
DataCell(Text(dataRow.marketval!)),
|
||||
DataCell(
|
||||
Text(dataRow.assessmentLevel! + '%')),
|
||||
DataCell(Text(dataRow.assessedValue!)),
|
||||
DataCell(Row(
|
||||
children: [
|
||||
InkWell(
|
||||
child: Container(
|
||||
height: 30,
|
||||
width: 30,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.red,
|
||||
),
|
||||
child: Icon(
|
||||
Icons.delete,
|
||||
color: Colors.white,
|
||||
size: 20.0,
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
deleteItem(dataRow.id!);
|
||||
},
|
||||
),
|
||||
SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
InkWell(
|
||||
child: Container(
|
||||
height: 30,
|
||||
width: 30,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.red,
|
||||
),
|
||||
child: Icon(
|
||||
Icons.edit,
|
||||
color: Colors.white,
|
||||
size: 20.0,
|
||||
),
|
||||
),
|
||||
onTap: () {},
|
||||
),
|
||||
],
|
||||
))
|
||||
],
|
||||
);
|
||||
}).toList()))
|
||||
],
|
||||
),
|
||||
),
|
||||
)),
|
||||
// Padding(
|
||||
// padding: const EdgeInsets.only(left: 20.0, right: 20.0),
|
||||
// child: Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
// children: [
|
||||
// Text(
|
||||
// 'Total',
|
||||
// style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
|
||||
// ),
|
||||
// Text(
|
||||
// NumberFormat.currency(locale: 'en-PH', symbol: "₱")
|
||||
// .format('1.0'),
|
||||
// style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
|
||||
// )
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.PrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.NextBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
if (state is LandPropertyAssessmentDeletedState) {
|
||||
if (state.success) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
successAlert(context, "Deletion Successful",
|
||||
"Extra item has been deleted successfully", () {
|
||||
Navigator.of(context).pop();
|
||||
context
|
||||
.read<LandPropertyAssessmentBloc>()
|
||||
.add(const LoadLandPropertyAssessment());
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
if (state is ShowAddLandPropertyAssessmentScreen) {
|
||||
return ConstrainedBox(
|
||||
constraints: BoxConstraints(maxHeight: 1000.0),
|
||||
child: AlertDialog(
|
||||
insetPadding: EdgeInsets.symmetric(
|
||||
horizontal: 20.0,
|
||||
vertical: 10.0,
|
||||
),
|
||||
title: Text(
|
||||
'ADD PROPERTY ASSESSMENT',
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [Container(child: AddPropertyAssessmentModal())],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,223 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
||||
import 'package:unit2/bloc/passo/land/land_property_owner_info/land_property_owner_info_bloc.dart';
|
||||
import 'package:unit2/model/passo/land_property_owner.dart';
|
||||
import 'package:unit2/screens/passo/Land/add_land.dart';
|
||||
import 'package:unit2/widgets/passo/custom_button.dart';
|
||||
import 'package:unit2/widgets/passo/custom_formBuilder_fields.dart';
|
||||
|
||||
GlobalKey<FormBuilderState> landEditKey = GlobalKey<FormBuilderState>();
|
||||
|
||||
class LandPropertyOwnerInfoEdit extends StatefulWidget {
|
||||
Function NextBtn;
|
||||
LandPropertyOwner land;
|
||||
LandPropertyOwnerInfoEdit(this.NextBtn, this.land);
|
||||
@override
|
||||
_LandPropertyOwnerInfoEdit createState() => _LandPropertyOwnerInfoEdit();
|
||||
}
|
||||
|
||||
class _LandPropertyOwnerInfoEdit extends State<LandPropertyOwnerInfoEdit> {
|
||||
final transaction_codes = ['New', 'Revision'];
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocConsumer<LandPropertyOwnerInfoBloc, LandPropertyOwnerInfoState>(
|
||||
listener: (context, state) {
|
||||
// TODO: implement listener
|
||||
},
|
||||
builder: (context, state) {
|
||||
return FormBuilder(
|
||||
key: landEditKey,
|
||||
initialValue: {
|
||||
'transaction_code': widget.land.transCode ?? '',
|
||||
'td_no': widget.land.tdn ?? '',
|
||||
'owner': widget.land.owner ?? '',
|
||||
'pin': widget.land.pin ?? '',
|
||||
'tin': widget.land.tin ?? '',
|
||||
'cloa_no': widget.land.cloaNo ?? '',
|
||||
'dated': widget.land.dated ?? '',
|
||||
'survey_no': widget.land.surveyNo ?? '',
|
||||
'lot_no': widget.land.lotNo ?? '',
|
||||
'blk': widget.land.blkNo ?? '',
|
||||
'address': widget.land.address ?? '',
|
||||
'tel_no': widget.land.telno ?? '',
|
||||
'admin': widget.land.adminUser ?? '',
|
||||
'admin_tin': widget.land.adminTin ?? '',
|
||||
'admin_address': widget.land.adminAddress ?? '',
|
||||
'admin_telno': widget.land.adminTelno ?? '',
|
||||
},
|
||||
enabled: true,
|
||||
onChanged: () {
|
||||
landEditKey.currentState!.save();
|
||||
debugPrint(landEditKey.currentState!.value.toString());
|
||||
},
|
||||
autovalidateMode: AutovalidateMode.disabled,
|
||||
skipDisabled: true,
|
||||
child: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: <Widget>[
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('PROPERTY OWNER INFO',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
const SizedBox(height: 15),
|
||||
customDropDownField("Transaction Code", "",
|
||||
"transaction_code", transaction_codes),
|
||||
customTextField("ARP No./ TD No.", "", "td_no"),
|
||||
customTextField("Owner", "", "owner"),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1, child: customTextField("PIN", "", "pin")),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField("TIN", "", "tin"))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"OCT/TCT CLOA No.", "", "cloa_no"),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customDatTimePicker("Dated", "", "dated"))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField("Survey No.", "", "survey_no"),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField("Lot No.", "", "lot_no")),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField("Blk", "", "blk")),
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField("Address", "", "address"),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField("Tel No.", "", "tel_no"))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: customTextField(
|
||||
"Administrator/Beneficial User", "", "admin"),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child: customTextField("TIN", "", "admin_tin"))
|
||||
]),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child:
|
||||
customTextField("Address", "", "admin_address"),
|
||||
),
|
||||
const SizedBox(width: 10.0),
|
||||
Expanded(
|
||||
// optional flex property if flex is 1 because the default flex is 1
|
||||
flex: 1,
|
||||
child:
|
||||
customTextField("Tel No.", "", "admin_telno"))
|
||||
]),
|
||||
SizedBox(
|
||||
height: 30,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
var land = LandPropertyOwner(
|
||||
id: widget.land.id,
|
||||
transCode: landEditKey
|
||||
.currentState!.value['transaction_code']
|
||||
.toString(),
|
||||
tdn: landEditKey.currentState!.value['td_no'],
|
||||
cloaNo:
|
||||
landEditKey.currentState!.value['cloa_no'],
|
||||
dated: landEditKey.currentState!.value['dated'],
|
||||
assessedById: "1",
|
||||
assessedByName: "cyril",
|
||||
dateCreated:
|
||||
landEditKey.currentState!.value['dated'],
|
||||
dateModified:
|
||||
landEditKey.currentState!.value['dated'],
|
||||
pin: landEditKey.currentState!.value['pin'],
|
||||
surveyNo:
|
||||
landEditKey.currentState!.value['survey_no'],
|
||||
lotNo: landEditKey.currentState!.value['lot_no'],
|
||||
blkNo: landEditKey.currentState!.value['blk'],
|
||||
owner: landEditKey.currentState!.value['owner'],
|
||||
address:
|
||||
landEditKey.currentState!.value['address'],
|
||||
telno: landEditKey.currentState!.value['tel_no'],
|
||||
tin: landEditKey.currentState!.value['tin'],
|
||||
adminUser:
|
||||
landEditKey.currentState!.value['admin'],
|
||||
adminAddress: landEditKey
|
||||
.currentState!.value['admin_address'],
|
||||
adminTin:
|
||||
landEditKey.currentState!.value['admin_tin'],
|
||||
// faasType: "LAND",
|
||||
adminTelno: landEditKey
|
||||
.currentState!.value['admin_telno']);
|
||||
|
||||
context.read<LandPropertyOwnerInfoBloc>().add(
|
||||
UpdateLandPropertyOwner(
|
||||
land_edit: land, id: widget.land.id!));
|
||||
|
||||
widget.NextBtn();
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
const SizedBox(
|
||||
height: 20,
|
||||
),
|
||||
]),
|
||||
)),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,246 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/land/land_value_adjustments/land_value_adjustments_bloc.dart';
|
||||
import 'package:unit2/screens/passo/Land/add_land/AddLandValueAdjustmentModal.dart';
|
||||
import 'package:unit2/utils/alerts.dart';
|
||||
import 'package:unit2/widgets/passo/custom_button.dart';
|
||||
|
||||
class ValueAdjustmentEditPage extends StatefulWidget {
|
||||
Function PrevBtn;
|
||||
Function NextBtn;
|
||||
ValueAdjustmentEditPage(this.PrevBtn, this.NextBtn);
|
||||
@override
|
||||
_ValueAdjustmentEditPage createState() => _ValueAdjustmentEditPage();
|
||||
}
|
||||
|
||||
class _ValueAdjustmentEditPage extends State<ValueAdjustmentEditPage> {
|
||||
// double _totalMarketValue(items) {
|
||||
// double total = 0;
|
||||
// items.forEach((row) {
|
||||
// total += double.parse(row);
|
||||
// });
|
||||
// return total;
|
||||
// }
|
||||
|
||||
void deleteItem(int itemId) {
|
||||
context
|
||||
.read<LandValueAdjustmentsBloc>()
|
||||
.add(DeleteLandValueAdjustments(id: itemId));
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocConsumer<LandValueAdjustmentsBloc, LandValueAdjustmentsState>(
|
||||
listener: (context, state) {
|
||||
// TODO: implement listener
|
||||
}, builder: (context, state) {
|
||||
final state = context.watch<LandValueAdjustmentsBloc>().state;
|
||||
if (state is LandValueAdjustmentsLoaded) {
|
||||
return Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 0, top: 20, right: 0, bottom: 10),
|
||||
child: const Text('VALUE ADJUSTMENTS',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold, fontSize: 18),
|
||||
textAlign: TextAlign.left),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.topRight,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
onPressed: () {
|
||||
context
|
||||
.read<LandValueAdjustmentsBloc>()
|
||||
.add(ShowLandValueAdjustments());
|
||||
},
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Text('ADD ITEM'), // <-- Text
|
||||
const SizedBox(
|
||||
width: 5,
|
||||
),
|
||||
const Icon(
|
||||
// <-- Icon
|
||||
Icons.add,
|
||||
size: 24.0,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: DataTable(
|
||||
// ignore: prefer_const_literals_to_create_immutables
|
||||
columns: [
|
||||
const DataColumn(
|
||||
label: Text('Base Market Value'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Adjustment Factors'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('% Adjustment'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Value Adjustment'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Market Value'),
|
||||
),
|
||||
const DataColumn(
|
||||
label: Text('Action'),
|
||||
)
|
||||
],
|
||||
rows: state.val_adj.map((dataRow) {
|
||||
return DataRow(
|
||||
cells: [
|
||||
DataCell(Text(dataRow.baseMarketval!)),
|
||||
DataCell(Text(dataRow.adjustmentFactors!)),
|
||||
DataCell(Text(dataRow.adjustment!)),
|
||||
DataCell(Text(dataRow.valueAdjustment!)),
|
||||
DataCell(Text(dataRow.marketValue!)),
|
||||
DataCell(Row(
|
||||
children: [
|
||||
InkWell(
|
||||
child: Container(
|
||||
height: 30,
|
||||
width: 30,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.red,
|
||||
),
|
||||
child: Icon(
|
||||
Icons.delete,
|
||||
color: Colors.white,
|
||||
size: 20.0,
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
deleteItem(dataRow.id!);
|
||||
},
|
||||
),
|
||||
SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
InkWell(
|
||||
child: Container(
|
||||
height: 30,
|
||||
width: 30,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.red,
|
||||
),
|
||||
child: Icon(
|
||||
Icons.edit,
|
||||
color: Colors.white,
|
||||
size: 20.0,
|
||||
),
|
||||
),
|
||||
onTap: () {},
|
||||
),
|
||||
],
|
||||
))
|
||||
],
|
||||
);
|
||||
}).toList()))
|
||||
],
|
||||
),
|
||||
),
|
||||
)),
|
||||
// Padding(
|
||||
// padding: const EdgeInsets.only(left: 20.0, right: 20.0),
|
||||
// child: Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
// children: [
|
||||
// Text(
|
||||
// 'Total',
|
||||
// style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
|
||||
// ),
|
||||
// Text(
|
||||
// NumberFormat.currency(locale: 'en-PH', symbol: "₱")
|
||||
// .format('1.0'),
|
||||
// style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
|
||||
// )
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(15.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_left_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.PrevBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
),
|
||||
CustomButton(
|
||||
icon: const Icon(Icons.chevron_right_rounded,
|
||||
color: Colors.white),
|
||||
onPressed: () {
|
||||
{
|
||||
widget.NextBtn();
|
||||
}
|
||||
;
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
if (state is LandValueAdjustmentsDeletedState) {
|
||||
if (state.success) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
successAlert(context, "Deletion Successful",
|
||||
"Extra item has been deleted successfully", () {
|
||||
Navigator.of(context).pop();
|
||||
context
|
||||
.read<LandValueAdjustmentsBloc>()
|
||||
.add(const LoadLandValueAdjustments());
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
if (state is ShowAddLandValueAdjustmentsScreen) {
|
||||
return ConstrainedBox(
|
||||
constraints: BoxConstraints(maxHeight: 1000.0),
|
||||
child: AlertDialog(
|
||||
insetPadding: EdgeInsets.symmetric(
|
||||
horizontal: 20.0,
|
||||
vertical: 10.0,
|
||||
),
|
||||
title: Text(
|
||||
'ADD VALUE ADJUSTMENTS',
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [Expanded(child: AddLandValueAdjustmentModal())],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
});
|
||||
}
|
||||
}
|
|
@ -57,6 +57,7 @@ import 'package:unit2/widgets/error_state.dart';
|
|||
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
|
||||
|
||||
import '../../model/passo/bldg_loc.dart';
|
||||
import '../../utils/alerts.dart';
|
||||
|
||||
class BuildingHome extends StatelessWidget {
|
||||
const BuildingHome({super.key});
|
||||
|
@ -66,6 +67,11 @@ class BuildingHome extends StatelessWidget {
|
|||
int? profileId;
|
||||
String? token;
|
||||
Profile profile;
|
||||
|
||||
void deleteItem(int itemId) {
|
||||
context.read<PropertyInfoBloc>().add(DeleteBuildingFaas(id: itemId));
|
||||
}
|
||||
|
||||
return Scaffold(
|
||||
body: ProgressHUD(
|
||||
backgroundColor: Colors.black87,
|
||||
|
@ -102,8 +108,8 @@ class BuildingHome extends StatelessWidget {
|
|||
shrinkWrap: true,
|
||||
itemCount: propertyList.length,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
return _listCard(
|
||||
propertyList[index], context, index);
|
||||
return _listCard(propertyList[index], context,
|
||||
index, deleteItem);
|
||||
},
|
||||
),
|
||||
),
|
||||
|
@ -121,6 +127,20 @@ class BuildingHome extends StatelessWidget {
|
|||
},
|
||||
);
|
||||
}
|
||||
if (state is BuildingFaasDeletedState) {
|
||||
if (state.success) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
successAlert(context, "Deletion Successful",
|
||||
"Building FAAS Data has been deleted successfully",
|
||||
() {
|
||||
Navigator.of(context).pop();
|
||||
context
|
||||
.read<PropertyInfoBloc>()
|
||||
.add(const LoadPropertyInfo());
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
);
|
||||
|
@ -269,7 +289,7 @@ class BuildingHome extends StatelessWidget {
|
|||
}
|
||||
}
|
||||
|
||||
Card _listCard(PropertyInfo property_info, context, index) {
|
||||
Card _listCard(PropertyInfo property_info, context, index, deleteItem) {
|
||||
return Card(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
|
@ -400,7 +420,13 @@ Card _listCard(PropertyInfo property_info, context, index) {
|
|||
],
|
||||
),
|
||||
),
|
||||
IconButton(onPressed: () {}, icon: const Icon(Icons.chevron_right)),
|
||||
IconButton(
|
||||
onPressed: () {
|
||||
deleteItem(property_info.id);
|
||||
},
|
||||
icon: const Icon(Icons.delete_rounded),
|
||||
color: primary,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
|
@ -18,8 +18,10 @@ import 'package:unit2/bloc/passo/bulding/property_info/property_info_bloc.dart';
|
|||
import 'package:unit2/bloc/passo/bulding/structural_material/structural_material_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/bulding/unit_construct/unit_construct_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/land/land_appraisal/land_appraisal_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/land/land_boundaries_edit/land_boundaries_edit_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/land/land_classification/land_classification_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/land/land_ext/land_ext_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/land/land_location_edit/land_location_edit_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/land/land_property_assessment/land_property_assessment_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/land/land_property_owner_info/land_property_owner_info_bloc.dart';
|
||||
import 'package:unit2/bloc/passo/land/land_subclassification/land_subclassification_bloc.dart';
|
||||
|
@ -37,6 +39,8 @@ import 'package:unit2/bloc/passo/signatories/signatories_bloc.dart';
|
|||
import 'package:unit2/bloc/user/user_bloc.dart';
|
||||
import 'package:unit2/model/passo/additional_items.dart';
|
||||
import 'package:unit2/model/passo/general_description.dart';
|
||||
import 'package:unit2/model/passo/land_property_boundaries.dart';
|
||||
import 'package:unit2/model/passo/land_property_loc.dart';
|
||||
import 'package:unit2/model/passo/land_property_owner.dart';
|
||||
import 'package:unit2/model/passo/land_ref.dart';
|
||||
import 'package:unit2/model/passo/property_appraisal.dart';
|
||||
|
@ -49,6 +53,7 @@ import 'package:unit2/model/profile/basic_information/primary-information.dart';
|
|||
import 'package:unit2/screens/passo/Building/add_building.dart';
|
||||
import 'package:unit2/screens/passo/Building/edit_building.dart';
|
||||
import 'package:unit2/screens/passo/Land/add_land.dart';
|
||||
import 'package:unit2/screens/passo/Land/edit_land.dart';
|
||||
import 'package:unit2/screens/passo/Test%20Envi/multi_dropdown.dart';
|
||||
import 'package:unit2/screens/passo/Test%20Envi/speed_dial.dart';
|
||||
import 'package:unit2/theme-data.dart/colors.dart';
|
||||
|
@ -283,79 +288,72 @@ Card _listCard(LandPropertyOwner property_info, context, index) {
|
|||
padding: const EdgeInsets.all(15.0),
|
||||
child: InkWell(
|
||||
onTap: () async {
|
||||
// Navigator.push(context,
|
||||
// MaterialPageRoute(builder: (BuildContext context) {
|
||||
// return MultiBlocProvider(
|
||||
// providers: [
|
||||
// BlocProvider(
|
||||
// create: (context) =>
|
||||
// PropertyInfoBloc()..add(LoadPropertyInfo()),
|
||||
// ),
|
||||
// BlocProvider(
|
||||
// create: (context) =>
|
||||
// UnitConstructBloc()..add(LoadUnitConstruct()),
|
||||
// ),
|
||||
// BlocProvider(
|
||||
// create: (context) =>
|
||||
// ClassComponentsBloc()..add(LoadClassComponents()),
|
||||
// ),
|
||||
// BlocProvider(
|
||||
// create: (context) =>
|
||||
// SignatoriesBloc()..add(LoadSignatories())),
|
||||
// BlocProvider(
|
||||
// create: (context) => LocationBloc()
|
||||
// ..add(
|
||||
// LoadLocation(bldgloc: BldgLoc(), id: property_info.id)),
|
||||
// ),
|
||||
// BlocProvider(
|
||||
// create: (context) => LandrefBloc()
|
||||
// ..add(
|
||||
// LoadLandref(landRef: LandRef(), id: property_info.id)),
|
||||
// ),
|
||||
// BlocProvider(
|
||||
// create: (context) => GeneralDescriptionBloc()
|
||||
// ..add(LoadGenDesc(
|
||||
// gendesc: GeneralDesc(), id: property_info.id)),
|
||||
// ),
|
||||
// BlocProvider(
|
||||
// create: (context) => AdditionalItemsEditBloc()
|
||||
// ..add(LoadAdditionalItemsEdit(
|
||||
// items: const <AdditionalItems>[],
|
||||
// id: property_info.id)),
|
||||
// ),
|
||||
// BlocProvider(
|
||||
// create: (context) => PropertyAssessmentEditBloc()
|
||||
// ..add(LoadPropertyAssessmentEdit(
|
||||
// assessmentsEdit: PropertyAssessmentEdit(),
|
||||
// id: property_info.id)),
|
||||
// ),
|
||||
// BlocProvider(
|
||||
// create: (context) => PropertyAppraisalEditBloc()
|
||||
// ..add(LoadPropertyAppraisalEdit(
|
||||
// appraisalEdit: PropertyAppraisalEdit(),
|
||||
// id: property_info.id)),
|
||||
// ),
|
||||
// BlocProvider(
|
||||
// create: (context) =>
|
||||
// MunicipalityBloc()..add(LoadMunicipality())),
|
||||
// BlocProvider(
|
||||
// create: (context) =>
|
||||
// BarangayBloc()..add(LoadBarangay(id: '01'))),
|
||||
// BlocProvider(
|
||||
// create: (context) => MemorandaBloc()..add(LoadMemoranda())),
|
||||
// BlocProvider(
|
||||
// create: (context) => StructuralMaterialBloc()
|
||||
// ..add(LoadStructuralMaterial(
|
||||
// structure: StructureMaterials(),
|
||||
// id: property_info.id))),
|
||||
// ],
|
||||
// child: EditBuilding(
|
||||
// index: index,
|
||||
// faas: property_info,
|
||||
// title: 'Bldg & Structure Edit',
|
||||
// ),
|
||||
// );
|
||||
// }));
|
||||
Navigator.push(context,
|
||||
MaterialPageRoute(builder: (BuildContext context) {
|
||||
return MultiBlocProvider(
|
||||
providers: [
|
||||
BlocProvider(
|
||||
create: (context) =>
|
||||
LandPropertyOwnerInfoBloc()..add(LoadLand())),
|
||||
BlocProvider(
|
||||
create: (context) => LandLocationEditBloc()
|
||||
..add(LoadLandLocationEdit(
|
||||
land_loc_edit: LandPropertyLoc(),
|
||||
id: property_info.id))),
|
||||
BlocProvider(
|
||||
create: (context) => LandBoundariesEditBloc()
|
||||
..add(LoadLandBoundariesEdit(
|
||||
land_boundaries_edit: LandPropertyBoundaries(),
|
||||
id: property_info.id))),
|
||||
BlocProvider(
|
||||
create: (context) =>
|
||||
LandAppraisalBloc()..add(LoadLandAppraisal())),
|
||||
BlocProvider(
|
||||
create: (context) => LandClassificationBloc()
|
||||
..add(LoadLandClassification())),
|
||||
BlocProvider(
|
||||
create: (context) => LandSubClassificationBloc()
|
||||
..add(LoadLandSubClassification(
|
||||
cityCode: "1", classCode: 1))),
|
||||
BlocProvider(
|
||||
create: (context) =>
|
||||
OtherImprovementsBloc()..add(LoadOtherImprovement())),
|
||||
BlocProvider(
|
||||
create: (context) =>
|
||||
TypeOfLocationBloc()..add(LoadTypeOfLocation())),
|
||||
BlocProvider(
|
||||
create: (context) =>
|
||||
TypeOfRoadBloc()..add(LoadTypeOfRoad())),
|
||||
BlocProvider(
|
||||
create: (context) => LandPropertyAssessmentBloc()
|
||||
..add(LoadLandPropertyAssessment())),
|
||||
BlocProvider(
|
||||
create: (context) => LandTreesImprovementsBloc()
|
||||
..add(LoadLandTreesImprovements())),
|
||||
BlocProvider(
|
||||
create: (context) => LandExtBloc()..add(LoadLandExt())),
|
||||
BlocProvider(
|
||||
create: (context) => LandValueAdjustmentsBloc()
|
||||
..add(LoadLandValueAdjustments())),
|
||||
BlocProvider(
|
||||
create: (context) =>
|
||||
SignatoriesBloc()..add(LoadSignatories())),
|
||||
BlocProvider(
|
||||
create: (context) =>
|
||||
MunicipalityBloc()..add(LoadMunicipality())),
|
||||
BlocProvider(
|
||||
create: (context) =>
|
||||
BarangayBloc()..add(LoadBarangay(id: '01'))),
|
||||
BlocProvider(
|
||||
create: (context) => MemorandaBloc()..add(LoadMemoranda())),
|
||||
],
|
||||
child: EditLand(
|
||||
index: index,
|
||||
faas: property_info,
|
||||
title: 'Bldg & Structure Edit',
|
||||
),
|
||||
);
|
||||
}));
|
||||
},
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
|
|
|
@ -134,4 +134,29 @@ class PropertyInfoService {
|
|||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
Future<http.Response> remove(id) async {
|
||||
String path = Url.instance.propertyInfo();
|
||||
Map<String, String> headers = {
|
||||
'Content-Type': 'application/json; charset=UTF-8',
|
||||
'X-Client-Key': xClientKey,
|
||||
'X-Client-Secret': xClientKeySecret
|
||||
};
|
||||
Map<String, String> params = {
|
||||
"id": id.toString(),
|
||||
};
|
||||
try {
|
||||
http.Response response = await Request.instance
|
||||
.deleteRequest(path: path, headers: headers, body: {}, param: params);
|
||||
print(id);
|
||||
if (response.statusCode == 200) {
|
||||
print(response.body);
|
||||
return response;
|
||||
} else {
|
||||
throw Exception(response.reasonPhrase);
|
||||
}
|
||||
} catch (e) {
|
||||
throw e.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,4 +56,57 @@ class LandBoundariesService {
|
|||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
Future<http.Response?> updateEdit(LandPropertyBoundaries data, id) async {
|
||||
String path = Url.instance.getLandPropertyBoundaries();
|
||||
Map<String, String> headers = {
|
||||
'Content-Type': 'application/json; charset=UTF-8',
|
||||
'X-Client-Key': xClientKey,
|
||||
'X-Client-Secret': xClientKeySecret
|
||||
};
|
||||
Map<String, String> params = {
|
||||
"landappr_details_id": id.toString(),
|
||||
};
|
||||
http.Response? response;
|
||||
try {
|
||||
response = await Request.instance.putRequest(
|
||||
path: path, body: data.toJson(), headers: headers, param: params);
|
||||
} catch (e) {
|
||||
log(e.toString());
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
Future<LandPropertyBoundaries> fetchEdit(tempID) async {
|
||||
String path = Url.instance.getLandPropertyBoundaries();
|
||||
Map<String, String> headers = {
|
||||
'Content-Type': 'application/json; charset=UTF-8',
|
||||
'X-Client-Key': xClientKey,
|
||||
'X-Client-Secret': xClientKeySecret
|
||||
};
|
||||
Map<String, String> params = {
|
||||
"landappr_details_id": tempID.toString(),
|
||||
};
|
||||
try {
|
||||
http.Response response = await Request.instance
|
||||
.getRequest(param: params, path: path, headers: headers);
|
||||
|
||||
print('LandBoundEdit');
|
||||
print(response.body);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final jsonData = jsonDecode(response.body);
|
||||
final dataList = jsonData['data'] as List<dynamic>;
|
||||
final result = LandPropertyBoundaries.fromJson(
|
||||
dataList[0] as Map<String, dynamic>);
|
||||
|
||||
return result;
|
||||
} else {
|
||||
print(response.reasonPhrase);
|
||||
throw Exception(response.reasonPhrase);
|
||||
}
|
||||
} catch (e) {
|
||||
throw e.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,4 +55,57 @@ class LandLocationService {
|
|||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
Future<http.Response?> updateEdit(LandPropertyLoc data, id) async {
|
||||
String path = Url.instance.getLandPropertyLoc();
|
||||
Map<String, String> headers = {
|
||||
'Content-Type': 'application/json; charset=UTF-8',
|
||||
'X-Client-Key': xClientKey,
|
||||
'X-Client-Secret': xClientKeySecret
|
||||
};
|
||||
Map<String, String> params = {
|
||||
"landappr_details_id": id.toString(),
|
||||
};
|
||||
http.Response? response;
|
||||
try {
|
||||
response = await Request.instance.putRequest(
|
||||
path: path, body: data.toJson(), headers: headers, param: params);
|
||||
} catch (e) {
|
||||
log(e.toString());
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
Future<LandPropertyLoc> fetchEdit(tempID) async {
|
||||
String path = Url.instance.getLandPropertyLoc();
|
||||
Map<String, String> headers = {
|
||||
'Content-Type': 'application/json; charset=UTF-8',
|
||||
'X-Client-Key': xClientKey,
|
||||
'X-Client-Secret': xClientKeySecret
|
||||
};
|
||||
Map<String, String> params = {
|
||||
"landappr_details_id": tempID.toString(),
|
||||
};
|
||||
try {
|
||||
http.Response response = await Request.instance
|
||||
.getRequest(param: params, path: path, headers: headers);
|
||||
|
||||
print('LandLocEdit');
|
||||
print(response.body);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final jsonData = jsonDecode(response.body);
|
||||
final dataList = jsonData['data'] as List<dynamic>;
|
||||
final result =
|
||||
LandPropertyLoc.fromJson(dataList[0] as Map<String, dynamic>);
|
||||
|
||||
return result;
|
||||
} else {
|
||||
print(response.reasonPhrase);
|
||||
throw Exception(response.reasonPhrase);
|
||||
}
|
||||
} catch (e) {
|
||||
throw e.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,4 +52,24 @@ class LandServices {
|
|||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
Future<http.Response?> update(LandPropertyOwner data, id) async {
|
||||
String path = Url.instance.getLandOwnerInfo();
|
||||
Map<String, String> headers = {
|
||||
'Content-Type': 'application/json; charset=UTF-8',
|
||||
'X-Client-Key': xClientKey,
|
||||
'X-Client-Secret': xClientKeySecret
|
||||
};
|
||||
Map<String, String> params = {
|
||||
"id": id.toString(),
|
||||
};
|
||||
http.Response? response;
|
||||
try {
|
||||
response = await Request.instance.putRequest(
|
||||
path: path, body: data.toJson(), headers: headers, param: params);
|
||||
} catch (e) {
|
||||
log(e.toString());
|
||||
}
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ class Request {
|
|||
Map<String, String>? param}) async {
|
||||
Response response;
|
||||
try {
|
||||
response = await get(Uri.https(host, path!, param), headers: headers)
|
||||
response = await get(Uri.http(host, path!, param), headers: headers)
|
||||
.timeout(Duration(seconds: requestTimeout));
|
||||
} on TimeoutException catch (_) {
|
||||
// Fluttertoast.showToast(
|
||||
|
@ -61,7 +61,7 @@ class Request {
|
|||
Map<String, String>? param}) async {
|
||||
Response response;
|
||||
try {
|
||||
response = await post(Uri.https(host, path!, param),
|
||||
response = await post(Uri.http(host, path!, param),
|
||||
headers: headers, body: jsonEncode(body))
|
||||
.timeout(Duration(seconds: requestTimeout));
|
||||
} on TimeoutException catch (_) {
|
||||
|
@ -104,7 +104,7 @@ class Request {
|
|||
required Map<String, dynamic>? param}) async {
|
||||
Response response;
|
||||
try {
|
||||
response = await put(Uri.https(host, path, param),
|
||||
response = await put(Uri.http(host, path, param),
|
||||
headers: headers, body: jsonEncode(body));
|
||||
} on TimeoutException catch (_) {
|
||||
// Fluttertoast.showToast(
|
||||
|
@ -188,7 +188,7 @@ class Request {
|
|||
required Map<String, dynamic>? param}) async {
|
||||
Response response;
|
||||
try {
|
||||
response = await delete(Uri.https(host, path, param),
|
||||
response = await delete(Uri.http(host, path, param),
|
||||
headers: headers, body: jsonEncode(body))
|
||||
.timeout(Duration(seconds: requestTimeout));
|
||||
} on TimeoutException catch (_) {
|
||||
|
|
|
@ -5,12 +5,13 @@ class Url {
|
|||
|
||||
String host() {
|
||||
// return '192.168.10.183:3000';
|
||||
return 'agusandelnorte.gov.ph';
|
||||
// return 'agusandelnorte.gov.ph';
|
||||
// return "192.168.10.219:3000";
|
||||
// return "192.168.10.241";
|
||||
// return "192.168.10.221:3004";
|
||||
// return "playweb.agusandelnorte.gov.ph";
|
||||
return "playweb.agusandelnorte.gov.ph";
|
||||
// return 'devapi.agusandelnorte.gov.ph:3004';
|
||||
// return "192.168.10.218:8000";
|
||||
}
|
||||
|
||||
String prefixHost() {
|
||||
|
@ -26,7 +27,6 @@ class Url {
|
|||
return 'api/jobnet_app/profile/pds/';
|
||||
}
|
||||
|
||||
|
||||
String latestApk() {
|
||||
return "/api/system_app/apk_version/latest";
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue