first commit
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:enaklo_pos/core/assets/assets.gen.dart';
|
||||
import 'package:enaklo_pos/core/constants/colors.dart';
|
||||
import 'package:enaklo_pos/core/extensions/date_time_ext.dart';
|
||||
|
||||
class CustomDatePicker extends StatefulWidget {
|
||||
final void Function(DateTime selectedDate)? onDateSelected;
|
||||
final DateTime initialDate;
|
||||
final Widget? prefix;
|
||||
|
||||
const CustomDatePicker({
|
||||
super.key,
|
||||
required this.initialDate,
|
||||
this.onDateSelected,
|
||||
this.prefix,
|
||||
});
|
||||
|
||||
@override
|
||||
State<CustomDatePicker> createState() => _CustomDatePickerState();
|
||||
}
|
||||
|
||||
class _CustomDatePickerState extends State<CustomDatePicker> {
|
||||
late DateTime selectedDate;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
selectedDate = widget.initialDate;
|
||||
super.initState();
|
||||
}
|
||||
|
||||
Future<void> _selectDate(BuildContext context) async {
|
||||
final DateTime? picked = await showDatePicker(
|
||||
context: context,
|
||||
initialDate: selectedDate,
|
||||
firstDate: DateTime(2000),
|
||||
lastDate: DateTime(2101),
|
||||
);
|
||||
if (picked != null && picked != selectedDate) {
|
||||
setState(() {
|
||||
selectedDate = picked;
|
||||
});
|
||||
if (widget.onDateSelected != null) {
|
||||
widget.onDateSelected!(picked);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 500,
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Flexible(
|
||||
child: GestureDetector(
|
||||
onTap: () => _selectDate(context),
|
||||
child: AbsorbPointer(
|
||||
child: TextFormField(
|
||||
style: const TextStyle(
|
||||
color: AppColors.black,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
readOnly: true,
|
||||
controller: TextEditingController(
|
||||
text: selectedDate.toFormattedDate2(),
|
||||
),
|
||||
decoration: InputDecoration(
|
||||
suffixIcon: Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Assets.icons.calendar.svg(),
|
||||
),
|
||||
prefix: widget.prefix,
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(6.0),
|
||||
borderSide: const BorderSide(color: AppColors.stroke),
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(6.0),
|
||||
borderSide: const BorderSide(color: AppColors.stroke),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user