import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; class CustomDatePickerUtil extends StatefulWidget { final TextEditingController? controller; final String hintText; final String dateFormat; final String locale; final DateTime? initialDate; final DateTime firstDate; final DateTime lastDate; final FormFieldValidator? validator; const CustomDatePickerUtil({ Key? key, this.controller, required this.hintText, required this.dateFormat, required this.locale, this.initialDate, required this.firstDate, required this.lastDate, this.validator, }) : super(key: key); @override _CustomDatePickerState createState() => _CustomDatePickerState(); } class _CustomDatePickerState extends State { DateTime? _selectedDate; TimeOfDay? _selectedTime; @override void initState() { super.initState(); _selectedDate = widget.initialDate; } Future _selectDate(BuildContext context) async { final DateTime? pickedDate = await showDatePicker( context: context, initialDate: _selectedDate ?? DateTime.now(), firstDate: widget.firstDate, lastDate: widget.lastDate, 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, ); }, ); if (pickedDate != null) { final TimeOfDay? pickedTime = await showTimePicker( context: context, initialTime: TimeOfDay.fromDateTime(_selectedDate ?? DateTime.now()), 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 (pickedTime != null) { setState(() { _selectedDate = DateTime( pickedDate.year, pickedDate.month, pickedDate.day, pickedTime.hour, pickedTime.minute, ); widget.controller?.text = dateTimeFormat( widget.dateFormat, _selectedDate, locale: widget.locale, ); widget.controller?.selection = TextSelection.collapsed( offset: widget.controller!.text.length, ); }); } } } @override Widget build(BuildContext context) { return Row( mainAxisSize: MainAxisSize.max, children: [ SizedBox( width: MediaQuery.of(context).size.width, height: 60.0, child: Stack( children: [ Padding( padding: const EdgeInsetsDirectional.fromSTEB(24.0, 0.0, 24.0, 0.0), child: TextFormField( controller: widget.controller, readOnly: true, 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), ), hintText: widget.hintText, 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, ), 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), ), 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, ), textAlign: TextAlign.start, validator: widget.validator, ), ), 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: () => _selectDate(context), child: Container( width: double.infinity, height: 80.0, decoration: BoxDecoration( borderRadius: BorderRadius.circular(8.0), ), ), ), ), ], ), ), ], ); } }