패키지, 저장소 및 앱 카테고리 검색

hijri_picker 표지
패키지 상세v5.0.0

hijri_picker

우무 알 쿠라 날짜를 선택하기 위한 히지라 달력이며 최대 및 최소 날짜를 지원합니다.

30일 다운로드
576
좋아요
66
Pub 점수
160

패키지 설치

flutter pub add hijri_picker

패키지 개요

공개 정보를 바탕으로 생성한 선택 가이드입니다.

hijri_picker 패키지는 히지라(이슬람) 달력에서 날짜를 선택할 수 있는 플러터 위젯을 제공하며, 특히 우름 알쿠라 달력 시스템을 지원합니다. 사용자가 최소 및 최대 날짜 범위를 사용자 정의하여 히지라 날짜를 선택할 수 있게 해주며, 이슬람 관련 애플리케이션에서 정확하고 문화적으로 적절한 날짜 선택을 보장합니다. 이 패키지는 히지라 날짜 입력이 필요한 플러터 앱 내에서의 간편성과 통합을 위해 설계되었습니다.

사용 사례

  • 이슬람 이벤트 스케줄링
  • 종교 앱 날짜 선택
  • 금융 앱에서 히지라력 통합
  • 문화 애플리케이션에서의 날짜 필터링
  • 히지라 날짜에 대한 사용자 선호 설정

주요 기능

  • 움 알 쿠라 히지리 달력을 지원합니다
  • 사용자 지정 가능한 최소 및 최대 날짜 제한
  • Flutter UI와의 간단한 통합
  • 정확한 히자라 날짜 변환
  • 내장 날짜 검증

적합한 대상

  • 무슬림 사용자를 대상으로 하는 앱
  • 문화적 또는 종교적 응용
  • 히지라 날짜를 사용하는 금융 시스템
  • 캘린더 기반 스케줄링 도구
  • 국제화된 날짜 선택기

고려 사항

  • 히자라력에만 제한됨
  • 피커 내에서 그레고리력 날짜 변환에 대한 지원 없음
  • 날짜 형식을 수동으로 처리해야 합니다
  • 플랫폼별 렌더링은 다를 수 있습니다
  • 정확성은 외부 캘린더 로직에 따라 달라집니다

원본 README

연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.

Hijri Date Picker

Hijri (Umm al-Qura / Islamic calendar) date picker for Flutter.

Overview

Since v5.0.0, this package is a thin adapter that lets Flutter's built-in Material 3 date picker render Hijri dates. It implements the CalendarDelegate API introduced in Flutter 3.32, so you get Flutter's showDatePicker, CalendarDatePicker, DatePickerDialog, InputDatePickerFormField, and YearPicker for free — with Hijri month names, Hijri weekday offsets, Hijri month lengths, and full theming via DatePickerThemeData.

Requirements

  • Flutter >=3.32.0
  • Dart ^3.8.0
  • hijri ^3.0.1 (runtime dependency)

Screenshots

Light theme — Colors.amber seed
Light home top
1. Home — top: showHijriDatePicker launchers + embedded CalendarDatePicker showing Dhu Al-Hijjah 1447, Friday 5 selected.
Light home bottom
2. Home — bottom: InputDatePickerFormField, the embedded 3-column YearPicker (1447 selected), and the theming legend card.
Light basic dialog
3. showHijriDatePicker — basic dialog. Header reads "Fri, 5 DhuH"; M3 mode-toggle pencil icon in the corner.
Light full options dialog
4. Full options: custom helpText: "SELECT HIJRI DATE", uppercase cancelText/confirmText, and a selectableDayPredicate that disables Fridays (note the circled-disabled Friday 5).
Light input mode
5. Input mode (the pencil icon toggles to text-input). Typing 12/5/1447 in the locale's compact format — accepted by HijriCalendarDelegate.parseCompactDate.
Dark theme — Colors.blue seed
Dark home top
6. Same home in dark mode — Material 3 picks up the blue seed for primary/selection colors via ColorScheme.fromSeed.
Dark home bottom
7. Dark home, scrolled: input field, year grid (1447 highlighted in blue), and the dark theming legend.
Dark basic dialog
8. Basic showHijriDatePicker dialog in dark mode — Hijri month name in the header, blue selection chip on day 5.
Dark full options
9. Full-options dialog in dark mode — Fridays disabled by predicate, day 6 (Saturday) selected.
Dark input only
10. DatePickerEntryMode.inputOnly — opens straight into a compact text field, no calendar.
Dark scrolled
11. Dark home scrolled — Hijri year grid 1439–1450 with 1447 selected (out-of-range years 1439–1441 dimmed).
Arabic locale (RTL)
Arabic home
12. Locale switched to ar_SA via the AppBar toggle. Layout flipped to RTL; calendar uses Arabic weekday abbreviations and Eastern-Arabic digits.
Arabic dialog
13. showHijriDatePicker dialog in Arabic. The cancelText/confirmText are still the English overrides we passed (demonstrating they take precedence over MaterialLocalizations).
Arabic input
14. Arabic input mode — compact-date field typed as 1447/12/5.
Arabic embedded
15. Embedded CalendarDatePicker + InputDatePickerFormField in Arabic — same widgets, RTL layout, Arabic month name.
Arabic year grid
16. Embedded YearPicker in Arabic — 3-column M3 year grid (1441–1450), 1447 selected.

Quick start

Register the standard Material/Widgets localization delegates:

MaterialApp(
  localizationsDelegates: const [
    GlobalMaterialLocalizations.delegate,
    GlobalWidgetsLocalizations.delegate,
    GlobalCupertinoLocalizations.delegate,
  ],
  supportedLocales: const [
    Locale('en', 'US'),
    Locale('ar', 'SA'),
  ],
  // ...
);
Option 1 — showHijriDatePicker (typed convenience)
final HijriDateTime now = HijriDateTime.now();
final HijriDateTime? picked = await showHijriDatePicker(
  context: context,
  initialDate: now,
  firstDate: HijriDateTime(now.year - 5, 1, 1),
  lastDate: HijriDateTime(now.year + 5, 12, 29),
  hijriLanguage: 'ar', // 'en', 'ar', 'tr', or any locale added via HijriCalendar.addLocale
);
Option 2 — Flutter's showDatePicker with HijriCalendarDelegate
final HijriDateTime? picked = await showDatePicker(
  context: context,
  initialDate: HijriDateTime.now(),
  firstDate: HijriDateTime(1440, 1, 1),
  lastDate: HijriDateTime(1455, 12, 29),
  calendarDelegate: const HijriCalendarDelegate(language: 'ar'),
) as HijriDateTime?;
Option 3 — Embedded widgets

The same delegate plugs into the embeddable widgets too:

CalendarDatePicker(
  initialDate: HijriDateTime.now(),
  firstDate: HijriDateTime(1440, 1, 1),
  lastDate: HijriDateTime(1455, 12, 29),
  onDateChanged: (DateTime d) => setState(() => selected = d as HijriDateTime),
  calendarDelegate: const HijriCalendarDelegate(),
);

InputDatePickerFormField(
  initialDate: HijriDateTime.now(),
  firstDate: HijriDateTime(1440, 1, 1),
  lastDate: HijriDateTime(1455, 12, 29),
  onDateSubmitted: (DateTime d) { /* d is a HijriDateTime */ },
  calendarDelegate: const HijriCalendarDelegate(),
);

YearPicker(
  firstDate: HijriDateTime(1440, 1, 1),
  lastDate: HijriDateTime(1455, 12, 29),
  selectedDate: HijriDateTime.now(),
  currentDate: HijriDateTime.now(), // required workaround — see note below
  onChanged: (DateTime d) { /* ... */ },
  calendarDelegate: const HijriCalendarDelegate(),
);

Note on YearPicker: Flutter's YearPicker constructor defaults currentDate to DateTime.now() (plain Gregorian) rather than calendarDelegate.now(), which crashes with any non-Gregorian delegate. Workaround: always pass currentDate: HijriDateTime.now() explicitly. The other entry points (CalendarDatePicker, DatePickerDialog, showDatePicker) handle this correctly.

Theming

All theming flows through Flutter's DatePickerThemeData:

MaterialApp(
  theme: ThemeData(
    useMaterial3: true,
    colorScheme: ColorScheme.fromSeed(
      seedColor: Colors.amber,
      brightness: Brightness.light,
    ),
    datePickerTheme: const DatePickerThemeData(
      backgroundColor: Color(0xFFFFF8E1),
      headerBackgroundColor: Colors.amber,
      headerForegroundColor: Colors.black87,
    ),
  ),
);

Working with results

HijriDateTime extends DateTime; its .year/.month/.day are the Hijri components. Convert via:

final HijriDateTime d = HijriDateTime.now();
final HijriCalendar h = d.toHijriCalendar();   // hijri package's calendar object
final DateTime gregorian = d.toGregorian();    // equivalent Gregorian date

// Construct from sources:
HijriDateTime.fromHijriCalendar(someHijriCalendar);
HijriDateTime.fromGregorian(DateTime(2026, 5, 22));

Migration from 4.x

v5.0.0 is a breaking rewrite. The custom widgets have been removed.

4.x 5.x
showHijriDatePicker(initialDate: HijriCalendar..) showHijriDatePicker(initialDate: HijriDateTime(..))
HijriMonthPicker widget Use Flutter's CalendarDatePicker with calendarDelegate: HijriCalendarDelegate()
HijriDayPicker / HijriYearPicker widgets Use Flutter's built-ins (internal _DayPicker, public YearPicker)
HijriCalendarBuilders (custom day/weekday builders) Removed — customize via DatePickerThemeData
Return type HijriCalendar? Return type HijriDateTime? (call .toHijriCalendar() or .toGregorian() to interop)

License

MIT — see LICENSE.

Author

Ahmed Aljoaid — @ahmedoid

카테고리

의존성

의존성 목록 1 개

소스 저장소

이 패키지를 사용하는 프로젝트

아직 데이터가 없습니다.