如何将颤动的日期选择器值添加到文本字段?

Posted

技术标签:

【中文标题】如何将颤动的日期选择器值添加到文本字段?【英文标题】:How to get flutter datepicker value to the textfield? 【发布时间】:2020-10-13 03:01:51 【问题描述】:

如何将颤振日期选择器值添加到文本字段?当我单击文本字段时,它会在选择日期后弹出日期选择器。我想成为文本字段中的那个日期

还有。

我想自定义日期选择器的颜色

     onTap: () 
       FocusScope.of(context).requestFocus(new FocusNode());
       showDatePicker(
       context: context,
       initialDate: DateTime.now(),
       firstDate: DateTime(2019, 1),
       lastDate: DateTime(2021,12),
        );
       ,

【问题讨论】:

【参考方案1】:

我将您的代码修复如下(您可以从 DatePicker 中选择日期,您可以自定义 DatePicker 的主题):

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

class TestPickerWidget extends StatefulWidget 
  @override
  _TestPickerWidgetState createState() => _TestPickerWidgetState();


class _TestPickerWidgetState extends State<TestPickerWidget> 
  DateTime _selectedDate;
  TextEditingController _textEditingController = TextEditingController();

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      body: Center(
        child: TextField(
          focusNode: AlwaysDisabledFocusNode(),
          controller: _textEditingController,
          onTap: () 
            _selectDate(context);
          ,
        ),
      ),
    );
  

  _selectDate(BuildContext context) async 
    DateTime newSelectedDate = await showDatePicker(
        context: context,
        initialDate: _selectedDate != null ? _selectedDate : DateTime.now(),
        firstDate: DateTime(2000),
        lastDate: DateTime(2040),
        builder: (BuildContext context, Widget child) 
          return Theme(
            data: ThemeData.dark().copyWith(
              colorScheme: ColorScheme.dark(
                primary: Colors.deepPurple,
                onPrimary: Colors.white,
                surface: Colors.blueGrey,
                onSurface: Colors.yellow,
              ),
              dialogBackgroundColor: Colors.blue[500],
            ),
            child: child,
          );
        );

    if (newSelectedDate != null) 
      _selectedDate = newSelectedDate;
      _textEditingController
        ..text = DateFormat.yMMMd().format(_selectedDate)
        ..selection = TextSelection.fromPosition(TextPosition(
            offset: _textEditingController.text.length,
            affinity: TextAffinity.upstream));
    
  


class AlwaysDisabledFocusNode extends FocusNode 
  @override
  bool get hasFocus => false;

您还必须在 pubspec.yaml 中添加 Intl 依赖项:

dev_dependencies:
  flutter_test:
    sdk: flutter
  intl: ^0.16.1

最后在你的 main 中调用 TestPickerWidget 来测试它。

【讨论】:

【参考方案2】:

你可以这样使用

showDatePicker(
                context: context,
                initialDate: DateTime.now(),
                firstDate: DateTime(2019, 1),
                lastDate: DateTime(2021, 12),
              ).then((pickedDate) 
                //do whatever you want
              );

【讨论】:

【参考方案3】:

试试这个。 首先,您需要定义一个 TextEditing 控制器。 然后您可以访问该控制器来设置选定的日期。

这是您可自定义的日期选择器。

showDatePicker(
  context: context,
  initialDate: DateTime.now(),
  firstDate: DateTime(2019, 1),
  lastDate: DateTime(2021,12),
  builder: (context,picker)
    return Theme(
    //TODO: change colors
    data: ThemeData.dark().copyWith(
      colorScheme: ColorScheme.dark(
        primary: Colors.deepPurple,
        onPrimary: Colors.white,
        surface: Colors.pink,
        onSurface: Colors.yellow,
      ),
      dialogBackgroundColor:Colors.green[900],
     ),
     child: picker!,);
   )
   .then((selectedDate) 
     //TODO: handle selected date
     if(selectedDate!=null)
       _controller.text = selectedDate.toString();
     
 );

You can try this live preview.

【讨论】:

以上是关于如何将颤动的日期选择器值添加到文本字段?的主要内容,如果未能解决你的问题,请参考以下文章

隐藏字段中的日期时间选择器值

如何以日期格式获取日期选择器值?

选择器值到 tableView swift

使用 jQueryUI 获取日期选择器值

点击日期字段时如何调出日期选择器?

更改时发布日期选择器值