Выбор даты showDatePicker в Flutter
Готовый календарь Material вызывают функцией
showDatePicker.
Она возвращает Future<DateTime?>:
если пользователь нажал «ОК», приходит
дата; при отмене - null.
Обязательны context, initialDate,
firstDate и lastDate - границы
диапазона. После await обновите
экран через setState,
как после любого асинхронного действия:
import 'package:flutter/material.dart';
void main() {
runApp(const MaterialApp(home: DatePickPage()));
}
class DatePickPage extends StatefulWidget {
const DatePickPage({super.key});
@override
State<DatePickPage> createState() => _DatePickPageState();
}
class _DatePickPageState extends State<DatePickPage> {
DateTime? picked;
Future<void> chooseDate() async {
final now = DateTime.now();
final value = await showDatePicker(
context: context,
initialDate: picked ?? now,
firstDate: DateTime(now.year - 1),
lastDate: DateTime(now.year + 1),
);
if (!mounted || value == null) return; // widget may have left the tree
setState(() {
picked = value;
});
}
@override
Widget build(BuildContext context) {
final label = picked == null
? 'No date selected'
: '${picked!.day}.${picked!.month}.${picked!.year}';
return Scaffold(
appBar: AppBar(title: const Text('Date')),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(label, style: const TextStyle(fontSize: 20)),
const SizedBox(height: 16),
ElevatedButton(
onPressed: chooseDate,
child: const Text('Pick a date'),
),
],
),
),
);
}
}
Ограничьте выбор только текущим годом:
firstDate - 1 января,
lastDate - 31 декабря. Покажите
под кнопкой текст 'Due: ...'
после успешного выбора.