[원하는 것]
날짜를 선택 한 후 이전에 선택 한 날짜보다 앞에 있으면 오류 메세지를 보여주게 하고 싶었다.
[시도 해본 것]
처음에는 _showDatePicker() 이 함수를 호출 한 곳에서 확인 해보았는데 동시에 실행이 되서 그런가 전혀 어떠한 오류도 뜨지 않았다.
[해결]
그렇다면 어떻게 해야 할까
.whenComplete 을 사용하는 것.
whenComplete는 값이 있든 오류가 있든 완료되면 호출되는 것으로 화면 상호작용의 값을 확인 하기에 좋다.
"finally" 블록의 비동기 버전이라고 한다.
void _showDatePicker(BuildContext context, bool isStartDate) {
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return Container(
decoration: BoxDecoration(
color: Color(0xff61bec3),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(16),
topRight: Radius.circular(16),
),
),
height: 250,
child: Column(
children: [
Container(
height: 50,
decoration: BoxDecoration(
border:
Border(bottom: BorderSide(color: Colors.black12))),
padding: EdgeInsets.only(top: 10, right: 30),
child: InkWell(
onTap: () {
Align(
alignment: Alignment.centerRight,
child: Icon(Icons.check, size: 24));
},
)),
Expanded(
child: CupertinoDatePicker(
initialDateTime: isStartDate
? dateController.selectedStartDate.value
: dateController.selectedEndDate.value,
maximumYear: DateTime.now().year + 1,
minimumYear: DateTime.now().year,
mode: CupertinoDatePickerMode.date,
onDateTimeChanged: (DateTime newDate) {
if (isStartDate) {
dateController.updateStartDate(newDate);
} else {
dateController.updateEndDate(newDate);
}
},
)),
],
));
},
).whenComplete(() {
if (dateController.selectedEndDate.value
.isBefore(dateController.selectedStartDate.value)) {
Get.snackbar(
'날짜를 다시 확인해 주세요',
'종료 일자는 시작 날짜보다 작을 수 없습니다',
margin: EdgeInsets.only(top: Get.height * 0.4, left: 20.0, right: 20.0),
padding: EdgeInsets.all(20.0),
backgroundColor: Colors.black.withOpacity(0.8),
colorText: Colors.white,
borderRadius: 10.0,
duration: Duration(seconds: 3),
);
}
});
}
'Flutter' 카테고리의 다른 글
ModalBarrier 활용하기 (0) | 2024.09.02 |
---|---|
Flutter 녹음 시 동그란 파동 웨이브 구현 (round_wave) (0) | 2024.08.22 |
Flutter 깜박임 없이 서서히 페이지 이동하기 (0) | 2024.08.12 |
Flutter 현재 위치 불러오기 (0) | 2024.08.06 |
flutter 의 비동기 처리 개선 (1) | 2024.07.16 |