Flutter용 완전히 사용자 정의 가능한 페르시아어(페르시아어) 날짜 선택기로, 오른쪽에서 왼쪽으로 작성되는 언어를 지원하고 직관적인 날짜 선택을 제공하도록 설계되었습니다. 날짜 및 시간 조작을 위한 내장된 메서드를 포함하여 Flutter 애플리케이션에서 자라리(페르시아력) 날짜를 쉽게 다룰 수 있습니다. 이 패키지는 이란 또는 페르시아어 사용자를 대상으로 하는 앱에 적합하며, 지역화된 형식과 스타일 옵션을 통해 원활한 경험을 제공합니다. 간단한 pub add 명령어를 통해 기존 Flutter 프로젝트에 부드럽게 통합할 수 있습니다.
사용 사례
페르시아어 사용자들을 위한 앱 로컬라이징
양식에서 자라리 달력 날짜 다루기
예약 스케줄링 시스템 구축
이란 전자상거래 앱에 날짜 선택기 통합
중동 시장에 맞는 문화적으로 적절한 UI 만들기
주요 기능
자랄리(페르시아) 달력을 지원합니다
완전히 사용자 정의 가능한 UI
내장된 날짜 및 시간 조작 유틸리티
오른쪽에서 왼쪽으로의 언어 호환성
Flutter와의 간편한 통합
사용자 정의 가능한 테마 및 스타일
적합한 대상
이란 또는 페르시아어 사용자를 대상으로 하는 앱
자라리 날짜 처리가 필요한 개발자
RTL 인터페이스 지원이 필요한 프로젝트
날짜 입력이 포함된 폼 중심 애플리케이션
유연한 날짜 선택기 컴포넌트를 원하는 UI 디자이너
고려 사항
기본이 아닌 테마를 사용하려면 수동 설정이 필요합니다
제한된 플랫폼 전용 최적화
경계 사례를 처리하기 위해 추가 로컬라이제이션이 필요할 수 있습니다
자라리 변환을 위해 외부 라이브러리에 의존합니다
페르시아어 외 지역에는 최적화되지 않음
원본 README
연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.
Persian DatePicker & DateTime Manipulation
A persian ( farsi ) datepicker for flutter.
to see an example of date conversion and manipulation, refer to DateTime section in this page.
Usage
A simple example with a TextField which turns into a datepicker
/*Inline DatePicker*/
persianDatePicker = PersianDatePicker(
controller: textEditingController,
datetime: '1397/06/19',
).init();
....
returnColumn(
children: <Widget>[
// Simple Date PickerContainer(
child: persianDatePicker, // just pass `persianDatePicker` variable as child with no ( )
),
// you can omit TextField when using datepicker as inlineTextField(
enableInteractiveSelection: false,
controller: textEditingController,
),
],
);
Customized DatePicker
You can customize datepicker as you wish, there are a lot of options to set, below code is just a few of them.
/*Customized Font Family ( Farsi Digits )*/
persianDatePicker = PersianDatePicker(
controller: textEditingController,
farsiDigits: true
).init();
Or if you have a font which supports farsi digits then you can simply pass the font name and everything would be ok
اگر فونتی در برنامه استفاده کرده اید که قابلیت نمایش اعداد فارسی را دارد تنها لازم است اسم فونت را به دیت پیکر بدهید
/*Customized Font Family ( Farsi Digits )*/
persianDatePicker = PersianDatePicker(
controller: textEditingController,
fontFamily: 'Vazir'// here I used Vazir font
).init();
Events
onChange: fires after tapping on a day. It has two arguments, oldText and newText which represents the value of datepicker before-tap and after-tap respectively.
You can now use following methods with PersianDateTime instances implemented methods:
toJalaali( format ) // see output formats
toGregorian( format ) // see output formats
isAfter
isBefore
difference
isEqual
add
subtract
All above methods work on persian ( farsi ) dates. if you want to work with gregorian datetime use Dart DateTime class
PersianDateTime persianDate1 = PersianDateTime(jalaaliDateTime: '1397/06/09'); // default is now/*
persianDate1 contains following properties
jalaaliYear 1397
jalaaliMonth 6
jalaaliDay 9
jalaaliShortYear 97
jalaaliZeroLeadingMonth 06
jalaaliZeroLeadingDay 09
jalaaliMonthName شهریور
gregorianYear 2018
gregorianMonth 8
gregorianDay 31
gregorianShortYear 18
gregorianZeroLeadingDay 31
gregorianZeroLeadingMonth 08
gregorianMonthName October
gregorianShortMonthName Oct
datetime Dart DateTime class of current persian date
*/print(persianDate1.toGregorian()); // 2018-08-31print(persianDate1.datetime); // 2018-08-31 00:00:00.000PersianDateTime persianDate2 = persianDate1.add(Duration(days: 10));
print(persianDate2.isBefore(persianDate1)); // falseprint(persianDate2.isAfter(persianDate1)); // trueprint(persianDate2.difference(persianDate1).inDays); // 10print(persianDate2.difference(persianDate1).inHours); // 240PersianDateTime persianDate3 = PersianDateTime(); // default is nowprint(persianDate3.isEqual(persianDate1)); // false// you can accept date as gregorian using `.fromGregorian` constructor. it will automatically convert into jalaali datePersianDateTime persianDate3 = PersianDateTime.fromGregorian(); // default is nowprint(persianDate3.toJalaali(format: 'YYYY/MM/DD')); // 1397/11/19
Output formats
YYYY full year YY 2 digits year MMMM full month name ( doesn't work in datepicker ) MMM short month name ( this only works in gregorian dates and also doesn't work in datepicker ) MM leading zero month digit M month without leading zero DD leading zero day digit D day without leading zero
Important Notes نکات مهم
up to this version all output dates are in persian.
تا این نسخه تمام تاریخ های خروجی پارسی(جلالی) هستند
rangeSeparator and your custom date separator should not be equal, otherwise datepicker will return null
مقدار ورودی rangeSeparator و جداکننده ای که برای فرمت خروجی انتخاب کرده اید نباید یکی باشند در این صورت دیت پیکر خروجی جداکننده های محدوده و خروجی مشابه هستند برمیگرداند
Persian input dates must respect YYYY/MM/DD format. output format is up to you
Gregorian input dates must respect YYYY-MM-DD format. output format is persian and up to you
فرمت تاریخ های ورودی که پارسی (جلالی) هستند باید بصورت
YYYY/MM/DD
باشد. فرمت خروجی به دلخواه شماست
فرمت تاریخ های ورودی که میلادی هستند باید بصورت
YYYY-MM-DD
باشد. فرمت تاریخ خروجی، پارسی و به دلخواه شما خواهد بود
Version 1.3 features
/// حداکثر تاریخی که میتوان در دیت پیکر انتخاب کرد
String maxDatetime;
/// حداقل تاریخی که میتوان در دیت پیکر انتخاب کرد
String minDatetime;
/// حداکثر فاصله ای که تاریخ شروع و تاریخ پایان میتوانند نسبت به یکدیگر داشته باشند
Duration maxSpan;
/// حداقل فاصله ای که تاریخ شروع و تاریخ پایان میتوانند نسبت به یکدیگر داشته باشند
Duration minSpan;
in order to update these options programmatically you can use update method, like so
...
FlatButton(
onPressed: () {
minSpan = Duration(days: 10);
setState(() {
// here you can update the options
persianDatePicker.update(
minSpan: minSpan,
minDatetime: '1397/12/19',
maxDatetime: '1397/12/29');
});
},
child: Container(
child: Text('Update Datepicker'),
),
)
...
Examples
You can find the full example in the Git Repository, example directory