【问题标题】:How to pass this DateRangePicker value into TextFormField in Flutter?如何将此 DateRangePicker 值传递给 Flutter 中的 TextFormField?
【发布时间】: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,也许有人可以帮我解决这个问题?

Link my source code

【问题讨论】:

  • 也许您可以更改 buildDateFromField 函数中的验证器以测试是否设置了 dateRange。

标签: flutter dart


【解决方案1】:

为 textformfield 使用控制器并将值从 datepicker 获取到 controller.text 属性

https://flutter.dev/docs/cookbook/forms/text-field-changes

请参阅有关如何使用控制器的链接。

这可能会对你有所帮助。

How to get flutter datepicker value to the textfield?

【讨论】:

  • 也许你可以用我的代码举个例子?
猜你喜欢
  • 2019-08-28
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
  • 2022-09-27
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多