cupertinoDatePicker static method
Future
cupertinoDatePicker({
- required BuildContext context,
- required dynamic onChanged(),
- bool dontallowPastDate = false,
- int yearCount = 65,
Implementation
static Future cupertinoDatePicker({
required BuildContext context,
required Function(String) onChanged,
bool dontallowPastDate = false,
int yearCount = 65,
}) {
var startYearDate = 1945.obs;
var startMonthDate = 1.obs;
var startDayDate = 1.obs;
if (dontallowPastDate) {
startYearDate.value = DateTime.now().year;
startMonthDate.value = DateTime.now().month;
startDayDate.value = DateTime.now().day;
}
var selectedYear = startYearDate.value.toString().obs;
var selectedMonth = startMonthDate.value.toString().obs;
var selectedDay = startDayDate.value.toString().obs;
var yearList = List.generate(
yearCount,
(index) => {
startYearDate.value + index: (startYearDate.value + index).toString()
},
).obs;
var monthList = <Map<int, String>>[
{1: "Ocak"},
{2: "Şubat"},
{3: "Mart"},
{4: "Nisan"},
{5: "Mayıs"},
{6: "Haziran"},
{7: "Temmuz"},
{8: "Ağustos"},
{9: "Eylül"},
{10: "Ekim"},
{11: "Kasım"},
{12: "Aralık"},
].obs;
var monthEditiableList = <Map<int, String>>[
{1: "Ocak"},
{2: "Şubat"},
{3: "Mart"},
{4: "Nisan"},
{5: "Mayıs"},
{6: "Haziran"},
{7: "Temmuz"},
{8: "Ağustos"},
{9: "Eylül"},
{10: "Ekim"},
{11: "Kasım"},
{12: "Aralık"},
].obs;
var dayList =
List.generate(31, (index) => {index + 1: (index + 1).toString()}).obs;
var editibledayList =
List.generate(31, (index) => {index + 1: (index + 1).toString()}).obs;
updatemonthdonwallowpastdate() {
if (dontallowPastDate) {
//Geçmişteki Ayları siler
monthEditiableList.value = monthList.where((month) {
return month.keys.first >= int.parse(selectedMonth.value);
}).toList();
} else {
monthEditiableList.value = monthList.toList();
}
}
void removeDaysAfter() {
if (dontallowPastDate &&
selectedMonth.value == startMonthDate.value.toString()) {
editibledayList.value = dayList.where((day) {
return day.keys.first >= int.parse(selectedDay.value);
}).toList();
} else {
editibledayList.value = dayList.toList();
}
}
updatemonthdonwallowpastdate();
removeDaysAfter();
return showCupertinoModalPopup(
// barrierDismissible: false,
context: context,
builder: (BuildContext context) {
if (selectedDay.value.length == 1) {
selectedDay.value = "0$selectedDay";
}
if (selectedMonth.value.length == 1) {
selectedMonth.value = "0$selectedMonth";
}
var selectedDate = "$selectedDay.$selectedMonth.$selectedYear".obs;
return Container(
height: 250,
width: ARMOYU.screenWidth,
color: Get.theme.scaffoldBackgroundColor,
child: Column(
children: [
Align(
alignment: Alignment.centerRight,
child: GestureDetector(
onTap: () {
onChanged(selectedDate.value);
Get.back();
},
child: const Padding(
padding: EdgeInsets.all(8.0),
child: Text(
"Bitti",
style: TextStyle(
color: Colors.lightBlue,
fontSize: 18,
fontWeight: FontWeight.normal,
decoration: TextDecoration.none),
),
),
),
),
Row(
children: [
SizedBox(
width: ARMOYU.screenWidth / 3,
height: 200,
child: Obx(
() => CupertinoPicker(
itemExtent: 32,
children: List.generate(
yearList.length,
(index) {
Map<int, String> yearMap = yearList[index];
return Text(yearMap.values.last.toString());
},
),
onSelectedItemChanged: (value) {
selectedYear.value = yearList[value].values.first;
selectedDate.value =
"$selectedDay.$selectedMonth.$selectedYear";
updatemonthdonwallowpastdate();
onChanged(selectedDate.value);
},
),
),
),
SizedBox(
width: ARMOYU.screenWidth / 3,
height: 150,
child: Obx(
() => CupertinoPicker(
itemExtent: 32,
children:
List.generate(monthEditiableList.length, (index) {
Map<int, String> monthMap = monthEditiableList[index];
return Text(monthMap.values.last.toString());
}),
onSelectedItemChanged: (value) {
Map<int, String> monthMap = monthEditiableList[value];
selectedMonth.value = monthMap.keys.first.toString();
editibledayList.value = List.generate(
findDaysInMonth(int.parse(selectedYear.value),
int.parse(selectedMonth.value)),
(index) => {index + 1: (index + 1).toString()},
);
selectedDate.value =
"$selectedDay.$selectedMonth.$selectedYear";
removeDaysAfter();
onChanged(selectedDate.value);
},
),
),
),
SizedBox(
width: ARMOYU.screenWidth / 3,
height: 150,
child: Obx(
() => CupertinoPicker(
itemExtent: 32,
children: List.generate(
editibledayList.length,
(index) {
Map<int, String> dayMap = editibledayList[index];
return Text(dayMap.values.last.toString());
},
),
onSelectedItemChanged: (value) {
Map<int, String> dayMap = editibledayList[value];
selectedDay.value = dayMap.keys.first.toString();
selectedDate.value =
"$selectedDay.$selectedMonth.$selectedYear";
onChanged(selectedDate.value);
},
),
),
),
],
),
],
),
);
},
);
}