import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:hub/components/atomic_components/shared_components_atoms/appbar.dart'; import 'package:hub/components/atomic_components/shared_components_atoms/custom_datepicker.dart'; import 'package:hub/components/atomic_components/shared_components_atoms/custom_input.dart'; import 'package:hub/components/atomic_components/shared_components_atoms/custom_select.dart'; import 'package:hub/components/atomic_components/shared_components_atoms/media_upload_button.dart'; import 'package:hub/components/atomic_components/shared_components_atoms/tabview.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/internationalization.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; import 'package:hub/flutter_flow/upload_data.dart'; import 'package:hub/pages/pets_page/pets_page_model.dart'; class PetsPageWidget extends StatefulWidget { PetsPageWidget({super.key}); @override State createState() => _PetsPageWidgetState(); } class _PetsPageWidgetState extends State with SingleTickerProviderStateMixin { late PetsPageModel _model; @override void initState() { super.initState(); _model = PetsPageModel(); _model.tabBarController = TabController(length: 2, vsync: this); _model.textControllerName ??= TextEditingController(); _model.textFieldFocusName ??= FocusNode(); _model.textControllerSpecies ??= TextEditingController(); } @override void dispose() { _model.tabBarController.dispose(); super.dispose(); } void _onTextChanged() { setState(() {}); } @override Widget build(BuildContext context) { return Scaffold( appBar: appBarPets(context), backgroundColor: FlutterFlowTheme.of(context).primaryBackground, body: tabViewPets( context, _model, _model.tabBarController, safeSetState, setState)); } } PreferredSizeWidget appBarPets(BuildContext context) { return AppBarUtil(title: 'Pets', onBackButtonPressed: () => context.pop()); } Widget tabViewPets(BuildContext context, PetsPageModel _model, controller, Function safeSetState, Function setState) { return TabViewUtil( context: context, model: _model, labelTab1: 'Cadastrar', labelTab2: 'Consultar', controller: controller, widget1: formAddPets(context, _model, safeSetState, setState), widget2: Center(child: Text('Consultar')), ); } Widget formAddPets(BuildContext context, PetsPageModel _model, Function safeSetState, Function setState) { bool _isFormValid(BuildContext context) { log('Validando Formulário'); if (_model.uploadedLocalFile.bytes?.isEmpty ?? true) { return false; } if (_model.textControllerName.text.isEmpty) { return false; } return true; } final _formKey = GlobalKey(); return SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.max, children: [ Align( alignment: const AlignmentDirectional(-1.0, 0.0), child: Padding( padding: const EdgeInsetsDirectional.fromSTEB(24.0, 20, 0.0, 15), child: Text( FFLocalizations.of(context).getVariableText( ptText: 'Preencha o formulário com os dados do seu Pet', enText: 'Fill out the form with your Pet\'s data', ), 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), ), ), ), ), Form( key: _formKey, autovalidateMode: AutovalidateMode.onUserInteraction, child: Column( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Padding( padding: const EdgeInsets.fromLTRB(0, 10, 0, 20), child: MediaUploadButtonUtil( uploadedFile: _model.uploadedLocalFile, isUploading: _model.isDataUploading, labelText: FFLocalizations.of(context).getVariableText( ptText: 'Clique para adicionar a foto de seu Pet', enText: 'Click to add your Pet\'s photo'), ), ), CustomInputUtil( controller: _model.textControllerName, validator: _model.textControllerNameValidator.asValidator(context), labelText: FFLocalizations.of(context) .getVariableText(ptText: 'Nome', enText: 'Name'), hintText: FFLocalizations.of(context) .getVariableText(ptText: 'Nome', enText: 'Name'), suffixIcon: Icons.person, haveMaxLength: true, maxLength: 80, ), Padding( padding: const EdgeInsets.fromLTRB(0, 0, 0, 15), child: CustomInputUtil( controller: _model.textControllerSpecies, labelText: FFLocalizations.of(context).getVariableText( ptText: 'Espécie', enText: 'Species'), hintText: FFLocalizations.of(context).getVariableText( ptText: 'Espécie', enText: 'Species'), suffixIcon: Icons.pest_control, haveMaxLength: false, ), ), Padding( padding: const EdgeInsets.fromLTRB(0, 0, 0, 15), child: CustomInputUtil( controller: _model.textControllerRace, labelText: FFLocalizations.of(context) .getVariableText(ptText: 'Raça', enText: 'Race'), hintText: FFLocalizations.of(context) .getVariableText(ptText: 'Raça', enText: 'Race'), suffixIcon: Icons.pets, haveMaxLength: false, ), ), Padding( padding: const EdgeInsets.fromLTRB(0, 0, 0, 15), child: CustomInputUtil( controller: _model.textControllerColor, labelText: FFLocalizations.of(context) .getVariableText(ptText: 'Cor', enText: 'Color'), hintText: FFLocalizations.of(context) .getVariableText(ptText: 'Cor', enText: 'Color'), suffixIcon: Icons.invert_colors, haveMaxLength: false, ), ), Padding( padding: const EdgeInsets.fromLTRB(0, 0, 0, 15), child: CustomDatePickerUtil( controller: _model.textControllerData, focusNode: _model.textFieldFocusData, hintText: FFLocalizations.of(context).getVariableText( ptText: 'Data de Nascimento', enText: 'Birth Date'), dateFormat: 'dd/MM/yyyy HH:mm:ss', locale: FFLocalizations.of(context).languageCode, firstDate: DateTime(2000), lastDate: DateTime.now(), timePicker: false, validator: (value) { if (value == null || value.isEmpty) { return 'Por favor, selecione uma data'; } return null; }, ), ), Align( alignment: const AlignmentDirectional(-1.0, 0.0), child: Padding( padding: const EdgeInsetsDirectional.fromSTEB( 24.0, 0, 0.0, 15), child: Text( FFLocalizations.of(context).getVariableText( ptText: 'Selecione as opções disponíveis', enText: 'Select the available options', ), textAlign: TextAlign.start, style: FlutterFlowTheme.of(context).bodySmall.override( fontFamily: FlutterFlowTheme.of(context).bodySmallFamily, letterSpacing: 0.0, fontWeight: FontWeight.w600, useGoogleFonts: GoogleFonts.asMap().containsKey( FlutterFlowTheme.of(context) .bodyMediumFamily), ), ), ), ), Padding( padding: const EdgeInsets.fromLTRB(0, 0, 0, 15), child: CustomSelect( options: const ['MAC', 'FEM'], controller: _model.dropDownValueController1, optionsLabel: [ FFLocalizations.of(context) .getVariableText(ptText: 'Macho', enText: 'Male'), FFLocalizations.of(context).getVariableText( ptText: 'Fêmea', enText: 'Female') ], hintText: FFLocalizations.of(context).getVariableText( ptText: 'Selecione o gênero do Pet', enText: 'Select the gender of the Pet')), ), Padding( padding: const EdgeInsets.fromLTRB(0, 0, 0, 15), child: CustomSelect( options: const ['MIN', 'PEQ', 'MED', 'GRA', 'GIG'], controller: _model.dropDownValueController1, optionsLabel: [ FFLocalizations.of(context) .getVariableText(ptText: 'Mini', enText: 'Mini'), FFLocalizations.of(context).getVariableText( ptText: 'Pequeno', enText: 'Small'), FFLocalizations.of(context).getVariableText( ptText: 'Médio', enText: 'Medium'), FFLocalizations.of(context) .getVariableText(ptText: 'Grande', enText: 'Big'), FFLocalizations.of(context).getVariableText( ptText: 'Gigante', enText: 'Giant'), ], hintText: FFLocalizations.of(context).getVariableText( ptText: 'Selecione o porte do Pet', enText: 'Select the size of the Pet')), ), Align( alignment: const AlignmentDirectional(-1.0, 0.0), child: Padding( padding: const EdgeInsetsDirectional.fromSTEB( 24.0, 0, 0.0, 15), child: Text( FFLocalizations.of(context).getVariableText( ptText: 'Você tem alguma observação sobre o seu Pet?', enText: 'Do you have any observations about your Pet?', ), textAlign: TextAlign.start, style: FlutterFlowTheme.of(context).bodySmall.override( fontFamily: FlutterFlowTheme.of(context).bodySmallFamily, letterSpacing: 0.0, fontWeight: FontWeight.w600, useGoogleFonts: GoogleFonts.asMap().containsKey( FlutterFlowTheme.of(context) .bodyMediumFamily), ), ), ), ), CustomInputUtil( controller: _model.textControllerObservation, labelText: FFLocalizations.of(context).getVariableText( ptText: 'Escreva as suas observações aqui...', enText: 'Write your observations here...'), hintText: FFLocalizations.of(context).getVariableText( ptText: 'Escreva as suas observações aqui...', enText: 'Write your observations here...'), suffixIcon: Icons.text_fields, haveMaxLength: true, maxLength: 80, ), ElevatedButton( onPressed: _isFormValid(context) ? () {} : () {}, child: Text('Cadastrar')), ])), ], ), ); }