import '/backend/api_requests/api_calls.dart'; import '/components/alert_box_custom_o_k_widget.dart'; import '/components/alert_box_custom_widget.dart'; import '/flutterlib/flutter_drop_down.dart'; import '/flutterlib/flutter_icon_button.dart'; import '/flutterlib/flutter_radio_button.dart'; import '/flutterlib/flutter_theme.dart'; import '/flutterlib/flutter_util.dart'; import '/flutterlib/flutter_widgets.dart'; import '/flutterlib/form_field_controller.dart'; import '/flutterlib/upload_data.dart'; import '/flutterlib/custom_functions.dart' as functions; import 'package:aligned_dialog/aligned_dialog.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; import 'update_member_model.dart'; export 'update_member_model.dart'; class UpdateMemberWidget extends StatefulWidget { const UpdateMemberWidget({ Key? key, this.memberData, required this.companyID, }) : super(key: key); final dynamic memberData; final dynamic companyID; @override _UpdateMemberWidgetState createState() => _UpdateMemberWidgetState(); } class _UpdateMemberWidgetState extends State { late UpdateMemberModel _model; @override void setState(VoidCallback callback) { super.setState(callback); _model.onUpdate(); } @override void initState() { super.initState(); _model = createModel(context, () => UpdateMemberModel()); _model.nameEnglishController ??= TextEditingController( text: getJsonField( widget.memberData, r'''$.name_english''', ).toString().toString()); _model.nameEnglishFocusNode ??= FocusNode(); _model.nameChineseController ??= TextEditingController( text: getJsonField( widget.memberData, r'''$.name_chinese''', ).toString().toString()); _model.nameChineseFocusNode ??= FocusNode(); _model.phoneController ??= TextEditingController( text: getJsonField( widget.memberData, r'''$.phone''', ).toString().toString()); _model.phoneFocusNode ??= FocusNode(); _model.emailController ??= TextEditingController( text: getJsonField( widget.memberData, r'''$.email''', ).toString().toString()); _model.emailFocusNode ??= FocusNode(); _model.dateController ??= TextEditingController( text: '${getJsonField( widget.memberData, r'''$.year_date''', ).toString().toString()}/${getJsonField( widget.memberData, r'''$.month_date''', ).toString().toString()}/${getJsonField( widget.memberData, r'''$.day_date''', ).toString().toString()}'); _model.dateFocusNode ??= FocusNode(); _model.documentNoController ??= TextEditingController( text: getJsonField( widget.memberData, r'''$.document_number''', ).toString().toString()); _model.documentNoFocusNode ??= FocusNode(); _model.countryController ??= TextEditingController( text: getJsonField( widget.memberData, r'''$.country''', ).toString().toString()); _model.countryFocusNode ??= FocusNode(); _model.cityController ??= TextEditingController( text: getJsonField( widget.memberData, r'''$.city''', ).toString().toString()); _model.cityFocusNode ??= FocusNode(); _model.addressEnController ??= TextEditingController( text: getJsonField( widget.memberData, r'''$.address_english''', ).toString().toString()); _model.addressEnFocusNode ??= FocusNode(); _model.addressCnController ??= TextEditingController( text: getJsonField( widget.memberData, r'''$.address_chinese''', ).toString().toString()); _model.addressCnFocusNode ??= FocusNode(); } @override void dispose() { _model.maybeDispose(); super.dispose(); } @override Widget build(BuildContext context) { context.watch(); return Align( alignment: AlignmentDirectional(0.0, 0.0), child: Form( key: _model.formKey, autovalidateMode: AutovalidateMode.disabled, child: SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.max, children: [ Row( mainAxisSize: MainAxisSize.max, children: [ Align( alignment: AlignmentDirectional(-1.0, 0.0), child: Padding( padding: EdgeInsetsDirectional.fromSTEB(8.0, 20.0, 0.0, 0.0), child: FlutterRadioButton( options: [ FFLocalizations.of(context).getText( 'daas505c' /* Director */, ), FFLocalizations.of(context).getText( 'amzqgzcc' /* Shareholder */, ), FFLocalizations.of(context).getText( 'hmc3gs5v' /* Company Secretary */, ) ].toList(), onChanged: (val) => setState(() {}), controller: _model.positionValueController ??= FormFieldController( functions.positionLabel(getJsonField( widget.memberData, r'''$.position''', ).toString())!), optionHeight: 32.0, textStyle: FlutterTheme.of(context).labelMedium, buttonPosition: RadioButtonPosition.left, direction: Axis.vertical, radioButtonColor: FlutterTheme.of(context).primary, inactiveRadioButtonColor: FlutterTheme.of(context).secondaryText, toggleable: false, horizontalAlignment: WrapAlignment.start, verticalAlignment: WrapCrossAlignment.start, ), ), ), ], ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 20.0, 0.0, 12.0), child: Row( mainAxisSize: MainAxisSize.max, children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0), child: Text( FFLocalizations.of(context).getText( 'rcfvxura' /* TItle */, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Roboto', color: Colors.black, fontSize: 16.0, fontWeight: FontWeight.w500, ), ), ), ], ), ), Padding( padding: EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0), child: Row( mainAxisSize: MainAxisSize.max, children: [ FlutterDropDown( controller: _model.titleValueController ??= FormFieldController( _model.titleValue ??= getJsonField( widget.memberData, r'''$.title''', ).toString(), ), options: List.from(['mr', 'mrs', 'miss']), optionLabels: [ FFLocalizations.of(context).getText( '6zx9k4pb' /* Mr */, ), FFLocalizations.of(context).getText( '8iqd970r' /* Mrs */, ), FFLocalizations.of(context).getText( '8zqupoo0' /* Miss */, ) ], onChanged: (val) => setState(() => _model.titleValue = val), width: 326.0, height: 40.0, textStyle: FlutterTheme.of(context).bodyMedium, hintText: FFLocalizations.of(context).getText( '64xcc4g4' /* Please select... */, ), icon: Icon( Icons.keyboard_arrow_down_rounded, color: FlutterTheme.of(context).secondaryText, size: 24.0, ), fillColor: Color(0xFFEBEBE4), elevation: 2.0, borderColor: FlutterTheme.of(context).alternate, borderWidth: 2.0, borderRadius: 40.0, margin: EdgeInsetsDirectional.fromSTEB(16.0, 4.0, 16.0, 4.0), hidesUnderline: true, isSearchable: false, isMultiSelect: false, ), ], ), ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 20.0, 0.0, 12.0), child: Row( mainAxisSize: MainAxisSize.max, children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0), child: Text( FFLocalizations.of(context).getText( 'xo7oiuz0' /* Name(English) */, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Roboto', color: Colors.black, fontSize: 16.0, fontWeight: FontWeight.w500, ), ), ), ], ), ), Row( mainAxisSize: MainAxisSize.max, children: [ Expanded( child: Padding( padding: EdgeInsetsDirectional.fromSTEB(8.0, 0.0, 8.0, 0.0), child: Container( width: 326.0, child: TextFormField( controller: _model.nameEnglishController, focusNode: _model.nameEnglishFocusNode, autofocus: true, textCapitalization: TextCapitalization.characters, textInputAction: TextInputAction.next, obscureText: false, decoration: InputDecoration( labelStyle: FlutterTheme.of(context).labelMedium, hintStyle: FlutterTheme.of(context).labelMedium, enabledBorder: OutlineInputBorder( borderSide: BorderSide( color: Color(0xFF6D7581), width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).primary, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), errorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedErrorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), filled: true, fillColor: Colors.white, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Readex Pro', fontSize: 16.0, ), keyboardType: TextInputType.name, validator: _model.nameEnglishControllerValidator .asValidator(context), ), ), ), ), ], ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 20.0, 0.0, 12.0), child: Row( mainAxisSize: MainAxisSize.max, children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0), child: Text( FFLocalizations.of(context).getText( 'j04e2w4k' /* Name(Chinese) */, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Roboto', color: Colors.black, fontSize: 16.0, fontWeight: FontWeight.w500, ), ), ), ], ), ), Row( mainAxisSize: MainAxisSize.max, children: [ Expanded( child: Padding( padding: EdgeInsetsDirectional.fromSTEB(8.0, 0.0, 8.0, 0.0), child: Container( width: 326.0, child: TextFormField( controller: _model.nameChineseController, focusNode: _model.nameChineseFocusNode, autofocus: true, textInputAction: TextInputAction.next, obscureText: false, decoration: InputDecoration( labelStyle: FlutterTheme.of(context).labelMedium, hintStyle: FlutterTheme.of(context).labelMedium, enabledBorder: OutlineInputBorder( borderSide: BorderSide( color: Color(0xFF6D7581), width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).primary, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), errorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedErrorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), filled: true, fillColor: Colors.white, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Readex Pro', fontSize: 16.0, ), keyboardType: TextInputType.name, validator: _model.nameChineseControllerValidator .asValidator(context), ), ), ), ), ], ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 20.0, 0.0, 12.0), child: Row( mainAxisSize: MainAxisSize.max, children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0), child: Text( FFLocalizations.of(context).getText( 'c0ce4wyg' /* Contact number */, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Roboto', color: Colors.black, fontSize: 16.0, fontWeight: FontWeight.w500, ), ), ), ], ), ), Row( mainAxisSize: MainAxisSize.max, children: [ Expanded( child: Padding( padding: EdgeInsetsDirectional.fromSTEB(8.0, 0.0, 8.0, 0.0), child: Container( width: 326.0, child: TextFormField( controller: _model.phoneController, focusNode: _model.phoneFocusNode, textInputAction: TextInputAction.next, obscureText: false, decoration: InputDecoration( labelStyle: FlutterTheme.of(context).labelMedium, hintStyle: FlutterTheme.of(context).labelMedium, enabledBorder: OutlineInputBorder( borderSide: BorderSide( color: Color(0xFF6D7581), width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).primary, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), errorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedErrorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), filled: true, fillColor: Colors.white, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Readex Pro', fontSize: 16.0, ), keyboardType: TextInputType.number, validator: _model.phoneControllerValidator .asValidator(context), ), ), ), ), ], ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 20.0, 0.0, 12.0), child: Row( mainAxisSize: MainAxisSize.max, children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0), child: Text( FFLocalizations.of(context).getText( 'e4ai3yns' /* Email */, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Roboto', color: Colors.black, fontSize: 16.0, fontWeight: FontWeight.w500, ), ), ), ], ), ), Row( mainAxisSize: MainAxisSize.max, children: [ Expanded( child: Padding( padding: EdgeInsetsDirectional.fromSTEB(8.0, 0.0, 8.0, 0.0), child: Container( width: 326.0, child: TextFormField( controller: _model.emailController, focusNode: _model.emailFocusNode, textInputAction: TextInputAction.next, obscureText: false, decoration: InputDecoration( labelStyle: FlutterTheme.of(context).labelMedium, hintStyle: FlutterTheme.of(context).labelMedium, enabledBorder: OutlineInputBorder( borderSide: BorderSide( color: Color(0xFF6D7581), width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).primary, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), errorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedErrorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), filled: true, fillColor: Colors.white, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Readex Pro', fontSize: 16.0, ), keyboardType: TextInputType.emailAddress, validator: _model.emailControllerValidator .asValidator(context), ), ), ), ), ], ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 20.0, 0.0, 12.0), child: Row( mainAxisSize: MainAxisSize.max, children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0), child: Text( FFLocalizations.of(context).getText( 'zw7s85vs' /* Date of Birth */, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Roboto', color: Colors.black, fontSize: 16.0, fontWeight: FontWeight.w500, ), ), ), ], ), ), Row( mainAxisSize: MainAxisSize.max, children: [ Expanded( child: Padding( padding: EdgeInsetsDirectional.fromSTEB(8.0, 0.0, 8.0, 0.0), child: Container( width: 326.0, child: TextFormField( controller: _model.dateController, focusNode: _model.dateFocusNode, textCapitalization: TextCapitalization.none, readOnly: true, obscureText: false, decoration: InputDecoration( hintText: FFLocalizations.of(context).getText( '3w6nzzge' /* YYYY/MM/DD */, ), hintStyle: FlutterTheme.of(context).labelMedium, enabledBorder: OutlineInputBorder( borderSide: BorderSide( color: Color(0xFF6D7581), width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).primary, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), errorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedErrorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), filled: true, fillColor: Colors.white, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Readex Pro', fontSize: 16.0, ), keyboardType: TextInputType.datetime, validator: _model.dateControllerValidator .asValidator(context), ), ), ), ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 8.0, 0.0), child: FlutterIconButton( borderColor: FlutterTheme.of(context).primaryText, borderRadius: 20.0, borderWidth: 1.0, buttonSize: 40.0, fillColor: FlutterTheme.of(context).secondaryBackground, icon: Icon( Icons.calendar_month, color: FlutterTheme.of(context).primaryText, size: 24.0, ), onPressed: () async { final _datePickedDate = await showDatePicker( context: context, initialDate: getCurrentTimestamp, firstDate: DateTime(1900), lastDate: getCurrentTimestamp, ); if (_datePickedDate != null) { safeSetState(() { _model.datePicked = DateTime( _datePickedDate.year, _datePickedDate.month, _datePickedDate.day, ); }); } setState(() { _model.dateController?.text = functions .formatDate(_model.datePicked!.toString()); }); setState(() { _model.setBirthDate = true; }); }, ), ), ], ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 20.0, 0.0, 12.0), child: Row( mainAxisSize: MainAxisSize.max, children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0), child: Text( FFLocalizations.of(context).getText( 'shcd8b2v' /* Type of document */, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Roboto', color: Colors.black, fontSize: 16.0, fontWeight: FontWeight.w500, ), ), ), ], ), ), Padding( padding: EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0), child: Row( mainAxisSize: MainAxisSize.max, children: [ FlutterDropDown( controller: _model.documentTypeValueController ??= FormFieldController( _model.documentTypeValue ??= getJsonField( widget.memberData, r'''$.document_type''', ).toString(), ), options: [ FFLocalizations.of(context).getText( 'lbzm113k' /* HongKong(HKID) */, ), FFLocalizations.of(context).getText( 'pbsdtu7w' /* Passport */, ) ], onChanged: (val) => setState(() => _model.documentTypeValue = val), width: 326.0, height: 40.0, textStyle: FlutterTheme.of(context).bodyMedium, hintText: FFLocalizations.of(context).getText( 'uaxuivep' /* Please select... */, ), icon: Icon( Icons.keyboard_arrow_down_rounded, color: FlutterTheme.of(context).secondaryText, size: 24.0, ), fillColor: Color(0xFFEBEBE4), elevation: 2.0, borderColor: FlutterTheme.of(context).alternate, borderWidth: 2.0, borderRadius: 40.0, margin: EdgeInsetsDirectional.fromSTEB(16.0, 4.0, 16.0, 4.0), hidesUnderline: true, isSearchable: false, isMultiSelect: false, ), ], ), ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 20.0, 0.0, 12.0), child: Row( mainAxisSize: MainAxisSize.max, children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0), child: Text( FFLocalizations.of(context).getText( 'xgq6sphy' /* Document no. */, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Roboto', color: Colors.black, fontSize: 16.0, fontWeight: FontWeight.w500, ), ), ), ], ), ), Row( mainAxisSize: MainAxisSize.max, children: [ Expanded( child: Padding( padding: EdgeInsetsDirectional.fromSTEB(8.0, 0.0, 8.0, 0.0), child: Container( width: 326.0, child: TextFormField( controller: _model.documentNoController, focusNode: _model.documentNoFocusNode, autofocus: true, textInputAction: TextInputAction.next, obscureText: false, decoration: InputDecoration( labelStyle: FlutterTheme.of(context).labelMedium, hintStyle: FlutterTheme.of(context).labelMedium, enabledBorder: OutlineInputBorder( borderSide: BorderSide( color: Color(0xFF6D7581), width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).primary, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), errorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedErrorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), filled: true, fillColor: Colors.white, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Readex Pro', fontSize: 16.0, ), validator: _model.documentNoControllerValidator .asValidator(context), ), ), ), ), ], ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 20.0, 0.0, 12.0), child: Row( mainAxisSize: MainAxisSize.max, children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0), child: Text( FFLocalizations.of(context).getText( '9dyzzn6x' /* Country */, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Roboto', color: Colors.black, fontSize: 16.0, fontWeight: FontWeight.w500, ), ), ), ], ), ), Row( mainAxisSize: MainAxisSize.max, children: [ Expanded( child: Padding( padding: EdgeInsetsDirectional.fromSTEB(8.0, 0.0, 8.0, 0.0), child: Container( width: 326.0, child: TextFormField( controller: _model.countryController, focusNode: _model.countryFocusNode, autofocus: true, textCapitalization: TextCapitalization.words, textInputAction: TextInputAction.next, obscureText: false, decoration: InputDecoration( labelStyle: FlutterTheme.of(context).labelMedium, hintStyle: FlutterTheme.of(context).labelMedium, enabledBorder: OutlineInputBorder( borderSide: BorderSide( color: Color(0xFF6D7581), width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).primary, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), errorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedErrorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), filled: true, fillColor: Colors.white, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Readex Pro', fontSize: 16.0, ), validator: _model.countryControllerValidator .asValidator(context), ), ), ), ), ], ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 20.0, 0.0, 12.0), child: Row( mainAxisSize: MainAxisSize.max, children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0), child: Text( FFLocalizations.of(context).getText( 'oyorcxzb' /* City */, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Roboto', color: Colors.black, fontSize: 16.0, fontWeight: FontWeight.w500, ), ), ), ], ), ), Row( mainAxisSize: MainAxisSize.max, children: [ Expanded( child: Padding( padding: EdgeInsetsDirectional.fromSTEB(8.0, 0.0, 8.0, 0.0), child: Container( width: 326.0, child: TextFormField( controller: _model.cityController, focusNode: _model.cityFocusNode, autofocus: true, textCapitalization: TextCapitalization.words, textInputAction: TextInputAction.next, obscureText: false, decoration: InputDecoration( labelStyle: FlutterTheme.of(context).labelMedium, hintStyle: FlutterTheme.of(context).labelMedium, enabledBorder: OutlineInputBorder( borderSide: BorderSide( color: Color(0xFF6D7581), width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).primary, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), errorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedErrorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), filled: true, fillColor: Colors.white, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Readex Pro', fontSize: 16.0, ), validator: _model.cityControllerValidator .asValidator(context), ), ), ), ), ], ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 20.0, 0.0, 12.0), child: Row( mainAxisSize: MainAxisSize.max, children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0), child: Text( FFLocalizations.of(context).getText( 'znx7b03q' /* Address(English) */, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Roboto', color: Colors.black, fontSize: 16.0, fontWeight: FontWeight.w500, ), ), ), ], ), ), Row( mainAxisSize: MainAxisSize.max, children: [ Expanded( child: Padding( padding: EdgeInsetsDirectional.fromSTEB(8.0, 0.0, 8.0, 0.0), child: Container( width: 326.0, child: TextFormField( controller: _model.addressEnController, focusNode: _model.addressEnFocusNode, textCapitalization: TextCapitalization.words, textInputAction: TextInputAction.next, obscureText: false, decoration: InputDecoration( labelStyle: FlutterTheme.of(context).labelMedium, hintStyle: FlutterTheme.of(context).labelMedium, enabledBorder: OutlineInputBorder( borderSide: BorderSide( color: Color(0xFF6D7581), width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).primary, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), errorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedErrorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), filled: true, fillColor: Colors.white, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Readex Pro', fontSize: 16.0, ), keyboardType: TextInputType.multiline, validator: _model.addressEnControllerValidator .asValidator(context), ), ), ), ), ], ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 20.0, 0.0, 12.0), child: Row( mainAxisSize: MainAxisSize.max, children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0), child: Text( FFLocalizations.of(context).getText( 'tjz8k3zh' /* Address(Chinese) */, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Roboto', color: Colors.black, fontSize: 16.0, fontWeight: FontWeight.w500, ), ), ), ], ), ), Row( mainAxisSize: MainAxisSize.max, children: [ Expanded( child: Padding( padding: EdgeInsetsDirectional.fromSTEB(8.0, 0.0, 8.0, 0.0), child: Container( width: 326.0, child: TextFormField( controller: _model.addressCnController, focusNode: _model.addressCnFocusNode, textInputAction: TextInputAction.next, obscureText: false, decoration: InputDecoration( labelStyle: FlutterTheme.of(context).labelMedium, hintStyle: FlutterTheme.of(context).labelMedium, enabledBorder: OutlineInputBorder( borderSide: BorderSide( color: Color(0xFF6D7581), width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).primary, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), errorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), focusedErrorBorder: OutlineInputBorder( borderSide: BorderSide( color: FlutterTheme.of(context).error, width: 2.0, ), borderRadius: BorderRadius.circular(23.8), ), filled: true, fillColor: Colors.white, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Readex Pro', fontSize: 16.0, ), keyboardType: TextInputType.multiline, validator: _model.addressCnControllerValidator .asValidator(context), ), ), ), ), ], ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 20.0, 0.0, 12.0), child: Row( mainAxisSize: MainAxisSize.max, children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0), child: Text( FFLocalizations.of(context).getText( 'dvr4tji1' /* Copy of document */, ), style: FlutterTheme.of(context).bodyMedium.override( fontFamily: 'Roboto', color: Colors.black, fontSize: 16.0, fontWeight: FontWeight.w500, ), ), ), ], ), ), if ((_model.uploadPhoto == true) || (_model.reuploadPhoto == true) || (getJsonField( widget.memberData, r'''$.documents[:].url''', ) != null)) Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 5.0, 0.0, 12.0), child: Row( mainAxisSize: MainAxisSize.max, children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB(16.0, 0.0, 0.0, 0.0), child: InkWell( splashColor: Colors.transparent, focusColor: Colors.transparent, hoverColor: Colors.transparent, highlightColor: Colors.transparent, onTap: () async { _model.deleteDocument1 = await NumstationGroup .deleteMemberDocumentCall .call( token: FFAppState().token, id: getJsonField( widget.memberData, r'''$.documents[:].id''', ), ); if ((_model.deleteDocument1?.succeeded ?? true)) { await showDialog( context: context, builder: (alertDialogContext) { return AlertDialog( content: Text( 'Document deleted! Please upload a new document.'), actions: [ TextButton( onPressed: () => Navigator.pop(alertDialogContext), child: Text('Ok'), ), ], ); }, ); } setState(() { _model.isDataUploading2 = false; _model.uploadedLocalFile2 = FFUploadedFile(bytes: Uint8List.fromList([])); }); final selectedMedia = await selectMediaWithSourceBottomSheet( context: context, allowPhoto: true, ); if (selectedMedia != null && selectedMedia.every((m) => validateFileFormat( m.storagePath, context))) { setState(() => _model.isDataUploading1 = true); var selectedUploadedFiles = []; try { selectedUploadedFiles = selectedMedia .map((m) => FFUploadedFile( name: m.storagePath.split('/').last, bytes: m.bytes, height: m.dimensions?.height, width: m.dimensions?.width, blurHash: m.blurHash, )) .toList(); } finally { _model.isDataUploading1 = false; } if (selectedUploadedFiles.length == selectedMedia.length) { setState(() { _model.uploadedLocalFile1 = selectedUploadedFiles.first; }); } else { setState(() {}); return; } } setState(() { _model.uploadPhoto = false; _model.reuploadPhoto = true; _model.hideApiPhoto = false; }); setState(() {}); }, child: Text( FFLocalizations.of(context).getText( 'u4no1wm8' /* Reupload */, ), style: FlutterTheme.of(context) .bodyMedium .override( fontFamily: 'Roboto', color: Color(0xFF009B9A), fontSize: 16.0, fontWeight: FontWeight.w500, decoration: TextDecoration.underline, ), ), ), ), Flexible( child: Align( alignment: AlignmentDirectional(1.0, 0.0), child: Builder( builder: (context) => Padding( padding: EdgeInsetsDirectional.fromSTEB( 0.0, 0.0, 16.0, 0.0), child: InkWell( splashColor: Colors.transparent, focusColor: Colors.transparent, hoverColor: Colors.transparent, highlightColor: Colors.transparent, onTap: () async { _model.deleteDocument = await NumstationGroup .deleteMemberDocumentCall .call( token: FFAppState().token, id: getJsonField( widget.memberData, r'''$.documents[:].id''', ), ); if ((_model.deleteDocument?.succeeded ?? true)) { await showAlignedDialog( context: context, isGlobal: true, avoidOverflow: false, targetAnchor: AlignmentDirectional( 0.0, 0.0) .resolve(Directionality.of(context)), followerAnchor: AlignmentDirectional( 0.0, 0.0) .resolve(Directionality.of(context)), builder: (dialogContext) { return Material( color: Colors.transparent, child: AlertBoxCustomOKWidget( text: 'Document deleted!', ), ); }, ).then((value) => setState(() {})); } else { if (_model.reuploadPhoto == false) { setState(() { _model.isDataUploading2 = false; _model.uploadedLocalFile2 = FFUploadedFile( bytes: Uint8List.fromList([])); }); } else { setState(() { _model.isDataUploading1 = false; _model.uploadedLocalFile1 = FFUploadedFile( bytes: Uint8List.fromList([])); }); } setState(() { _model.uploadPhoto = false; _model.reuploadPhoto = false; }); } setState(() {}); }, child: Text( FFLocalizations.of(context).getText( 'c13addax' /* Delete */, ), style: FlutterTheme.of(context) .bodyMedium .override( fontFamily: 'Roboto', color: FlutterTheme.of(context).error, fontSize: 16.0, fontWeight: FontWeight.w500, decoration: TextDecoration.underline, ), ), ), ), ), ), ), ], ), ), if ((_model.uploadPhoto == true) || (_model.reuploadPhoto == true) || (getJsonField( widget.memberData, r'''$.documents[:].url''', ) != null)) Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 12.0, 0.0, 0.0), child: Container( width: 326.0, height: 140.0, decoration: BoxDecoration( color: FlutterTheme.of(context).secondaryBackground, borderRadius: BorderRadius.circular(8.0), border: Border.all( color: Colors.black, ), ), child: Align( alignment: AlignmentDirectional(0.0, 0.0), child: Column( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.center, children: [ if ((_model.uploadPhoto == false) && (_model.reuploadPhoto == false) && (getJsonField( widget.memberData, r'''$.documents[:].url''', ) != null)) Container( decoration: BoxDecoration(), child: ClipRRect( borderRadius: BorderRadius.circular(8.0), child: Image.network( getJsonField( widget.memberData, r'''$.documents[:].url''', ).toString(), width: 245.0, height: 127.0, fit: BoxFit.cover, ), ), ), if (_model.reuploadPhoto == true) Container( decoration: BoxDecoration(), child: ClipRRect( borderRadius: BorderRadius.circular(8.0), child: Image.memory( _model.uploadedLocalFile1.bytes ?? Uint8List.fromList([]), width: 245.0, height: 127.0, fit: BoxFit.cover, ), ), ), if (_model.uploadPhoto == true) Container( decoration: BoxDecoration(), child: ClipRRect( borderRadius: BorderRadius.circular(8.0), child: Image.memory( _model.uploadedLocalFile2.bytes ?? Uint8List.fromList([]), width: 245.0, height: 127.0, fit: BoxFit.cover, ), ), ), ], ), ), ), ), if ((_model.uploadPhoto == false) && (getJsonField( widget.memberData, r'''$.documents[:]''', ) == null) && (_model.reuploadPhoto == false)) Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 12.0, 0.0, 0.0), child: InkWell( splashColor: Colors.transparent, focusColor: Colors.transparent, hoverColor: Colors.transparent, highlightColor: Colors.transparent, onTap: () async { final selectedMedia = await selectMediaWithSourceBottomSheet( context: context, imageQuality: 100, allowPhoto: true, ); if (selectedMedia != null && selectedMedia.every((m) => validateFileFormat(m.storagePath, context))) { setState(() => _model.isDataUploading2 = true); var selectedUploadedFiles = []; try { selectedUploadedFiles = selectedMedia .map((m) => FFUploadedFile( name: m.storagePath.split('/').last, bytes: m.bytes, height: m.dimensions?.height, width: m.dimensions?.width, blurHash: m.blurHash, )) .toList(); } finally { _model.isDataUploading2 = false; } if (selectedUploadedFiles.length == selectedMedia.length) { setState(() { _model.uploadedLocalFile2 = selectedUploadedFiles.first; }); } else { setState(() {}); return; } } setState(() { _model.uploadPhoto = true; }); }, child: Container( width: 326.0, height: 140.0, decoration: BoxDecoration( color: FlutterTheme.of(context).secondaryBackground, borderRadius: BorderRadius.circular(8.0), border: Border.all( color: Colors.black, ), ), child: Column( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.center, children: [ ClipRRect( borderRadius: BorderRadius.circular(8.0), child: SvgPicture.asset( 'assets/images/map.svg', width: 28.0, height: 28.0, fit: BoxFit.cover, ), ), Padding( padding: EdgeInsetsDirectional.fromSTEB( 0.0, 13.0, 0.0, 0.0), child: Text( FFLocalizations.of(context).getText( '4qw662d2' /* Tap to upload */, ), style: FlutterTheme.of(context).bodyMedium, ), ), ], ), ), ), ), Builder( builder: (context) => Padding( padding: EdgeInsetsDirectional.fromSTEB(0.0, 20.0, 0.0, 20.0), child: FFButtonWidget( onPressed: () async { if (_model.setBirthDate == true) { _model.updateMember1 = await NumstationGroup.saveOrUpdateMemberCall.call( token: FFAppState().token, companyId: widget.companyID, position: functions.positionLabel(_model.positionValue), title: _model.titleValue, nameEnglish: _model.nameEnglishController.text, nameChinese: _model.nameChineseController.text, email: _model.emailController.text, phone: int.tryParse(_model.phoneController.text), documentType: _model.documentTypeValue, country: _model.countryController.text, addressEnglish: _model.addressEnController.text, addressChinese: _model.addressCnController.text, documentNumber: _model.documentNoController.text, city: _model.cityController.text, memberId: getJsonField( widget.memberData, r'''$.id''', ), yearDate: dateTimeFormat( 'y', _model.datePicked, locale: FFLocalizations.of(context).languageCode, ), monthDate: dateTimeFormat( 'MM', _model.datePicked, locale: FFLocalizations.of(context).languageCode, ), dayDate: dateTimeFormat( 'dd', _model.datePicked, locale: FFLocalizations.of(context).languageCode, ), documentFile: () { if (_model.uploadPhoto == true) { return _model.uploadedLocalFile2; } else if (_model.reuploadPhoto == true) { return _model.uploadedLocalFile1; } else { return null; } }(), ); if (!(_model.updateMember1?.succeeded ?? true)) { await showDialog( context: context, builder: (alertDialogContext) { return AlertDialog( content: Text('Failed!'), actions: [ TextButton( onPressed: () => Navigator.pop(alertDialogContext), child: Text('Ok'), ), ], ); }, ); } } else { _model.updateMember2 = await NumstationGroup.saveOrUpdateMemberCall.call( token: FFAppState().token, companyId: widget.companyID, position: functions.positionLabel(_model.positionValue), title: _model.titleValue, nameEnglish: _model.nameEnglishController.text, nameChinese: _model.nameChineseController.text, email: _model.emailController.text, phone: int.tryParse(_model.phoneController.text), documentType: _model.documentTypeValue, country: _model.countryController.text, addressEnglish: _model.addressEnController.text, addressChinese: _model.addressCnController.text, documentNumber: _model.documentNoController.text, city: _model.cityController.text, memberId: getJsonField( widget.memberData, r'''$.id''', ), yearDate: getJsonField( widget.memberData, r'''$.year_date''', ).toString(), monthDate: getJsonField( widget.memberData, r'''$.month_date''', ).toString(), dayDate: getJsonField( widget.memberData, r'''$.day_date''', ).toString(), documentFile: () { if (_model.uploadPhoto == true) { return _model.uploadedLocalFile2; } else if (_model.reuploadPhoto == true) { return _model.uploadedLocalFile1; } else { return null; } }(), ); if (!(_model.updateMember2?.succeeded ?? true)) { await showDialog( context: context, builder: (alertDialogContext) { return AlertDialog( content: Text('Failed!'), actions: [ TextButton( onPressed: () => Navigator.pop(alertDialogContext), child: Text('Ok'), ), ], ); }, ); } } setState(() { _model.setBirthDate = false; }); await showAlignedDialog( context: context, isGlobal: true, avoidOverflow: false, targetAnchor: AlignmentDirectional(0.0, 0.0) .resolve(Directionality.of(context)), followerAnchor: AlignmentDirectional(0.0, 0.0) .resolve(Directionality.of(context)), builder: (dialogContext) { return Material( color: Colors.transparent, child: AlertBoxCustomWidget( text: 'All changes have been changed!', ), ); }, ).then((value) => setState(() {})); context.pushNamed('dashboard'); setState(() {}); }, text: FFLocalizations.of(context).getText( '43n398i4' /* Save */, ), options: FFButtonOptions( width: 326.0, height: 50.0, padding: EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 20.0), iconPadding: EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0), color: Color(0xFF009B9A), textStyle: FlutterTheme.of(context).titleSmall.override( fontFamily: 'Roboto', color: Colors.white, fontSize: 20.0, ), elevation: 3.0, borderSide: BorderSide( color: Colors.transparent, width: 1.0, ), borderRadius: BorderRadius.circular(40.0), ), ), ), ), ], ), ), ), ); } }