import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:hub/components/atomic_components/shared_components_atoms/toast.dart';
import 'package:hub/components/templates_components/details_component/details_component_widget.dart';
import 'package:hub/components/templates_components/visitor_search_modal_template_component/visitor_search_modal_template_component_widget.dart';
import 'package:hub/features/backend/index.dart';
import 'package:hub/flutter_flow/custom_functions.dart';
import 'package:hub/flutter_flow/flutter_flow_drop_down.dart';
import 'package:hub/flutter_flow/flutter_flow_icon_button.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:hub/flutter_flow/flutter_flow_widgets.dart';
import 'package:hub/flutter_flow/form_field_controller.dart';
import 'package:hub/flutter_flow/nav/nav.dart';
import 'package:hub/pages/schedule_complete_visit_page/schedule_complete_visit_page_model.dart';
import 'package:hub/pages/schedule_complete_visit_page/visit_history_page_widget.dart';
import 'package:hub/shared/utils/dialog_util.dart';
import 'package:hub/shared/utils/limited_text_size.dart';
import 'package:hub/shared/utils/share_util.dart';

class ScheduleComplete extends StatefulWidget {
  const ScheduleComplete({super.key});

  @override
  State<StatefulWidget> createState() => throw UnimplementedError();
}

class ScheduleCompleteVisitPageWidget extends ScheduleComplete {
  const ScheduleCompleteVisitPageWidget({super.key});

  @override
  State<ScheduleCompleteVisitPageWidget> createState() =>
      _ScheduleCompleteVisitPageWidgetState();
}

class _ScheduleCompleteVisitPageWidgetState
    extends State<ScheduleCompleteVisitPageWidget>
    with TickerProviderStateMixin {
  bool _isLoading = false;
  late ScheduleCompleteVisitPageModel _model;
  int _visitHistoryLoadingIdx = 0;
  final int _visitHistoryLoadingCount = 10;
  final List<dynamic> _visitHistoryList = [];
  final ScrollController _visitHistoryController = ScrollController();

  final scaffoldKey = GlobalKey<ScaffoldState>();

  @override
  void initState() {
    super.initState();
    _model = createModel(
        context,
        () => ScheduleCompleteVisitPageModel(
            safeSetState: () => safeSetState(() {})));
    _model.updateState = (Function fn) => safeSetState(fn());

    _model.tabBarController = TabController(
      vsync: this,
      length: 2,
      initialIndex: 0,
    )..addListener(() => safeSetState(() {}));
    _model.textController1 ??= TextEditingController();
    _model.textFieldFocusNode1 ??= FocusNode();

    _model.textController2 ??= TextEditingController();
    _model.textFieldFocusNode2 ??= FocusNode();

    _model.switchValue = true;
    _model.textController3 ??= TextEditingController();
    _model.textFieldFocusNode3 ??= FocusNode();
  }

  void _loadMoreVisitHistory() async {
    Future<List<String>> fetchVisitHistory(int start, int limit) async {
      await Future.delayed(const Duration(seconds: 1));
      return List.generate(limit, (index) => "Item ${start + index}");
    }

    final int start = _visitHistoryLoadingIdx * _visitHistoryLoadingCount;
    final List<String> newItems =
        await fetchVisitHistory(start, _visitHistoryLoadingCount);

    if (newItems.isNotEmpty) {
      _visitHistoryList.addAll(newItems);
      _visitHistoryLoadingIdx++;
      safeSetState(() {});
    }
  }

  void _scrollListener() {
    if (_visitHistoryController.position.pixels ==
        _visitHistoryController.position.maxScrollExtent) {
      _loadMoreVisitHistory();
    }
  }

  @override
  void dispose() {
    _model.dispose();

    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () => _model.unfocusNode.canRequestFocus
          ? FocusScope.of(context).requestFocus(_model.unfocusNode)
          : FocusScope.of(context).unfocus(),
      child: Scaffold(
        key: scaffoldKey,
        backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
        appBar: appBarScheduleCompleteVisit(context),
        body: bodyScheduleCompleteVisit(context, _model, safeSetState),
      ),
    );
  }

  PreferredSizeWidget appBarScheduleCompleteVisit(BuildContext context) {
    return AppBar(
      backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
      automaticallyImplyLeading: false,
      forceMaterialTransparency: true,
      elevation: 0.0,
      leading: FlutterFlowIconButton(
        key: ValueKey<String>('BackNavigationAppBar'),
        borderColor: Colors.transparent,
        borderRadius: 30.0,
        borderWidth: 1.0,
        buttonSize: 60.0,
        icon: Icon(
          Icons.keyboard_arrow_left,
          color: FlutterFlowTheme.of(context).primaryText,
          size: 30.0,
        ),
        onPressed: () async {
          context.pop();
        },
      ),
      title: Text(
        FFLocalizations.of(context).getText(
          '61lcxdgm',
        ),
        style: FlutterFlowTheme.of(context).headlineMedium.override(
              fontFamily: 'Nunito',
              color: FlutterFlowTheme.of(context).primaryText,
              fontSize: LimitedFontSizeUtil.getHeaderFontSize(context),
              letterSpacing: 0.0,
              fontWeight: FontWeight.bold,
              useGoogleFonts: GoogleFonts.asMap().containsKey('Nunito'),
            ),
      ),
      actions: const [],
      centerTitle: true,
    );
  }

  Widget bodyScheduleCompleteVisit(BuildContext context,
      ScheduleCompleteVisitPageModel model, Function safeSetState) {
    return SafeArea(
      top: true,
      child: Column(
        children: [
          Align(
            alignment: const Alignment(0.0, 0),
            child: TabBar(
              labelColor: FlutterFlowTheme.of(context).primaryText,
              unselectedLabelColor: FlutterFlowTheme.of(context).primaryText,
              labelStyle: FlutterFlowTheme.of(context).titleMedium.override(
                    fontFamily: FlutterFlowTheme.of(context).titleMediumFamily,
                    fontSize: LimitedFontSizeUtil.getBodyFontSize(context),
                    letterSpacing: 0.0,
                    useGoogleFonts: GoogleFonts.asMap().containsKey(
                        FlutterFlowTheme.of(context).titleMediumFamily),
                  ),
              unselectedLabelStyle: const TextStyle(),
              indicatorColor: FlutterFlowTheme.of(context).primary,
              padding: const EdgeInsets.all(4.0),
              tabs: [
                Tab(
                  text: FFLocalizations.of(context).getText(
                    'ueth1f4g',
                  ),
                ),
                Tab(
                  text: FFLocalizations.of(context).getText(
                    'k4uraqam',
                  ),
                ),
              ],
              controller: model.tabBarController,
              onTap: (i) async {
                [() async {}, () async {}][i]();
              },
            ),
          ),
          Expanded(
            child: TabBarView(
              controller: model.tabBarController,
              children: [
                scheduleVisit(context, model, safeSetState),
                wrapWithModel(
                    model: model,
                    child: const VisitHistoryWidget(),
                    updateCallback: () {
                      safeSetState(() {});
                    },
                    updateOnChange: true),
              ],
            ),
          ),
        ],
      ),
    );
  }

  Widget scheduleVisit(BuildContext context,
      ScheduleCompleteVisitPageModel model, Function safeSetState) {
    final textScaler = MediaQuery.textScalerOf(context);
    final double baseFontSize = 12.0;
    final double scaledFontSize = baseFontSize * textScaler.scale(1);
    final double limitedInputFontSize =
        LimitedFontSizeUtil.getInputFontSize(context);
    final double limitedBodyFontSize =
        LimitedFontSizeUtil.getBodyFontSize(context);
    final double limitedSubHeaderFontSize =
        LimitedFontSizeUtil.getSubHeaderFontSize(context);
    final double scaledSizedBoxSize = scaledFontSize > 16.0 ? 100 : 80;

    return SingleChildScrollView(
      child: Column(
        mainAxisSize: MainAxisSize.max,
        children: [
          Form(
            autovalidateMode: AutovalidateMode.onUserInteraction,
            child: Column(
              mainAxisSize: MainAxisSize.max,
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                Column(mainAxisSize: MainAxisSize.max, children: [
                  Align(
                    alignment: const AlignmentDirectional(-1.0, 0.0),
                    child: Padding(
                      padding: const EdgeInsetsDirectional.fromSTEB(
                          20.0, 30.0, 0.0, 24.0),
                      child: Text(
                        FFLocalizations.of(context).getText(
                          '98evnbbe',
                        ),
                        textAlign: TextAlign.start,
                        style: FlutterFlowTheme.of(context).bodyMedium.override(
                              fontFamily:
                                  FlutterFlowTheme.of(context).bodyMediumFamily,
                              letterSpacing: 0.0,
                              fontWeight: FontWeight.bold,
                              useGoogleFonts: GoogleFonts.asMap().containsKey(
                                  FlutterFlowTheme.of(context)
                                      .bodyMediumFamily),
                              fontSize: limitedSubHeaderFontSize,
                            ),
                      ),
                    ),
                  ),
                  Row(
                    mainAxisSize: MainAxisSize.max,
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      SizedBox(
                        width: MediaQuery.of(context).size.width * 0.85,
                        height: scaledSizedBoxSize,
                        child: Stack(
                          children: [
                            TextFormField(
                                controller: model.textController1,
                                readOnly: true,
                                focusNode: model.textFieldFocusNode1,
                                autovalidateMode:
                                    AutovalidateMode.onUserInteraction,
                                autofocus: false,
                                obscureText: false,
                                decoration: InputDecoration(
                                  isDense: true,
                                  labelStyle: FlutterFlowTheme.of(context)
                                      .labelMedium
                                      .override(
                                        fontFamily: FlutterFlowTheme.of(context)
                                            .labelMediumFamily,
                                        color: FlutterFlowTheme.of(context)
                                            .primaryText,
                                        letterSpacing: 0.0,
                                        useGoogleFonts: GoogleFonts.asMap()
                                            .containsKey(
                                                FlutterFlowTheme.of(context)
                                                    .labelMediumFamily),
                                        fontSize: limitedInputFontSize,
                                      ),
                                  hintText: FFLocalizations.of(context).getText(
                                    '53cbwqh9',
                                  ),
                                  hintStyle: FlutterFlowTheme.of(context)
                                      .labelMedium
                                      .override(
                                        fontFamily: FlutterFlowTheme.of(context)
                                            .labelMediumFamily,
                                        color: FlutterFlowTheme.of(context)
                                            .primaryText,
                                        letterSpacing: 0.0,
                                        useGoogleFonts: GoogleFonts.asMap()
                                            .containsKey(
                                                FlutterFlowTheme.of(context)
                                                    .labelMediumFamily),
                                        lineHeight: 1.0,
                                        fontSize: limitedInputFontSize,
                                      ),
                                  enabledBorder: OutlineInputBorder(
                                    borderSide: BorderSide(
                                      color:
                                          FlutterFlowTheme.of(context).accent4,
                                      width: 0.5,
                                    ),
                                    borderRadius: BorderRadius.circular(8.0),
                                  ),
                                  focusedBorder: OutlineInputBorder(
                                    borderSide: BorderSide(
                                      color:
                                          FlutterFlowTheme.of(context).primary,
                                      width: 0.5,
                                    ),
                                    borderRadius: BorderRadius.circular(8.0),
                                  ),
                                  errorBorder: OutlineInputBorder(
                                    borderSide: BorderSide(
                                      color: FlutterFlowTheme.of(context).error,
                                      width: 0.5,
                                    ),
                                    borderRadius: BorderRadius.circular(8.0),
                                  ),
                                  errorStyle: TextStyle(
                                    fontFamily: FlutterFlowTheme.of(context)
                                        .bodyMediumFamily,
                                    color: FlutterFlowTheme.of(context).error,
                                    fontSize: limitedInputFontSize,
                                  ),
                                  focusedErrorBorder: OutlineInputBorder(
                                    borderSide: BorderSide(
                                      color: FlutterFlowTheme.of(context).error,
                                      width: 0.5,
                                    ),
                                    borderRadius: BorderRadius.circular(8.0),
                                  ),
                                  suffixIcon: Icon(
                                    Icons.date_range,
                                    color: FlutterFlowTheme.of(context).accent1,
                                  ),
                                ),
                                style: FlutterFlowTheme.of(context)
                                    .bodyMedium
                                    .override(
                                      fontFamily: FlutterFlowTheme.of(context)
                                          .bodyMediumFamily,
                                      letterSpacing: 0.0,
                                      useGoogleFonts: GoogleFonts.asMap()
                                          .containsKey(
                                              FlutterFlowTheme.of(context)
                                                  .bodyMediumFamily),
                                      lineHeight: 1.8,
                                      fontSize: limitedInputFontSize,
                                    ),
                                textAlign: TextAlign.start,
                                validator: model.textController1Validator
                                    .asValidator(context)),
                            Padding(
                              padding: const EdgeInsetsDirectional.fromSTEB(
                                  24.0, 0.0, 24.0, 0.0),
                              child: InkWell(
                                splashColor: Colors.transparent,
                                focusColor: Colors.transparent,
                                hoverColor: Colors.transparent,
                                highlightColor: Colors.transparent,
                                onTap: () async {
                                  final datePicked1Date = await showDatePicker(
                                    context: context,
                                    initialDate: getCurrentTimestamp,
                                    firstDate: getCurrentTimestamp,
                                    lastDate: DateTime(2050),
                                    builder: (context, child) {
                                      return wrapInMaterialDatePickerTheme(
                                        context,
                                        child!,
                                        headerBackgroundColor:
                                            FlutterFlowTheme.of(context)
                                                .primary,
                                        headerForegroundColor:
                                            FlutterFlowTheme.of(context).info,
                                        headerTextStyle: FlutterFlowTheme.of(
                                                context)
                                            .headlineLarge
                                            .override(
                                              fontFamily:
                                                  FlutterFlowTheme.of(context)
                                                      .headlineLargeFamily,
                                              fontSize: 32.0,
                                              letterSpacing: 0.0,
                                              fontWeight: FontWeight.w600,
                                              useGoogleFonts: GoogleFonts
                                                      .asMap()
                                                  .containsKey(
                                                      FlutterFlowTheme.of(
                                                              context)
                                                          .headlineLargeFamily),
                                            ),
                                        pickerBackgroundColor:
                                            FlutterFlowTheme.of(context)
                                                .primaryBackground,
                                        pickerForegroundColor:
                                            FlutterFlowTheme.of(context)
                                                .primaryText,
                                        selectedDateTimeBackgroundColor:
                                            FlutterFlowTheme.of(context)
                                                .primary,
                                        selectedDateTimeForegroundColor:
                                            FlutterFlowTheme.of(context).info,
                                        actionButtonForegroundColor:
                                            FlutterFlowTheme.of(context)
                                                .primaryText,
                                        iconSize: 24.0,
                                      );
                                    },
                                  );

                                  TimeOfDay? datePicked1Time;
                                  if (datePicked1Date != null) {
                                    datePicked1Time = await showTimePicker(
                                      context: context,
                                      initialTime: TimeOfDay.fromDateTime(
                                          getCurrentTimestamp),
                                      builder: (context, child) {
                                        return wrapInMaterialTimePickerTheme(
                                          context,
                                          child!,
                                          headerBackgroundColor:
                                              FlutterFlowTheme.of(context)
                                                  .primary,
                                          headerForegroundColor:
                                              FlutterFlowTheme.of(context).info,
                                          headerTextStyle: FlutterFlowTheme.of(
                                                  context)
                                              .headlineLarge
                                              .override(
                                                fontFamily:
                                                    FlutterFlowTheme.of(context)
                                                        .headlineLargeFamily,
                                                fontSize: 32.0,
                                                letterSpacing: 0.0,
                                                fontWeight: FontWeight.w600,
                                                useGoogleFonts: GoogleFonts
                                                        .asMap()
                                                    .containsKey(FlutterFlowTheme
                                                            .of(context)
                                                        .headlineLargeFamily),
                                              ),
                                          pickerBackgroundColor:
                                              FlutterFlowTheme.of(context)
                                                  .primaryBackground,
                                          pickerForegroundColor:
                                              FlutterFlowTheme.of(context).info,
                                          selectedDateTimeBackgroundColor:
                                              FlutterFlowTheme.of(context)
                                                  .primary,
                                          selectedDateTimeForegroundColor:
                                              FlutterFlowTheme.of(context).info,
                                          pickerDialForegroundColor:
                                              FlutterFlowTheme.of(context)
                                                  .primaryText,
                                          actionButtonForegroundColor:
                                              FlutterFlowTheme.of(context)
                                                  .primaryText,
                                          iconSize: 24.0,
                                        );
                                      },
                                    );
                                  }

                                  if (datePicked1Date != null &&
                                      datePicked1Time != null) {
                                    safeSetState(() {
                                      model.datePicked1 = DateTime(
                                        datePicked1Date.year,
                                        datePicked1Date.month,
                                        datePicked1Date.day,
                                        datePicked1Time!.hour,
                                        datePicked1Time.minute,
                                      );
                                    });
                                  }
                                  safeSetState(() {
                                    model.textController1?.text =
                                        dateTimeFormat(
                                      'dd/MM/yyyy HH:mm:ss',
                                      model.datePicked1,
                                      locale: FFLocalizations.of(context)
                                          .languageCode,
                                    );
                                    model.textController1?.selection =
                                        TextSelection.collapsed(
                                            offset: model
                                                .textController1!.text.length);
                                  });
                                },
                                child: Container(
                                  width: double.infinity,
                                  height: 80.0,
                                  decoration: BoxDecoration(
                                    borderRadius: BorderRadius.circular(8.0),
                                  ),
                                ),
                              ),
                            ),
                          ],
                        ),
                      ),
                    ],
                  ),
                  Row(
                    mainAxisSize: MainAxisSize.max,
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      SizedBox(
                        width: MediaQuery.of(context).size.width * 0.85,
                        height: scaledSizedBoxSize,
                        child: Stack(
                          children: [
                            TextFormField(
                              readOnly: true,
                              controller: model.textController2,
                              focusNode: model.textFieldFocusNode2,
                              autovalidateMode:
                                  AutovalidateMode.onUserInteraction,
                              autofocus: false,
                              obscureText: false,
                              decoration: InputDecoration(
                                isDense: true,
                                labelStyle: FlutterFlowTheme.of(context)
                                    .labelMedium
                                    .override(
                                      fontFamily: FlutterFlowTheme.of(context)
                                          .labelMediumFamily,
                                      color: FlutterFlowTheme.of(context)
                                          .primaryText,
                                      letterSpacing: 0.0,
                                      useGoogleFonts: GoogleFonts.asMap()
                                          .containsKey(
                                              FlutterFlowTheme.of(context)
                                                  .labelMediumFamily),
                                      fontSize: limitedInputFontSize,
                                    ),
                                hintText: FFLocalizations.of(context).getText(
                                  'xpgc5e8d',
                                ),
                                hintStyle: FlutterFlowTheme.of(context)
                                    .labelMedium
                                    .override(
                                      fontFamily: FlutterFlowTheme.of(context)
                                          .labelMediumFamily,
                                      color: FlutterFlowTheme.of(context)
                                          .primaryText,
                                      letterSpacing: 0.0,
                                      useGoogleFonts: GoogleFonts.asMap()
                                          .containsKey(
                                              FlutterFlowTheme.of(context)
                                                  .labelMediumFamily),
                                      lineHeight: 1.0,
                                      fontSize: limitedInputFontSize,
                                    ),
                                enabledBorder: OutlineInputBorder(
                                  borderSide: BorderSide(
                                    color: FlutterFlowTheme.of(context)
                                        .customColor6,
                                    width: 0.5,
                                  ),
                                  borderRadius: BorderRadius.circular(8.0),
                                ),
                                errorStyle: TextStyle(
                                  fontFamily: FlutterFlowTheme.of(context)
                                      .bodyMediumFamily,
                                  color: FlutterFlowTheme.of(context).error,
                                  fontSize: limitedInputFontSize,
                                ),
                                focusedBorder: OutlineInputBorder(
                                  borderSide: BorderSide(
                                    color: FlutterFlowTheme.of(context).primary,
                                    width: 0.5,
                                  ),
                                  borderRadius: BorderRadius.circular(8.0),
                                ),
                                errorBorder: OutlineInputBorder(
                                  borderSide: BorderSide(
                                    color: FlutterFlowTheme.of(context).error,
                                    width: 0.5,
                                  ),
                                  borderRadius: BorderRadius.circular(8.0),
                                ),
                                focusedErrorBorder: OutlineInputBorder(
                                  borderSide: BorderSide(
                                    color: FlutterFlowTheme.of(context).error,
                                    width: 0.5,
                                  ),
                                  borderRadius: BorderRadius.circular(8.0),
                                ),
                                suffixIcon: Icon(
                                  Icons.date_range,
                                  color: FlutterFlowTheme.of(context).accent1,
                                ),
                              ),
                              style: FlutterFlowTheme.of(context)
                                  .bodyMedium
                                  .override(
                                    fontFamily: FlutterFlowTheme.of(context)
                                        .bodyMediumFamily,
                                    letterSpacing: 0.0,
                                    useGoogleFonts: GoogleFonts.asMap()
                                        .containsKey(
                                            FlutterFlowTheme.of(context)
                                                .bodyMediumFamily),
                                    lineHeight: 1.8,
                                    fontSize: limitedInputFontSize,
                                  ),
                              textAlign: TextAlign.start,
                              validator: model.textController2Validator
                                  .asValidator(context),
                            ),
                            Padding(
                              padding: const EdgeInsetsDirectional.fromSTEB(
                                  24.0, 0.0, 24.0, 0.0),
                              child: InkWell(
                                splashColor: Colors.transparent,
                                focusColor: Colors.transparent,
                                hoverColor: Colors.transparent,
                                highlightColor: Colors.transparent,
                                onTap: () async {
                                  final datePicked2Date = await showDatePicker(
                                    context: context,
                                    initialDate: getCurrentTimestamp,
                                    firstDate: getCurrentTimestamp,
                                    lastDate: DateTime(2050),
                                    builder: (context, child) {
                                      return wrapInMaterialDatePickerTheme(
                                        context,
                                        child!,
                                        headerBackgroundColor:
                                            FlutterFlowTheme.of(context)
                                                .primary,
                                        headerForegroundColor:
                                            FlutterFlowTheme.of(context).info,
                                        headerTextStyle: FlutterFlowTheme.of(
                                                context)
                                            .headlineLarge
                                            .override(
                                              fontFamily:
                                                  FlutterFlowTheme.of(context)
                                                      .headlineLargeFamily,
                                              fontSize: limitedInputFontSize,
                                              letterSpacing: 0.0,
                                              fontWeight: FontWeight.w600,
                                              useGoogleFonts: GoogleFonts
                                                      .asMap()
                                                  .containsKey(
                                                      FlutterFlowTheme.of(
                                                              context)
                                                          .headlineLargeFamily),
                                            ),
                                        pickerBackgroundColor:
                                            FlutterFlowTheme.of(context)
                                                .primaryBackground,
                                        pickerForegroundColor:
                                            FlutterFlowTheme.of(context)
                                                .primaryText,
                                        selectedDateTimeBackgroundColor:
                                            FlutterFlowTheme.of(context)
                                                .primary,
                                        selectedDateTimeForegroundColor:
                                            FlutterFlowTheme.of(context).info,
                                        actionButtonForegroundColor:
                                            FlutterFlowTheme.of(context)
                                                .primaryText,
                                        iconSize: 24.0,
                                      );
                                    },
                                  );

                                  TimeOfDay? datePicked2Time;
                                  if (datePicked2Date != null) {
                                    datePicked2Time = await showTimePicker(
                                      context: context,
                                      initialTime: TimeOfDay.fromDateTime(
                                          getCurrentTimestamp),
                                      builder: (context, child) {
                                        return wrapInMaterialTimePickerTheme(
                                          context,
                                          child!,
                                          headerBackgroundColor:
                                              FlutterFlowTheme.of(context)
                                                  .primary,
                                          headerForegroundColor:
                                              FlutterFlowTheme.of(context).info,
                                          headerTextStyle: FlutterFlowTheme.of(
                                                  context)
                                              .headlineLarge
                                              .override(
                                                fontFamily:
                                                    FlutterFlowTheme.of(context)
                                                        .headlineLargeFamily,
                                                fontSize: 32.0,
                                                letterSpacing: 0.0,
                                                fontWeight: FontWeight.w600,
                                                useGoogleFonts: GoogleFonts
                                                        .asMap()
                                                    .containsKey(FlutterFlowTheme
                                                            .of(context)
                                                        .headlineLargeFamily),
                                              ),
                                          pickerBackgroundColor:
                                              FlutterFlowTheme.of(context)
                                                  .primaryBackground,
                                          pickerForegroundColor:
                                              FlutterFlowTheme.of(context).info,
                                          selectedDateTimeBackgroundColor:
                                              FlutterFlowTheme.of(context)
                                                  .primary,
                                          selectedDateTimeForegroundColor:
                                              FlutterFlowTheme.of(context).info,
                                          pickerDialForegroundColor:
                                              FlutterFlowTheme.of(context)
                                                  .primaryText,
                                          actionButtonForegroundColor:
                                              FlutterFlowTheme.of(context)
                                                  .primaryText,
                                          iconSize: 24.0,
                                        );
                                      },
                                    );
                                  }

                                  if (datePicked2Date != null &&
                                      datePicked2Time != null) {
                                    safeSetState(() {
                                      model.datePicked2 = DateTime(
                                        datePicked2Date.year,
                                        datePicked2Date.month,
                                        datePicked2Date.day,
                                        datePicked2Time!.hour,
                                        datePicked2Time.minute,
                                      );
                                    });
                                  }
                                  safeSetState(() {
                                    model.textController2?.text =
                                        dateTimeFormat(
                                      'dd/MM/yyyy HH:mm:ss',
                                      model.datePicked2,
                                      locale: FFLocalizations.of(context)
                                          .languageCode,
                                    );
                                    model.textController2?.selection =
                                        TextSelection.collapsed(
                                            offset: model
                                                .textController2!.text.length);
                                  });
                                },
                                child: Container(
                                  width: double.infinity,
                                  height: 80.0,
                                  decoration: BoxDecoration(
                                    borderRadius: BorderRadius.circular(8.0),
                                  ),
                                ),
                              ),
                            ),
                          ],
                        ),
                      ),
                    ],
                  ),
                ]),
                Column(
                  mainAxisSize: MainAxisSize.max,
                  children: [
                    Align(
                      alignment: const AlignmentDirectional(-1.0, 0.0),
                      child: Padding(
                        padding: const EdgeInsetsDirectional.fromSTEB(
                            20.0, 24.0, 0.0, 30.0),
                        child: Text(
                          FFLocalizations.of(context).getText(
                            'u0jocx7e',
                          ),
                          textAlign: TextAlign.start,
                          style: FlutterFlowTheme.of(context)
                              .bodyMedium
                              .override(
                                fontFamily: FlutterFlowTheme.of(context)
                                    .bodyMediumFamily,
                                letterSpacing: 0.0,
                                fontWeight: FontWeight.bold,
                                useGoogleFonts: GoogleFonts.asMap().containsKey(
                                    FlutterFlowTheme.of(context)
                                        .bodyMediumFamily),
                                fontSize: limitedSubHeaderFontSize,
                              ),
                        ),
                      ),
                    ),
                    if (model.visitorJsonList.isNotEmpty)
                      Builder(
                        builder: (context) {
                          final visitorListView =
                              model.visitorJsonList.map((e) => e).toList();
                          return ListView.separated(
                            padding: const EdgeInsets.fromLTRB(
                              0,
                              0,
                              20,
                              20,
                            ),
                            shrinkWrap: true,
                            scrollDirection: Axis.vertical,
                            itemCount: visitorListView.length,
                            separatorBuilder: (_, __) =>
                                const SizedBox(height: 5.0),
                            itemBuilder: (context, visitorListViewIndex) {
                              final visitorListViewItem =
                                  visitorListView[visitorListViewIndex];
                              return Padding(
                                padding:
                                    const EdgeInsets.symmetric(horizontal: 30),
                                child: Container(
                                  width: MediaQuery.of(context).size.width,
                                  height: 70.0,
                                  decoration: BoxDecoration(
                                    color: FlutterFlowTheme.of(context)
                                        .primaryBackground,
                                  ),
                                  child: Row(
                                    mainAxisSize: MainAxisSize.max,
                                    mainAxisAlignment: MainAxisAlignment.start,
                                    children: [
                                      Container(
                                        width: 50.0,
                                        height: 50.0,
                                        clipBehavior: Clip.antiAlias,
                                        decoration: const BoxDecoration(
                                          shape: BoxShape.circle,
                                        ),
                                        child: CachedNetworkImage(
                                          fadeInDuration:
                                              const Duration(milliseconds: 500),
                                          fadeOutDuration:
                                              const Duration(milliseconds: 500),
                                          imageUrl:
                                              "https://freaccess.com.br/freaccess/getImage.php?devUUID=${model.devUUID}&userUUID=${model.userUUID}&cliID=${model.cliUUID}&atividade=getFoto&Documento=${getJsonField(visitorListViewItem, r'''$.VTE_DOCUMENTO''').toString()}&tipo=E",
                                          fit: BoxFit.cover,
                                        ),
                                      ),
                                      Expanded(
                                        child: Padding(
                                          padding: const EdgeInsets.symmetric(
                                              horizontal: 8.0),
                                          child: Text(
                                            getJsonField(visitorListViewItem,
                                                    r'''$.VTE_NOME''')
                                                .toString(),
                                            style: FlutterFlowTheme.of(context)
                                                .bodyMedium
                                                .override(
                                                  fontFamily:
                                                      FlutterFlowTheme.of(
                                                              context)
                                                          .bodyMediumFamily,
                                                  letterSpacing: 0.0,
                                                  useGoogleFonts: GoogleFonts
                                                          .asMap()
                                                      .containsKey(
                                                          FlutterFlowTheme.of(
                                                                  context)
                                                              .bodyMediumFamily),
                                                ),
                                            overflow: TextOverflow.ellipsis,
                                          ),
                                        ),
                                      ),
                                      IconButton(
                                        onPressed: () async {
                                          safeSetState(() {
                                            model.removeFromVisitorJsonList(
                                                visitorListViewItem);
                                            if (model.visitorJsonList.isEmpty) {
                                              model.visitorStrList = '';
                                            }
                                          });
                                        },
                                        icon: const Icon(Icons.close),
                                      ),
                                    ],
                                  ),
                                ),
                              );
                            },
                          );
                        },
                      ),
                    Stack(
                      children: [
                        GestureDetector(
                          onTap: () async {
                            safeSetState(() {
                              _isLoading = true;
                            });

                            await showModalBottomSheet(
                              isScrollControlled: true,
                              isDismissible: true,
                              backgroundColor: FlutterFlowTheme.of(context)
                                  .primaryBackground,
                              enableDrag: true,
                              context: context,
                              builder: (context) {
                                return GestureDetector(
                                  onTap: () => model.unfocusNode.canRequestFocus
                                      ? FocusScope.of(context)
                                          .requestFocus(model.unfocusNode)
                                      : FocusScope.of(context).unfocus(),
                                  child: SizedBox(
                                    height: MediaQuery.of(context).size.height *
                                        0.8,
                                    width: MediaQuery.of(context).size.width,
                                    child: Padding(
                                      padding: MediaQuery.viewInsetsOf(context),
                                      child:
                                          VisitorSearchModalTemplateComponentWidget(
                                        getVisitors: (visitorsParam) async {
                                          model.visitorJsonList = visitorsParam!
                                              .toList()
                                              .cast<dynamic>();
                                          safeSetState(() {});
                                        },
                                        getDocs: (docsParam) async {
                                          model.visitorStrList =
                                              strListToStr(docsParam!.toList());
                                          safeSetState(() {});
                                        },
                                      ),
                                    ),
                                  ),
                                );
                              },
                            ).then((value) => safeSetState(() {
                                  _isLoading = false;
                                }));
                          },
                          child: Center(
                            child: Container(
                              width: MediaQuery.of(context).size.width * 0.8,
                              height: 120,
                              decoration: BoxDecoration(
                                borderRadius: BorderRadius.circular(8.0),
                                border: Border.all(
                                  color:
                                      FlutterFlowTheme.of(context).customColor6,
                                  width: 1.0,
                                ),
                              ),
                              child: Column(
                                mainAxisSize: MainAxisSize.max,
                                mainAxisAlignment: MainAxisAlignment.center,
                                children: [
                                  _isLoading
                                      ? SizedBox(
                                          width: 30.0,
                                          height: 30.0,
                                          child: CircularProgressIndicator(
                                            valueColor:
                                                AlwaysStoppedAnimation<Color>(
                                              FlutterFlowTheme.of(context)
                                                  .primary,
                                            ),
                                          ),
                                        )
                                      : Icon(
                                          Icons.add,
                                          color: FlutterFlowTheme.of(context)
                                              .primary,
                                          size: 30.0,
                                        ),
                                  Padding(
                                    padding:
                                        const EdgeInsets.fromLTRB(0, 15, 0, 0),
                                    child: Text(
                                      FFLocalizations.of(context).getText(
                                        'r8soavtz',
                                      ),
                                      textAlign: TextAlign.center,
                                      style: FlutterFlowTheme.of(context)
                                          .titleSmall
                                          .override(
                                            fontFamily:
                                                FlutterFlowTheme.of(context)
                                                    .titleSmallFamily,
                                            color: FlutterFlowTheme.of(context)
                                                .primaryText,
                                            fontSize: limitedInputFontSize,
                                            letterSpacing: 0.0,
                                            useGoogleFonts: GoogleFonts.asMap()
                                                .containsKey(
                                                    FlutterFlowTheme.of(context)
                                                        .titleSmallFamily),
                                          ),
                                    ),
                                  )
                                ],
                              ),
                            ),
                          ),
                        ),
                      ],
                    ),
                  ],
                ),
                Column(
                  mainAxisSize: MainAxisSize.max,
                  children: [
                    Align(
                      alignment: const AlignmentDirectional(-1.0, 0.0),
                      child: Padding(
                        padding: const EdgeInsetsDirectional.fromSTEB(
                            20.0, 24.0, 0.0, 24.0),
                        child: Text(
                          FFLocalizations.of(context).getText(
                            '0meymh6u',
                          ),
                          textAlign: TextAlign.start,
                          style: FlutterFlowTheme.of(context)
                              .bodyMedium
                              .override(
                                fontFamily: FlutterFlowTheme.of(context)
                                    .bodyMediumFamily,
                                letterSpacing: 0.0,
                                fontWeight: FontWeight.bold,
                                useGoogleFonts: GoogleFonts.asMap().containsKey(
                                    FlutterFlowTheme.of(context)
                                        .bodyMediumFamily),
                                fontSize: limitedSubHeaderFontSize,
                              ),
                        ),
                      ),
                    ),
                    Column(
                      children: [
                        Row(
                          mainAxisSize: MainAxisSize.max,
                          children: [
                            Expanded(
                              child: Padding(
                                padding: const EdgeInsetsDirectional.fromSTEB(
                                    24.0, 0.0, 24.0, 0.0),
                                child: Container(
                                  width:
                                      MediaQuery.of(context).size.width * 0.8,
                                  height: scaledSizedBoxSize * 0.5,
                                  decoration: const BoxDecoration(),
                                  child: FutureBuilder<ApiCallResponse>(
                                    future: PhpGroup.getDadosCall.call(),
                                    builder: (context, snapshot) {
                                      if (!snapshot.hasData) {
                                        return Center(
                                          child: SizedBox(
                                            width: 50.0,
                                            height: 50.0,
                                            child: SpinKitCircle(
                                              color:
                                                  FlutterFlowTheme.of(context)
                                                      .primary,
                                              size: 50.0,
                                            ),
                                          ),
                                        );
                                      }

                                      final reasonsJsonList =
                                          PhpGroup.getDadosCall.reasonsJsonList(
                                              snapshot.data!.jsonBody);
                                      final reasonsOptionLabels = PhpGroup
                                          .getDadosCall
                                          .reasonsMotDescStrList(
                                              snapshot.data!.jsonBody);

                                      model.processDropDown1(reasonsJsonList!);

                                      return FlutterFlowDropDown<String>(
                                        fillColor: FlutterFlowTheme.of(context)
                                            .primaryBackground,
                                        controller:
                                            model.dropDownValueController1,
                                        options: model.reasonsDropDown1,
                                        optionLabels: reasonsOptionLabels,
                                        onChanged: (val) => safeSetState(
                                            () => model.dropDownValue1 = val),
                                        width: double.infinity,
                                        height: double.infinity,
                                        textStyle: FlutterFlowTheme.of(context)
                                            .bodyMedium
                                            .override(
                                              fontFamily:
                                                  FlutterFlowTheme.of(context)
                                                      .bodyMediumFamily,
                                              letterSpacing: 0.0,
                                              useGoogleFonts: GoogleFonts
                                                      .asMap()
                                                  .containsKey(
                                                      FlutterFlowTheme.of(
                                                              context)
                                                          .bodyMediumFamily),
                                              fontSize: limitedInputFontSize,
                                            ),
                                        hintText: FFLocalizations.of(context)
                                            .getVariableText(
                                                enText: 'Reason for Visit',
                                                ptText: 'Motivo da Visita'),
                                        icon: Icon(
                                          Icons.keyboard_arrow_down_rounded,
                                          color: FlutterFlowTheme.of(context)
                                              .accent1,
                                          size: 24.0,
                                        ),
                                        elevation: 2.0,
                                        borderColor:
                                            FlutterFlowTheme.of(context)
                                                .customColor6,
                                        borderWidth: 0.5,
                                        borderRadius: 10.0,
                                        margin: const EdgeInsetsDirectional
                                            .fromSTEB(16.0, 0.0, 16.0, 0.0),
                                        hidesUnderline: true,
                                        isOverButton: true,
                                        isSearchable: false,
                                        isMultiSelect: false,
                                      );
                                    },
                                  ),
                                ),
                              ),
                            ),
                          ],
                        ),
                        if (model.dropDownValue1 == '')
                          Row(
                            mainAxisSize: MainAxisSize.max,
                            mainAxisAlignment: MainAxisAlignment.start,
                            children: [
                              Expanded(
                                child: Padding(
                                  padding: const EdgeInsets.symmetric(
                                      horizontal: 30.0, vertical: 5.0),
                                  child: Text(
                                      FFLocalizations.of(context)
                                          .getVariableText(
                                        enText: 'Select a reason for the visit',
                                        ptText: 'Selecione um motivo da visita',
                                      ),
                                      overflow: TextOverflow.ellipsis,
                                      maxLines: 2,
                                      style: TextStyle(
                                          color: FlutterFlowTheme.of(context)
                                              .customColor6,
                                          fontSize: limitedInputFontSize)),
                                ),
                              ),
                            ],
                          ),
                      ],
                    ),
                    Column(
                      children: [
                        Row(
                          mainAxisSize: MainAxisSize.max,
                          children: [
                            Expanded(
                              child: Padding(
                                padding: const EdgeInsetsDirectional.fromSTEB(
                                    24.0, 0.0, 24.0, 0.0),
                                child: Container(
                                  width: 100.0,
                                  height: scaledSizedBoxSize * 0.5,
                                  decoration: const BoxDecoration(),
                                  child: FutureBuilder<ApiCallResponse>(
                                    future: PhpGroup.getDadosCall.call(),
                                    builder: (context, snapshot) {
                                      if (!snapshot.hasData) {
                                        return Center(
                                          child: SizedBox(
                                            width: 50.0,
                                            height: 50.0,
                                            child: SpinKitCircle(
                                              color:
                                                  FlutterFlowTheme.of(context)
                                                      .primary,
                                              size: 50.0,
                                            ),
                                          ),
                                        );
                                      }

                                      final lavelsJsonList =
                                          PhpGroup.getDadosCall.levelJsonList(
                                              snapshot.data!.jsonBody);
                                      final lavelsOptionLabels = PhpGroup
                                          .getDadosCall
                                          .levelNACDescricaoStrList(
                                              snapshot.data!.jsonBody);
                                      model.processDropDown2(lavelsJsonList!);

                                      return FlutterFlowDropDown<String>(
                                        controller:
                                            model.dropDownValueController2,
                                        options: model.lavelsDropDown2,
                                        optionLabels: lavelsOptionLabels,
                                        onChanged: (val) => safeSetState(
                                            () => model.dropDownValue2 = val),
                                        width: double.infinity,
                                        height: double.infinity,
                                        textStyle: FlutterFlowTheme.of(context)
                                            .bodyMedium
                                            .override(
                                              fontFamily:
                                                  FlutterFlowTheme.of(context)
                                                      .bodyMediumFamily,
                                              letterSpacing: 0.0,
                                              useGoogleFonts: GoogleFonts
                                                      .asMap()
                                                  .containsKey(
                                                      FlutterFlowTheme.of(
                                                              context)
                                                          .bodyMediumFamily),
                                              fontSize: limitedInputFontSize,
                                            ),
                                        hintText: FFLocalizations.of(context)
                                            .getVariableText(
                                          enText: 'Level of access',
                                          ptText: 'Nível de acesso',
                                        ),
                                        icon: Icon(
                                          Icons.keyboard_arrow_down_rounded,
                                          color: FlutterFlowTheme.of(context)
                                              .accent1,
                                          size: 24.0,
                                        ),
                                        elevation: 2.0,
                                        borderColor:
                                            FlutterFlowTheme.of(context)
                                                .customColor6,
                                        borderWidth: 0.5,
                                        borderRadius: 10.0,
                                        margin: const EdgeInsetsDirectional
                                            .fromSTEB(16.0, 0.0, 16.0, 0.0),
                                        hidesUnderline: true,
                                        fillColor: FlutterFlowTheme.of(context)
                                            .primaryBackground,
                                        isOverButton: true,
                                        isSearchable: false,
                                        isMultiSelect: false,
                                      );
                                    },
                                  ),
                                ),
                              ),
                            ),
                          ],
                        ),
                        if (model.dropDownValue2 == '')
                          Row(
                            mainAxisSize: MainAxisSize.max,
                            mainAxisAlignment: MainAxisAlignment.start,
                            children: [
                              Expanded(
                                child: Padding(
                                  padding: const EdgeInsets.symmetric(
                                      horizontal: 30.0, vertical: 5.0),
                                  child: Text(
                                      FFLocalizations.of(context)
                                          .getVariableText(
                                        enText: 'Select a level of access',
                                        ptText: 'Selecione um nível de acesso',
                                      ),
                                      overflow: TextOverflow.ellipsis,
                                      maxLines: 2,
                                      style: TextStyle(
                                          color: FlutterFlowTheme.of(context)
                                              .customColor6,
                                          fontSize: limitedInputFontSize)),
                                ),
                              ),
                            ],
                          ),
                      ],
                    ),
                  ].divide(const SizedBox(height: 10.0)),
                ),
                Column(
                  mainAxisSize: MainAxisSize.max,
                  children: [
                    Align(
                      alignment: const AlignmentDirectional(-1.0, 0.0),
                      child: Padding(
                        padding: const EdgeInsetsDirectional.fromSTEB(
                            20.0, 24.0, 0.0, 24.0),
                        child: Text(
                          FFLocalizations.of(context).getText(
                            '8rk26eg1',
                          ),
                          textAlign: TextAlign.start,
                          style: FlutterFlowTheme.of(context)
                              .bodyMedium
                              .override(
                                fontFamily: FlutterFlowTheme.of(context)
                                    .bodyMediumFamily,
                                letterSpacing: 0.0,
                                fontWeight: FontWeight.bold,
                                useGoogleFonts: GoogleFonts.asMap().containsKey(
                                    FlutterFlowTheme.of(context)
                                        .bodyMediumFamily),
                                fontSize: limitedSubHeaderFontSize,
                              ),
                        ),
                      ),
                    ),
                    Padding(
                      padding: const EdgeInsetsDirectional.fromSTEB(
                          30.0, 0.0, 30.0, 20.0),
                      child: Row(
                        mainAxisSize: MainAxisSize.max,
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        crossAxisAlignment: CrossAxisAlignment.center,
                        children: [
                          Flexible(
                            child: Text(
                              FFLocalizations.of(context).getText(
                                'lgv0q5ht',
                              ),
                              textAlign: TextAlign.start,
                              style: FlutterFlowTheme.of(context)
                                  .bodyMedium
                                  .override(
                                    fontFamily: FlutterFlowTheme.of(context)
                                        .bodyMediumFamily,
                                    letterSpacing: 0.0,
                                    useGoogleFonts: GoogleFonts.asMap()
                                        .containsKey(
                                            FlutterFlowTheme.of(context)
                                                .bodyMediumFamily),
                                    fontSize: limitedInputFontSize,
                                  ),
                            ),
                          ),
                          Switch(
                            value: model.switchValue!,
                            onChanged: (newValue) async {
                              safeSetState(() => model.switchValue = newValue);
                            },
                            focusColor: FlutterFlowTheme.of(context).primary,
                            trackColor: WidgetStateProperty.resolveWith(
                              (states) {
                                if (states.contains(WidgetState.disabled)) {
                                  return FlutterFlowTheme.of(context).alternate;
                                }
                                return FlutterFlowTheme.of(context).alternate;
                              },
                            ),
                            hoverColor:
                                FlutterFlowTheme.of(context).primaryBackground,
                            overlayColor: WidgetStateProperty.resolveWith(
                              (states) {
                                if (states.contains(WidgetState.disabled)) {
                                  return FlutterFlowTheme.of(context).accent4;
                                }
                                return FlutterFlowTheme.of(context)
                                    .primaryBackground;
                              },
                            ),
                            trackOutlineColor: WidgetStateProperty.resolveWith(
                              (states) {
                                if (states.contains(WidgetState.disabled)) {
                                  return FlutterFlowTheme.of(context).accent4;
                                }
                                return FlutterFlowTheme.of(context)
                                    .primaryBackground;
                              },
                            ),
                            activeColor: FlutterFlowTheme.of(context).success,
                            activeTrackColor:
                                FlutterFlowTheme.of(context).primaryBackground,
                            inactiveTrackColor:
                                FlutterFlowTheme.of(context).primaryBackground,
                            inactiveThumbColor:
                                FlutterFlowTheme.of(context).error,
                          ),
                        ],
                      ),
                    ),
                  ],
                ),
                Column(
                  mainAxisSize: MainAxisSize.max,
                  children: [
                    Align(
                      alignment: const AlignmentDirectional(-1.0, 0.0),
                      child: Padding(
                        padding: const EdgeInsetsDirectional.fromSTEB(
                            20.0, 0.0, 0.0, 24.0),
                        child: Text(
                          FFLocalizations.of(context).getText(
                            'eftcs67c',
                          ),
                          textAlign: TextAlign.start,
                          style: FlutterFlowTheme.of(context)
                              .bodyMedium
                              .override(
                                fontFamily: FlutterFlowTheme.of(context)
                                    .bodyMediumFamily,
                                letterSpacing: 0.0,
                                fontWeight: FontWeight.w600,
                                useGoogleFonts: GoogleFonts.asMap().containsKey(
                                    FlutterFlowTheme.of(context)
                                        .bodyMediumFamily),
                                fontSize: limitedBodyFontSize,
                              ),
                        ),
                      ),
                    ),
                    Padding(
                      padding: const EdgeInsetsDirectional.fromSTEB(
                          24.0, 0.0, 24.0, 0.0),
                      child: SizedBox(
                        width: double.infinity,
                        child: TextFormField(
                          controller: model.textController3,
                          focusNode: model.textFieldFocusNode3,
                          autofocus: false,
                          cursorColor: FlutterFlowTheme.of(context).primary,
                          textInputAction: TextInputAction.next,
                          obscureText: false,
                          decoration: InputDecoration(
                            isDense: false,
                            labelText: FFLocalizations.of(context).getText(
                              't0q2vuup',
                            ),
                            labelStyle: FlutterFlowTheme.of(context)
                                .labelMedium
                                .override(
                                  fontFamily: FlutterFlowTheme.of(context)
                                      .labelMediumFamily,
                                  color:
                                      FlutterFlowTheme.of(context).primaryText,
                                  letterSpacing: 0.0,
                                  useGoogleFonts: GoogleFonts.asMap()
                                      .containsKey(FlutterFlowTheme.of(context)
                                          .labelMediumFamily),
                                  fontSize: limitedInputFontSize,
                                ),
                            hintText: FFLocalizations.of(context).getText(
                              'w18iztdm',
                            ),
                            hintStyle: FlutterFlowTheme.of(context)
                                .labelMedium
                                .override(
                                  fontFamily: FlutterFlowTheme.of(context)
                                      .labelMediumFamily,
                                  color:
                                      FlutterFlowTheme.of(context).primaryText,
                                  letterSpacing: 0.0,
                                  useGoogleFonts: GoogleFonts.asMap()
                                      .containsKey(FlutterFlowTheme.of(context)
                                          .labelMediumFamily),
                                  fontSize: limitedInputFontSize,
                                ),
                            enabledBorder: OutlineInputBorder(
                              borderSide: BorderSide(
                                color:
                                    FlutterFlowTheme.of(context).customColor6,
                                width: 0.5,
                              ),
                              borderRadius: BorderRadius.circular(10.0),
                            ),
                            focusedBorder: OutlineInputBorder(
                              borderSide: BorderSide(
                                color: FlutterFlowTheme.of(context).primary,
                                width: 0.5,
                              ),
                              borderRadius: BorderRadius.circular(10.0),
                            ),
                            errorBorder: OutlineInputBorder(
                              borderSide: BorderSide(
                                color: FlutterFlowTheme.of(context).error,
                                width: 0.5,
                              ),
                              borderRadius: BorderRadius.circular(10.0),
                            ),
                            focusedErrorBorder: OutlineInputBorder(
                              borderSide: BorderSide(
                                color: FlutterFlowTheme.of(context).error,
                                width: 0.5,
                              ),
                              borderRadius: BorderRadius.circular(10.0),
                            ),
                            suffixIcon: Icon(
                              Icons.text_fields,
                              color: FlutterFlowTheme.of(context).accent1,
                            ),
                          ),
                          style: FlutterFlowTheme.of(context)
                              .bodyMedium
                              .override(
                                fontFamily: FlutterFlowTheme.of(context)
                                    .bodyMediumFamily,
                                color: FlutterFlowTheme.of(context).primaryText,
                                letterSpacing: 0.0,
                                useGoogleFonts: GoogleFonts.asMap().containsKey(
                                    FlutterFlowTheme.of(context)
                                        .bodyMediumFamily),
                                fontSize: limitedInputFontSize,
                              ),
                          textAlign: TextAlign.start,
                          maxLines: null,
                          maxLength: 80,
                          validator: model.textController3Validator
                              .asValidator(context),
                        ),
                      ),
                    ),
                  ],
                ),
                Container(
                  width: 100.0,
                  height: 54.0,
                  decoration: const BoxDecoration(),
                ),
              ],
            ),
          ),
          FFButtonWidget(
            text: FFLocalizations.of(context).getVariableText(
              enText: 'Schedule',
              ptText: 'Agendar',
            ),
            onPressed: model.isValid()
                ? () async {
                    Future<void> scheduleVisit() async {
                      await PhpGroup.postScheduleVisitCall
                          .call(
                            devDesc: model.textController3.text,
                            idVisitante: model.visitorStrList,
                            dtInicio: model
                                .convertDateFormat(model.textController1.text),
                            dtFim: model
                                .convertDateFormat(model.textController2.text),
                            unica: model.switchValue == true ? 'S' : 'N',
                            idMotivo: extractIdToStr(model.dropDownValue1!),
                            idNAC: extractIdToStr(model.dropDownValue2!),
                            obs: model.textController3.text,
                          )
                          .catchError((e) async =>
                              await DialogUtil.errorDefault(context))
                          .then((value) async {
                        if (PhpGroup.postScheduleVisitCall.error(
                              (value.jsonBody ?? ''),
                            ) ==
                            false) {
                          context.pop();

                          model.dropDownValue1 = null;
                          model.dropDownValue2 = null;
                          model.dropDownValueController1 =
                              FormFieldController<String>('');
                          model.dropDownValueController2 =
                              FormFieldController<String>('');
                          model.visitorStrList = '';
                          model.visitorJsonList = [];

                          ToastUtil.showToast(
                            message: FFLocalizations.of(context)
                                .getVariableText(
                                    ptText: 'Visitante já adicionado!',
                                    enText: 'Visitor already added!'),
                            gravity: ToastGravity.TOP,
                            backgroundColor: Colors.green,
                            fontSize:
                                LimitedFontSizeUtil.getBodyFontSize(context),
                          );

                          await ShareUtil.showShare(value.jsonBody);
                        } else {
                          final message = value.jsonBody['error_msg'];
                          await DialogUtil.error(context, message);
                          context.pop();
                        }
                      });

                      safeSetState(() {});
                    }

                    if (model.visitorJsonList.length > 1) {
                      final title = FFLocalizations.of(context).getVariableText(
                        ptText: 'Cadastrar Múltiplos Visitantes',
                        enText: 'Register Multiple Visitors',
                      );
                      final content =
                          FFLocalizations.of(context).getVariableText(
                        ptText:
                            'Você deseja agendar uma visita para ${model.visitorJsonList.length} visitantes?',
                        enText:
                            'Do you want to schedule a visit for ${model.visitorJsonList.length} visitors?',
                      );

                      showAlertDialog(context, title, content, scheduleVisit);
                    } else {
                      await showDialog(
                        context: context,
                        builder: (context) {
                          return GestureDetector(
                            onTap: () => model.unfocusNode.canRequestFocus
                                ? FocusScope.of(context)
                                    .requestFocus(model.unfocusNode)
                                : FocusScope.of(context).unfocus(),
                            child: Dialog(
                              alignment: Alignment.topCenter,
                              child: SizedBox(
                                child: DetailsComponentWidget(
                                  buttons: [
                                    FFButtonWidget(
                                      text: FFLocalizations.of(context)
                                          .getVariableText(
                                        enText: 'Done',
                                        ptText: 'Confirmar',
                                      ),
                                      icon: const Icon(Icons.done),
                                      onPressed: scheduleVisit,
                                      options: FFButtonOptions(
                                        width: 130,
                                        height: 40,
                                        color: FlutterFlowTheme.of(context)
                                            .primaryBackground,
                                        elevation: 0,
                                        textStyle: TextStyle(
                                          color: FlutterFlowTheme.of(context)
                                              .primaryText,
                                          fontSize: 16 /
                                              MediaQuery.textScalerOf(context)
                                                  .scale(1),
                                        ),
                                        borderSide: BorderSide(
                                          color: FlutterFlowTheme.of(context)
                                              .primaryBackground,
                                          width: 1,
                                        ),
                                      ),
                                    ),
                                  ],
                                  imagePath:
                                      'https://freaccess.com.br/freaccess/getImage.php?cliID=${model.cliUUID}&atividade=getFoto&Documento=${model.visitorJsonList[0]['VTE_DOCUMENTO'] ?? ''}&tipo=E',
                                  labelsHashMap: {
                                    'Nome': model.visitorJsonList[0]
                                        ['VTE_NOME'],
                                    'Start': model.textController1.text,
                                    'End': model.textController2.text,
                                    'Reason': (RegExp(
                                                r'MOT_DESCRICAO:\s*([^,]+)')
                                            .firstMatch(
                                                model.dropDownValue1.toString())
                                            ?.group(1)
                                            .toString()) ??
                                        '',
                                    'Level': (RegExp(
                                                r'NAC_DESCRICAO:\s*([^,]+)')
                                            .firstMatch(
                                                model.dropDownValue2.toString())
                                            ?.group(1)
                                            .toString()) ??
                                        '',
                                    'Single Visit':
                                        model.switchValue == true ? 'S' : 'N',
                                    if (model.textController3.text.isNotEmpty)
                                      'Observation': model.textController3.text,
                                  },
                                  statusHashMap: [
                                    Map<String, Color>.from({
                                      FFLocalizations.of(context)
                                          .getVariableText(
                                        ptText: 'Inativo',
                                        enText: 'Inactive',
                                      ): FlutterFlowTheme.of(context).success,
                                    }),
                                  ],
                                  onTapCardItemAction: () async {},
                                ),
                              ),
                            ),
                          );
                        },
                      ).then((value) => safeSetState(() {}));
                    }
                  }
                : null,
            options: FFButtonOptions(
                height: 30 * MediaQuery.textScalerOf(context).scale(1),
                width: MediaQuery.of(context).size.width * 0.5,
                color: FlutterFlowTheme.of(context).primary,
                textStyle: FlutterFlowTheme.of(context).subtitle2.override(
                      fontFamily: 'Nunito',
                      color: FlutterFlowTheme.of(context).primaryBackground,
                      fontSize: limitedInputFontSize,
                      fontWeight: FontWeight.w500,
                    ),
                borderRadius: const BorderRadius.only(
                  bottomLeft: Radius.circular(15.0),
                  bottomRight: Radius.circular(15.0),
                  topLeft: Radius.circular(15.0),
                  topRight: Radius.circular(15.0),
                ),
                disabledColor: FlutterFlowTheme.of(context).customColor5),
            showLoadingIndicator: true,
          ),
        ].addToEnd(const SizedBox(height: 30.0)),
      ),
    );
  }
}
