diff --git a/lib/widgets/date_picker_button.dart b/lib/widgets/date_picker_button.dart new file mode 100644 index 0000000..5a7366f --- /dev/null +++ b/lib/widgets/date_picker_button.dart @@ -0,0 +1,68 @@ +import 'package:didvan/config/design_config.dart'; +import 'package:didvan/config/theme_data.dart'; +import 'package:didvan/utils/date_time.dart'; +import 'package:didvan/widgets/didvan/text.dart'; +import 'package:flutter/material.dart'; +import 'package:persian_number_utility/persian_number_utility.dart'; + +class DatePickerButton extends StatefulWidget { + final String? initialValue; + final String? emptyText; + final void Function(String? date) onPicked; + final String? firstDate; + final String? lastDate; + const DatePickerButton({ + Key? key, + this.initialValue, + required this.onPicked, + this.firstDate, + this.lastDate, + this.emptyText, + }) : super(key: key); + + @override + State createState() => _DatePickerButtonState(); +} + +class _DatePickerButtonState extends State { + String? pickedDate; + + @override + void initState() { + pickedDate = widget.initialValue; + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Expanded( + child: GestureDetector( + onTap: () async { + pickedDate = await DateTimeUtils.showDatePicker( + initialDate: pickedDate, + startDate: widget.firstDate, + endDate: widget.lastDate, + ); + if (pickedDate == null) { + return; + } + setState(() {}); + widget.onPicked(pickedDate); + }, + child: Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.splash, + borderRadius: DesignConfig.lowBorderRadius, + border: Border.all(color: Theme.of(context).colorScheme.border), + ), + child: DidvanText( + pickedDate == null + ? widget.emptyText ?? 'تاریخ' + : pickedDate!.toPersianDate(), + ), + ), + ), + ); + } +}