general_datetime 3.0.0
general_datetime: ^3.0.0 copied to clipboard
Gregorian, Persian and Umm al-Qura chronology, strict civil-date contracts and Flutter Material date-picker adapters.
import 'package:flutter/material.dart';
import 'package:general_datetime/general_datetime.dart';
import 'package:general_datetime/delegates.dart';
import 'package:general_datetime/default_localizations.dart';
void main() {
// Create a Gregorian date and convert it to Persian dates:
PersianDateTime jDate = PersianDateTime.fromDateTime(DateTime(2025, 3, 1));
debugPrint(
'Converted to Jalali: ${jDate.toString()}'); // e.g. "1403-12-11 00:00:00.000"
// Create a Jalali date directly (auto-normalization applies):
PersianDateTime directDate = PersianDateTime(1403, 12, 11, 14, 30);
debugPrint('Direct Jalali: ${directDate.toString()}');
// Hijri Example:
HijriDateTime hDate = HijriDateTime.fromDateTime(DateTime(2025, 3, 1));
debugPrint('Converted to Hijri: ${hDate.toString()}');
runApp(const AppStartup());
}
class AppStartup extends StatelessWidget {
const AppStartup({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
locale: const Locale('en'),
supportedLocales: const <Locale>[Locale('en')],
home: Builder(
builder: (BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Calendar delegates'),
),
body: SingleChildScrollView(
child: Column(
children: [
const Text('Gregorian Calendar'),
CalendarDatePicker(
initialDate: DateTime.now(),
firstDate: DateTime(2020, 1, 1),
lastDate: DateTime(2030, 12, 31),
currentDate: DateTime.now(),
calendarDelegate: const GregorianCalendarDelegate(),
onDateChanged: (value) {},
),
const Divider(),
const Text('Persian Calendar'),
Localizations.override(
context: context,
delegates: const <LocalizationsDelegate<dynamic>>[
DefaultPersianCalendarMaterialLocalizations.delegate,
],
child: CalendarDatePicker(
initialDate: PersianDateTime.now(),
firstDate: PersianDateTime(1400, 1, 1),
lastDate: PersianDateTime(1450, 12, 29),
currentDate: PersianDateTime.now(),
onDateChanged: (value) {
debugPrint('Persian selected: $value');
},
calendarDelegate: const PersianCalendarDelegate(),
),
),
const Divider(),
const Text('Hijri Calendar'),
Localizations.override(
context: context,
delegates: const <LocalizationsDelegate<dynamic>>[
DefaultHijriCalendarMaterialLocalizations.delegate,
],
child: CalendarDatePicker(
initialDate: HijriDateTime.now(),
firstDate: HijriDateTime(1440, 1, 1),
lastDate: HijriDateTime(1460, 12, 29),
currentDate: HijriDateTime.now(),
onDateChanged: (value) {
debugPrint('Hijri selected: $value');
},
calendarDelegate: const HijriCalendarDelegate(),
),
),
],
),
),
);
},
),
);
}
}