import '/backend/api_requests/api_calls.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 'new_member_model.dart'; export 'new_member_model.dart'; class NewMemberWidget extends StatefulWidget { const NewMemberWidget({ Key? key, required this.companyID, }) : super(key: key); final dynamic companyID; @override _NewMemberWidgetState createState() => _NewMemberWidgetState(); } class _NewMemberWidgetState extends State { late NewMemberModel _model; @override void setState(VoidCallback callback) { super.setState(callback); _model.onUpdate(); } @override void initState() { super.initState(); _model = createModel(context, () => NewMemberModel()); _model.nameEnglishController ??= TextEditingController(); _model.nameEnglishFocusNode ??= FocusNode(); _model.nameChineseController ??= TextEditingController(); _model.nameChineseFocusNode ??= FocusNode(); _model.phoneController ??= TextEditingController(); _model.phoneFocusNode ??= FocusNode(); _model.emailController ??= TextEditingController(); _model.emailFocusNode ??= FocusNode(); _model.dateController ??= TextEditingController(); _model.dateFocusNode ??= FocusNode(); _model.documentNoController ??= TextEditingController(); _model.documentNoFocusNode ??= FocusNode(); _model.countryController ??= TextEditingController(); _model.countryFocusNode ??= FocusNode(); _model.cityController ??= TextEditingController(); _model.cityFocusNode ??= FocusNode(); _model.addressEnController ??= TextEditingController(); _model.addressEnFocusNode ??= FocusNode(); _model.addressCnController ??= TextEditingController(); _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: [ 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( 'kv4ftnof' /* Director */, ), FFLocalizations.of(context).getText( 'dltgumyy' /* Shareholder */, ), FFLocalizations.of(context).getText( 'vwiykiw6' /* Company Secretary */, ) ].toList(), onChanged: (val) => setState(() {}), controller: _model.positionValueController ??= FormFieldController(null), 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( 'uacaxvd3' /* 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 ??= '', ), options: List.from(['mr', 'mrs', 'miss']), optionLabels: [ FFLocalizations.of(context).getText( 'ta3hic0x' /* Mr */, ), FFLocalizations.of(context).getText( 'kv8j9o66' /* Mrs */, ), FFLocalizations.of(context).getText( 'aw0eop99' /* Miss */, ) ], onChanged: (val) => setState(() => _model.titleValue = val), width: 326.0, height: 40.0, textStyle: FlutterTheme.of(context).bodyMedium, hintText: FFLocalizations.of(context).getText( 'hqk392vl' /* 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( 'a1926xlo' /* 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( 'hduil5py' /* 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( 'fxjlxpaa' /* 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( '3x5xxpjw' /* 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( 'jbmr1cnx' /* 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( 'r5psp9h8' /* 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()); }); }, ), ), ], ), 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( '3beg3ql3' /* 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(null), options: [ FFLocalizations.of(context).getText( 'enkr3vsf' /* HongKong(HKID) */, ), FFLocalizations.of(context).getText( 'zy0kz9j2' /* Passport */, ) ], onChanged: (val) => setState(() => _model.documentTypeValue = val), width: 326.0, height: 40.0, textStyle: FlutterTheme.of(context).bodyMedium, hintText: FFLocalizations.of(context).getText( '1e13z31z' /* 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( 'i5ib5zb8' /* 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( 'y1rt1gz5' /* 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( 'xqjren9t' /* 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( 'e0qt3swy' /* 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( '63ilspkh' /* 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( 'mbpqt0jz' /* 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)) 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 { 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.isDataUploading2 = false; _model.uploadedLocalFile2 = FFUploadedFile(bytes: Uint8List.fromList([])); }); setState(() { _model.reuploadPhoto = true; _model.uploadPhoto = false; }); }, child: Text( FFLocalizations.of(context).getText( 'sby20dqr' /* 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: 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 { 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; }); }, child: Text( FFLocalizations.of(context).getText( '94saik2m' /* 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)) 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: Column( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.center, children: [ 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.reuploadPhoto == true) Container( decoration: BoxDecoration(), child: 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 == false) && (_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( 'xij8ljto' /* 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.uploadPhoto == false) && (_model.reuploadPhoto == false)) { _model.saveMember = 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: FFAppState().email, 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, 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, ), memberId: 0, ); if ((_model.saveMember?.succeeded ?? true)) { setState(() { FFAppState().memberID = 0; }); 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'); } else { await showDialog( context: context, builder: (alertDialogContext) { return AlertDialog( content: Text('Failed!'), actions: [ TextButton( onPressed: () => Navigator.pop(alertDialogContext), child: Text('Ok'), ), ], ); }, ); } } else { if ((_model.uploadPhoto == true) && (_model.reuploadPhoto == false)) { _model.saveMember1 = 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: FFAppState().email, 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, 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, ), memberId: 0, documentFile: _model.uploadedLocalFile2, ); if ((_model.saveMember1?.succeeded ?? true)) { setState(() { FFAppState().memberID = 0; }); 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'); } else { await showDialog( context: context, builder: (alertDialogContext) { return AlertDialog( content: Text('Failed!'), actions: [ TextButton( onPressed: () => Navigator.pop(alertDialogContext), child: Text('Ok'), ), ], ); }, ); } } else { if ((_model.uploadPhoto == false) && (_model.reuploadPhoto == true)) { _model.saveMember2 = 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: FFAppState().email, 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, 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, ), memberId: 0, documentFile: _model.uploadedLocalFile1, ); if ((_model.saveMember2?.succeeded ?? true)) { setState(() { FFAppState().memberID = 0; }); 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'); } else { await showDialog( context: context, builder: (alertDialogContext) { return AlertDialog( content: Text('Failed!'), actions: [ TextButton( onPressed: () => Navigator.pop(alertDialogContext), child: Text('Ok'), ), ], ); }, ); } } } } setState(() {}); }, text: FFLocalizations.of(context).getText( '24hsw3l5' /* 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), ), ), ), ), ], ), ), ), ); } }