How to Show Date Picker on TextField Tap and Get Formatted Date in Flutter
Are you making a form in a mobile app that has date input filed? Then look at the example below to learn how to implement a date picker on TextField() and TextFormFiled() widget so that whenever the user taps on the field and the date picker dialogue will appear.
See This Also: How to Show Time Picker on TextField Tap and Get Formatted Time
DateTime pickedDate = await showDatePicker(
context: context, //context of current state
initialDate: DateTime.now(),
firstDate: DateTime(2000), //DateTime.now() - not to allow to choose before today.
lastDate: DateTime(2101)
);
if(pickedDate != null ){
print(pickedDate); //pickedDate output format => 2021-03-10 00:00:00.000
String formattedDate = DateFormat('yyyy-MM-dd').format(pickedDate);
print(formattedDate); //formatted date output using intl package => 2021-03-16
}else{
print("Date is not selected");
}
First of all, you need to add intl Flutter package in your dependency to get formatted date output from date picker. Add the following line in your pubspec.yaml file to add intl package to your project.
dependencies:
flutter:
sdk: flutter
intl: ^0.17.0
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "Test App",
home: HomePage(),
);
}
}
class HomePage extends StatefulWidget{
@override
State<StatefulWidget> createState() {
return _HomePage();
}
}
class _HomePage extends State<HomePage>{
TextEditingController dateinput = TextEditingController();
//text editing controller for text field
@override
void initState() {
dateinput.text = ""; //set the initial value of text field
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title:Text("DatePicker on TextField"),
backgroundColor: Colors.redAccent, //background color of app bar
),
body:Container(
padding: EdgeInsets.all(15),
height:150,
child:Center(
child:TextField(
controller: dateinput, //editing controller of this TextField
decoration: InputDecoration(
icon: Icon(Icons.calendar_today), //icon of text field
labelText: "Enter Date" //label text of field
),
readOnly: true, //set it true, so that user will not able to edit text
onTap: () async {
DateTime pickedDate = await showDatePicker(
context: context, initialDate: DateTime.now(),
firstDate: DateTime(2000), //DateTime.now() - not to allow to choose before today.
lastDate: DateTime(2101)
);
if(pickedDate != null ){
print(pickedDate); //pickedDate output format => 2021-03-10 00:00:00.000
String formattedDate = DateFormat('yyyy-MM-dd').format(pickedDate);
print(formattedDate); //formatted date output using intl package => 2021-03-16
//you can implement different kind of Date Format here according to your requirement
setState(() {
dateinput.text = formattedDate; //set output date to TextField value.
});
}else{
print("Date is not selected");
}
},
)
)
)
);
}
}
DatePicker Dialogue when user taps on TextField. | Formatted date output from the date picker. |
In this way, you can implement Date Picker on TextField Widget.
Please Wait...
No any Comments on this Article