【问题标题】:Date picker field does not respond in Flutter TextFormField日期选择器字段在 Flutter TextFormField 中没有响应
【发布时间】:2021-05-23 21:48:20
【问题描述】:

我在 Flutter Web 应用程序中有以下 Dart 代码,其中包含一个 TextFormField,它假设显示一个日期选择器供受访者选择日期。代码编译得很好,但是当应用程序运行时从浏览器中单击日期字段时,没有任何反应,没有显示日期选择器。我错过了什么或做错了什么?

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

class DateQuestionCard extends StatelessWidget {
  DateQuestionCard({
    @required this.question,
    @required this.validationInfo,
    this.isRequired = false,
    this.inputFormatters,
    this.keyboardType,
    this.controller,
  });

  String? question = '';
  String? validationInfo = '';
  bool isRequired;
  List<TextInputFormatter>? inputFormatters;
  TextInputType? keyboardType;
  TextEditingController? controller;

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: const EdgeInsets.all(25),
      margin: EdgeInsets.all(10),
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(10),
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Text(question!),
          SizedBox(
            height: 10,
          ),

          // The date picker
          TextFormField(
            controller: controller,
            decoration: InputDecoration(
              hintText: "Insert your date of birth",
              hintStyle: TextStyle(
                color: Colors.grey[400],
                fontStyle: FontStyle.italic,
              ),
            ),
            onTap: () async {
              DateTime? date = DateTime(1980);
              FocusScope.of(context).requestFocus(FocusNode());

              date = await showDatePicker(
                context: context,
                initialDate: DateTime.now(),
                firstDate: DateTime(1980),
                lastDate: DateTime(2005),
              );

              controller!.text = date!.toIso8601String();
            },
            validator: (value) {
              if ((value == null || value.isEmpty) && isRequired) {
                return validationInfo;
              }

              return null;
            },
          ),
        ],
      ),
    );
  }
}

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    你的错误很简单:

    initialDate: DateTime.now(),
    firstDate: DateTime(1980),
    lastDate: DateTime(2005),
    

    您的日期范围是 1980-2005。但是由于我们有 2021 年,所以您的 initialDate 不能是 DateTime.now。

    解决方案:提供一个有效的 initialDate 或将您的 lastDate 更改为 >= DateTime.now

    干杯,窃笑

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多