From 00b94bd5d665fe8f466e30d885320b6562a4063f Mon Sep 17 00:00:00 2001 From: Bohdan Savrasov Date: Fri, 25 Jun 2021 16:23:18 +0300 Subject: [PATCH] added Hebrew localization, fixed rtl issues --- README.md | 1 + lib/flutter_datetime_picker.dart | 136 ++++++++++++++++--------------- lib/src/i18n_model.dart | 39 ++++++++- 3 files changed, 109 insertions(+), 67 deletions(-) diff --git a/README.md b/README.md index 9b9eacf0..b6f736f4 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ you can choose date / time / date&time in multiple languages: - English(en) - French(fr) - German(de) +- Hebrew(he) - Indonesian(id) - Italian(it) - Japanese(jp) diff --git a/lib/flutter_datetime_picker.dart b/lib/flutter_datetime_picker.dart index 5e1073ac..dba6b566 100644 --- a/lib/flutter_datetime_picker.dart +++ b/lib/flutter_datetime_picker.dart @@ -3,6 +3,7 @@ library flutter_datetime_picker; import 'dart:async'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/painting.dart'; import 'package:flutter_datetime_picker/src/datetime_picker_theme.dart'; import 'package:flutter_datetime_picker/src/date_model.dart'; import 'package:flutter_datetime_picker/src/i18n_model.dart'; @@ -398,70 +399,73 @@ class _DatePickerState extends State<_DatePickerComponent> { Widget _renderItemView(DatePickerTheme theme) { return Container( color: theme.backgroundColor, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: widget.pickerModel.layoutProportions()[0] > 0 - ? _renderColumnView( - ValueKey(widget.pickerModel.currentLeftIndex()), - theme, - widget.pickerModel.leftStringAtIndex, - leftScrollCtrl, - widget.pickerModel.layoutProportions()[0], (index) { - widget.pickerModel.setLeftIndex(index); - }, (index) { - setState(() { - refreshScrollOffset(); - _notifyDateChanged(); - }); - }) - : null, - ), - Text( - widget.pickerModel.leftDivider(), - style: theme.itemStyle, - ), - Container( - child: widget.pickerModel.layoutProportions()[1] > 0 - ? _renderColumnView( - ValueKey(widget.pickerModel.currentLeftIndex()), - theme, - widget.pickerModel.middleStringAtIndex, - middleScrollCtrl, - widget.pickerModel.layoutProportions()[1], (index) { - widget.pickerModel.setMiddleIndex(index); - }, (index) { - setState(() { - refreshScrollOffset(); - _notifyDateChanged(); - }); - }) - : null, - ), - Text( - widget.pickerModel.rightDivider(), - style: theme.itemStyle, - ), - Container( - child: widget.pickerModel.layoutProportions()[2] > 0 - ? _renderColumnView( - ValueKey(widget.pickerModel.currentMiddleIndex() * 100 + - widget.pickerModel.currentLeftIndex()), - theme, - widget.pickerModel.rightStringAtIndex, - rightScrollCtrl, - widget.pickerModel.layoutProportions()[2], (index) { - widget.pickerModel.setRightIndex(index); - }, (index) { - setState(() { - refreshScrollOffset(); - _notifyDateChanged(); - }); - }) - : null, - ), - ], + child: Directionality( + textDirection: TextDirection.ltr, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + child: widget.pickerModel.layoutProportions()[0] > 0 + ? _renderColumnView( + ValueKey(widget.pickerModel.currentLeftIndex()), + theme, + widget.pickerModel.leftStringAtIndex, + leftScrollCtrl, + widget.pickerModel.layoutProportions()[0], (index) { + widget.pickerModel.setLeftIndex(index); + }, (index) { + setState(() { + refreshScrollOffset(); + _notifyDateChanged(); + }); + }) + : null, + ), + Text( + widget.pickerModel.leftDivider(), + style: theme.itemStyle, + ), + Container( + child: widget.pickerModel.layoutProportions()[1] > 0 + ? _renderColumnView( + ValueKey(widget.pickerModel.currentLeftIndex()), + theme, + widget.pickerModel.middleStringAtIndex, + middleScrollCtrl, + widget.pickerModel.layoutProportions()[1], (index) { + widget.pickerModel.setMiddleIndex(index); + }, (index) { + setState(() { + refreshScrollOffset(); + _notifyDateChanged(); + }); + }) + : null, + ), + Text( + widget.pickerModel.rightDivider(), + style: theme.itemStyle, + ), + Container( + child: widget.pickerModel.layoutProportions()[2] > 0 + ? _renderColumnView( + ValueKey(widget.pickerModel.currentMiddleIndex() * 100 + + widget.pickerModel.currentLeftIndex()), + theme, + widget.pickerModel.rightStringAtIndex, + rightScrollCtrl, + widget.pickerModel.layoutProportions()[2], (index) { + widget.pickerModel.setRightIndex(index); + }, (index) { + setState(() { + refreshScrollOffset(); + _notifyDateChanged(); + }); + }) + : null, + ), + ], + ), ), ); } @@ -483,7 +487,7 @@ class _DatePickerState extends State<_DatePickerComponent> { height: theme.titleHeight, child: CupertinoButton( pressedOpacity: 0.3, - padding: EdgeInsets.only(left: 16, top: 0), + padding: EdgeInsetsDirectional.only(start: 16, top: 0), child: Text( '$cancel', style: theme.cancelStyle, @@ -500,7 +504,7 @@ class _DatePickerState extends State<_DatePickerComponent> { height: theme.titleHeight, child: CupertinoButton( pressedOpacity: 0.3, - padding: EdgeInsets.only(right: 16, top: 0), + padding: EdgeInsetsDirectional.only(end: 16, top: 0), child: Text( '$done', style: theme.doneStyle, diff --git a/lib/src/i18n_model.dart b/lib/src/i18n_model.dart index 20e1f192..8755d3b0 100644 --- a/lib/src/i18n_model.dart +++ b/lib/src/i18n_model.dart @@ -33,7 +33,8 @@ enum LocaleType { sv, kh, tw, - fi + fi, + he } final _i18nModel = >{ @@ -1340,6 +1341,42 @@ final _i18nModel = >{ 'day': ['Ma', 'Ti', 'Ke', 'To', 'Pe', 'La', 'Su'], 'am': 'AM', 'pm': 'PM' + }, + LocaleType.he: { + 'cancel': 'ביטול', + 'done': 'סיום', + 'today': 'היום', + 'monthShort': [ + 'ינו׳', + 'פבר׳', + 'מרץ', + 'אפר׳', + 'מאי', + 'יוני', + 'יולי', + 'אוג׳', + 'ספט׳', + 'אוק׳', + 'נוב׳', + 'דצמ׳' + ], + 'monthLong': [ + 'ינואר', + 'פברואר', + 'מרץ', + 'אפריל', + 'מאי', + 'יוני', + 'יולי', + 'אוגוסט', + 'ספטמבר', + 'אוקטובר', + 'נובמבר', + 'דצמבר' + ], + 'day': ['ראשון', 'שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת'], + 'am': 'לפנה״צ', + 'pm': 'אחה״צ', } };