DateTime 값을 방출할 수 있고 Material, Cupertino 및 기타 스타일의 날짜/시간 선택기 대화상과 통합되는 TextFormField를 제공하는 Flutter 패키지입니다. 다양한 플랫폼에서 입력 필드와 직관적인 선택기 인터페이스를 결합함으로써 폼 처리를 간소화합니다. 날짜 또는 시간 선택이 필요한 폼에서 원활하게 사용되도록 설계되었으며 Android, iOS, Web, macOS, Windows, Linux 등 여러 플랫폼을 지원합니다. 최소한의 설정으로 일관되고 플랫폼 적응형 선택기를 제공하여 사용자 경험을 향상시킵니다.
사용 사례
날짜/시간 선택이 필요한 폼 입력
다중 플랫폼 날짜/시간 입력
양식 검증과의 통합
사용자 지정 가능한 피커 스타일링
동적 폼 필드 업데이트
모바일 및 웹 앱에서 사용자 친화적인 시간 입력
주요 기능
Material 및 Cupertino 피커를 지원합니다
DateTime 객체를 방출합니다
크로스 플랫폼 호환성
Form 위젯과의 간편한 통합
사용자 정의 가능한 대화 상자 모양
내장 검증 지원
적합한 대상
크로스 플랫폼 폼을 구축하는 개발자
네이티브 스타일의 날짜/시간 입력이 필요한 앱
기기 간 일관된 UX를 우선시하는 팀
Flutter 폼 아키텍처를 사용하는 프로젝트
날짜 선택기의 뼈대 코드를 최소화하고자 하는 사용자
고려 사항
Flutter 2.0 이상 필요
복잡한 테마를 위해 추가 스타일링이 필요할 수 있습니다
기본 날짜/시간 형식에 국한됨
내장된 로컬라이제이션 지원 없음
하위 플랫폼의 피커 동작에 의존
높은 사용자 정의 피커 UI에는 적합하지 않습니다
원본 README
연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.
DateTimeField
A TextFormField that emits DateTimes and helps show Material, Cupertino, and other style picker dialogs.
Fork with support for flutter >3.0.0
Example
See the example tab (example/lib/main.dart) for more.
import'package:flutter/material.dart';
import'package:intl/intl.dart';
import'package:datetime_picker_formfield/datetime_picker_formfield.dart';
// ...classBasicDateFieldextendsStatelessWidget{
final format = DateFormat("yyyy-MM-dd");
@overrideWidgetbuild(BuildContext context) {
returnColumn(children: <Widget>[
Text('Basic date field (${format.pattern})'),
DateTimeField(
format: format,
onShowPicker: (context, currentValue) {
returnshowDatePicker(
context: context,
firstDate: DateTime(1900),
initialDate: currentValue ?? DateTime.now(),
lastDate: DateTime(2100),
);
},
),
]);
}
}
classBasicTimeFieldextendsStatelessWidget{
final format = DateFormat("HH:mm");
@overrideWidgetbuild(BuildContext context) {
returnColumn(children: <Widget>[
Text('Basic time field (${format.pattern})'),
DateTimeField(
format: format,
onShowPicker: (context, currentValue) async {
final time = awaitshowTimePicker(
context: context,
initialTime: TimeOfDay.fromDateTime(currentValue ?? DateTime.now()),
);
returnDateTimeField.convert(time);
},
),
]);
}
}
classBasicDateTimeFieldextendsStatelessWidget{
final format = DateFormat("yyyy-MM-dd HH:mm");
@overrideWidgetbuild(BuildContext context) {
returnColumn(children: <Widget>[
Text('Basic date & time field (${format.pattern})'),
DateTimeField(
format: format,
onShowPicker: (context, currentValue) async {
returnawaitshowDatePicker(
context: context,
firstDate: DateTime(1900),
initialDate: currentValue ?? DateTime.now(),
lastDate: DateTime(2100),
).then((DateTime? date) async {
if (date != null) {
final time = awaitshowTimePicker(
context: context,
initialTime:
TimeOfDay.fromDateTime(currentValue ?? DateTime.now()),
);
returnDateTimeField.combine(date, time);
} else {
return currentValue;
}
});
},
),
]);
}
}