【发布时间】:2021-11-11 14:54:26
【问题描述】:
class _LemburFormState extends State<LemburForm> {
final _fromKey = GlobalKey<FormState>();
String tanggal;
DateTimeRange dateRange;
final List<String> errors = [];
String getFrom() {
if (dateRange == null) {
return 'Hari ini';
} else {
return DateFormat('dd/MM/yyyy').format(dateRange.start);
}
}
String getUntil() {
if (dateRange == null) {
return 'Sampai dengan';
} else {
return DateFormat('dd/MM/yyyy').format(dateRange.end);
}
}
TextFormField buildDateFromField() {
return TextFormField(
keyboardType: TextInputType.datetime,
onSaved: (newValue) => tanggal = newValue,
onChanged: (value) {
if (value.isNotEmpty) {
removeError(error: kDateNullError);
}
},
validator: (value) {
if (value.isEmpty) {
addError(error: kDateNullError);
return "";
}
return null;
},
onTap: () {
pickDateRange(context);
FocusScope.of(context).requestFocus(new FocusNode());
},
decoration: InputDecoration(
labelText: "Tanggal Lembur",
hintText: "${getFrom()} - ${getUntil()}",
floatingLabelBehavior: FloatingLabelBehavior.always,
),
);
}
// Data Range Picker
Future pickDateRange(BuildContext context) async {
final initialDateRange = DateTimeRange(
start: DateTime.now(),
end: DateTime.now().add(Duration(hours: 24 * 3)),
);
final newDateRange = await showDateRangePicker(
context: context,
firstDate: DateTime(DateTime.now().year - 5),
lastDate: DateTime(DateTime.now().year + 5),
initialDateRange: dateRange ?? initialDateRange,
builder: (BuildContext context, Widget child) {
return Theme(
data: ThemeData.light().copyWith(
primaryColor: Colors.teal,
accentColor: Colors.teal,
colorScheme: ColorScheme.light(primary: Colors.teal),
buttonTheme: ButtonThemeData(textTheme: ButtonTextTheme.primary),
),
child: child,
);
},
);
if (newDateRange == null) return;
setState(() => dateRange = newDateRange);
}
}
我创建了一个TextFormField,当我点击它时会显示DateRangePicker。
选择日期后,当我尝试提交数据时,验证检测到 DateRangePicker 值未输入。
如下图,我尝试点击“Buat Pengajuan”按钮DateRangePicker值没有进入TextFormField,也许有人可以帮我解决这个问题?
【问题讨论】:
-
也许您可以更改 buildDateFromField 函数中的验证器以测试是否设置了 dateRange。