Files
fcs/lib/pages/widgets/input_date.dart

136 lines
4.6 KiB
Dart
Raw Normal View History

2020-10-08 03:32:52 +06:30
import 'package:fcs/helpers/theme.dart';
import 'package:fcs/localization/app_translations.dart';
import 'package:fcs/pages/main/model/language_model.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
class InputDate extends StatelessWidget {
2024-01-23 16:28:08 +06:30
final String? labelTextKey;
final IconData? iconData;
2020-10-08 03:32:52 +06:30
final TextEditingController controller;
2021-09-10 14:25:37 +06:30
final FormFieldValidator<String>? validator;
2020-10-08 03:32:52 +06:30
final int maxLines;
final bool withBorder;
2021-09-10 14:25:37 +06:30
final Color? borderColor;
final TextInputType? textInputType;
2020-10-08 03:32:52 +06:30
final bool autoFocus;
final String dateFormatString;
2024-02-28 17:07:23 +06:30
final AutovalidateMode? autovalidateMode;
2020-10-08 03:32:52 +06:30
const InputDate(
2021-09-10 14:25:37 +06:30
{Key? key,
required this.labelTextKey,
required this.iconData,
required this.controller,
2020-10-08 03:32:52 +06:30
this.validator,
2024-02-28 17:07:23 +06:30
this.autovalidateMode,
2020-10-08 03:32:52 +06:30
this.maxLines = 1,
this.withBorder = false,
this.borderColor,
this.autoFocus = false,
this.dateFormatString = "dd MMM yyyy",
this.textInputType})
: super(key: key);
@override
Widget build(BuildContext context) {
var languageModel = Provider.of<LanguageModel>(context);
return Padding(
padding: const EdgeInsets.only(top: 15.0, bottom: 5),
child: TextFormField(
readOnly: true,
onTap: () async {
var dateFormatter = new DateFormat(dateFormatString);
FocusScope.of(context).unfocus();
var initialDate = DateTime.now();
if (controller.text != "") {
try {
initialDate = dateFormatter.parse(controller.text);
} catch (e) {} // ignore error
}
var d = await showDatePicker(
context: context,
firstDate: DateTime(0),
lastDate: DateTime(2050),
initialDate: initialDate,
builder: (context, child) {
return Theme(
data: Theme.of(context).copyWith(
colorScheme: ColorScheme.light(
background: primaryColor,
surfaceTint: Colors.white,
primary: primaryColor),
textButtonTheme: TextButtonThemeData(
style: TextButton.styleFrom(foregroundColor: primaryColor),
2024-01-30 17:24:28 +06:30
),
),
child: child!,
);
},
);
if (d != null) {
controller.text = dateFormatter.format(d);
}
},
controller: controller,
autofocus: autoFocus,
cursorColor: primaryColor,
style: textStyle,
maxLines: maxLines,
keyboardType: textInputType,
decoration: new InputDecoration(
// hintText: '',
hintStyle: TextStyle(
height: 1.5,
2020-10-08 03:32:52 +06:30
),
errorStyle: const TextStyle(color: dangerColor, fontSize: 12),
labelText: labelTextKey == null
? null
: AppTranslations.of(context)!.text(labelTextKey!),
labelStyle: languageModel.isEng
? newLabelStyle(color: Colors.black54, fontSize: 20)
: newLabelStyleMM(color: Colors.black54, fontSize: 20),
icon: iconData == null
? null
: Icon(
iconData,
color: primaryColor,
),
enabledBorder: withBorder
? OutlineInputBorder(
borderSide: BorderSide(color: primaryColor, width: 1.0),
)
: UnderlineInputBorder(
borderSide: BorderSide(color: primaryColor, width: 1.0)),
focusedBorder: withBorder
? OutlineInputBorder(
borderSide: BorderSide(color: primaryColor, width: 1.0),
)
: UnderlineInputBorder(
borderSide: BorderSide(color: primaryColor, width: 1.0)),
errorBorder: withBorder
? OutlineInputBorder(
borderSide:
BorderSide(color: borderColor ?? dangerColor, width: 1.0),
)
: UnderlineInputBorder(
borderSide: BorderSide(
color: borderColor ?? dangerColor, width: 1.0)),
focusedErrorBorder: withBorder
? OutlineInputBorder(
borderSide:
BorderSide(color: borderColor ?? dangerColor, width: 1.0),
)
: UnderlineInputBorder(
borderSide: BorderSide(
color: borderColor ?? dangerColor, width: 1.0)),
),
validator: validator,
autovalidateMode: autovalidateMode,
),
2020-10-08 03:32:52 +06:30
);
}
}