From ee8494b95b3e06826b6ef059bbf08fcab142f108 Mon Sep 17 00:00:00 2001 From: Alhafez nabil Date: Sun, 30 Oct 2022 12:12:01 +0200 Subject: [PATCH 1/3] # Task - Add the support to translate arabic number as well: # Add a new string extension in date_format.dart file to convert numbers into arabic numbers. # Adding an extra padding for the confirm and cancel button for the case of RTL. # Editing the example by adding a new choice of the arabic version. --- example/lib/main.dart | 26 ++++++++++++++++++++++++++ lib/flutter_datetime_picker.dart | 12 +++++++----- lib/src/date_format.dart | 21 +++++++++++++++++++++ lib/src/date_model.dart | 4 +++- 4 files changed, 57 insertions(+), 6 deletions(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index 1ab0e793..3343935f 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -156,6 +156,32 @@ class HomePage extends StatelessWidget { 'show 12H time picker with AM/PM', style: TextStyle(color: Colors.blue), )), + TextButton( + onPressed: () { + DatePicker.showDatePicker(context, + showTitleActions: true, + minTime: DateTime(2018, 3, 5), + maxTime: DateTime(2019, 6, 7), + theme: DatePickerTheme( + headerColor: Colors.red, + backgroundColor: Colors.blue, + itemStyle: TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + fontSize: 18), + doneStyle: + TextStyle(color: Colors.white, fontSize: 16)), + onChanged: (date) { + print('change $date in time zone ' + + date.timeZoneOffset.inHours.toString()); + }, onConfirm: (date) { + print('confirm $date'); + }, currentTime: DateTime.now(), locale: LocaleType.ar); + }, + child: Text( + 'show date picker(arabic case &date time range)', + style: TextStyle(color: Colors.blue), + )), TextButton( onPressed: () { DatePicker.showDateTimePicker(context, diff --git a/lib/flutter_datetime_picker.dart b/lib/flutter_datetime_picker.dart index dba6b566..413be8a5 100644 --- a/lib/flutter_datetime_picker.dart +++ b/lib/flutter_datetime_picker.dart @@ -1,15 +1,17 @@ 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_format.dart'; import 'package:flutter_datetime_picker/src/date_model.dart'; +import 'package:flutter_datetime_picker/src/datetime_picker_theme.dart'; import 'package:flutter_datetime_picker/src/i18n_model.dart'; -export 'package:flutter_datetime_picker/src/datetime_picker_theme.dart'; export 'package:flutter_datetime_picker/src/date_model.dart'; +export 'package:flutter_datetime_picker/src/datetime_picker_theme.dart'; export 'package:flutter_datetime_picker/src/i18n_model.dart'; typedef DateChangedCallback(DateTime time); @@ -384,7 +386,7 @@ class _DatePickerState extends State<_DatePickerComponent> { height: theme.itemHeight, alignment: Alignment.center, child: Text( - content, + widget.locale == LocaleType.ar ? content.toArabic : content, style: theme.itemStyle, textAlign: TextAlign.start, ), @@ -487,7 +489,7 @@ class _DatePickerState extends State<_DatePickerComponent> { height: theme.titleHeight, child: CupertinoButton( pressedOpacity: 0.3, - padding: EdgeInsetsDirectional.only(start: 16, top: 0), + padding: EdgeInsetsDirectional.only(start: 16, top: 0, end: 16), child: Text( '$cancel', style: theme.cancelStyle, @@ -504,7 +506,7 @@ class _DatePickerState extends State<_DatePickerComponent> { height: theme.titleHeight, child: CupertinoButton( pressedOpacity: 0.3, - padding: EdgeInsetsDirectional.only(end: 16, top: 0), + padding: EdgeInsetsDirectional.only(end: 16, top: 0, start: 16), child: Text( '$done', style: theme.doneStyle, diff --git a/lib/src/date_format.dart b/lib/src/date_format.dart index 583fb1af..24491e72 100755 --- a/lib/src/date_format.dart +++ b/lib/src/date_format.dart @@ -362,5 +362,26 @@ String digits(int value, int length) { return '$value'.padLeft(length, "0"); } +extension extForArabicNumber on String { + String get toArabic { + String? number = this; + + Map numbers = { + '0': '۰', + '1': '۱', + '2': '۲', + '3': '۳', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '۷', + '8': '۸', + '9': '۹', + }; + numbers.forEach((key, value) => number = number?.replaceAll(key, value)); + return number ?? ''; + } +} + int dayInYear(DateTime date) => date.difference(new DateTime(date.year, 1, 1)).inDays; diff --git a/lib/src/date_model.dart b/lib/src/date_model.dart index 0e899870..f27e5f89 100644 --- a/lib/src/date_model.dart +++ b/lib/src/date_model.dart @@ -1,7 +1,9 @@ +import 'dart:math'; + import 'package:flutter_datetime_picker/src/date_format.dart'; import 'package:flutter_datetime_picker/src/i18n_model.dart'; + import 'datetime_util.dart'; -import 'dart:math'; //interface for picker data model abstract class BasePickerModel { From 3b4ed911e2bfc85066d25bcd8c6da48700341f81 Mon Sep 17 00:00:00 2001 From: Alhafez nabil Date: Wed, 2 Nov 2022 17:25:55 +0200 Subject: [PATCH 2/3] # Task - Add the support to translate arabic number as well: # Deleting use of the ext. --- example/ios/Flutter/flutter_export_environment.sh | 13 +++++-------- lib/flutter_datetime_picker.dart | 3 +-- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/example/ios/Flutter/flutter_export_environment.sh b/example/ios/Flutter/flutter_export_environment.sh index da2211a4..c8bc1db4 100755 --- a/example/ios/Flutter/flutter_export_environment.sh +++ b/example/ios/Flutter/flutter_export_environment.sh @@ -1,16 +1,13 @@ #!/bin/sh # This is a generated file; do not edit or check into version control. -export "FLUTTER_ROOT=/Users/liuyanbo/flutter" -export "FLUTTER_APPLICATION_PATH=/Users/liuyanbo/Documents/GitHub/flutter_datetime_picker/example" -export "FLUTTER_TARGET=/Users/liuyanbo/Documents/GitHub/flutter_datetime_picker/example/lib/main.dart" +export "FLUTTER_ROOT=/Users/nabil.alhafez/Library/Android/flutter" +export "FLUTTER_APPLICATION_PATH=/Users/nabil.alhafez/AndroidStudioProjects/IT-Smart/flutter_datetime_picker/example" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_TARGET=lib/main.dart" export "FLUTTER_BUILD_DIR=build" -export "SYMROOT=${SOURCE_ROOT}/../build/ios" -export "OTHER_LDFLAGS=$(inherited) -framework Flutter" -export "FLUTTER_FRAMEWORK_DIR=/Users/liuyanbo/flutter/bin/cache/artifacts/engine/ios" export "FLUTTER_BUILD_NAME=1.0.0" export "FLUTTER_BUILD_NUMBER=1" -export "DART_DEFINES=flutter.inspector.structuredErrors%3Dtrue" export "DART_OBFUSCATION=false" export "TRACK_WIDGET_CREATION=true" export "TREE_SHAKE_ICONS=false" -export "PACKAGE_CONFIG=.packages" +export "PACKAGE_CONFIG=.dart_tool/package_config.json" diff --git a/lib/flutter_datetime_picker.dart b/lib/flutter_datetime_picker.dart index 413be8a5..195d7d24 100644 --- a/lib/flutter_datetime_picker.dart +++ b/lib/flutter_datetime_picker.dart @@ -5,7 +5,6 @@ import 'dart:async'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/painting.dart'; -import 'package:flutter_datetime_picker/src/date_format.dart'; import 'package:flutter_datetime_picker/src/date_model.dart'; import 'package:flutter_datetime_picker/src/datetime_picker_theme.dart'; import 'package:flutter_datetime_picker/src/i18n_model.dart'; @@ -386,7 +385,7 @@ class _DatePickerState extends State<_DatePickerComponent> { height: theme.itemHeight, alignment: Alignment.center, child: Text( - widget.locale == LocaleType.ar ? content.toArabic : content, + content, style: theme.itemStyle, textAlign: TextAlign.start, ), From f03909d7d0d317a1c98e72817ed51c24a8628fcd Mon Sep 17 00:00:00 2001 From: Alhafez nabil Date: Fri, 4 Nov 2022 22:49:15 +0200 Subject: [PATCH 3/3] # Task - Add the support to translate arabic number as well: # Deleting use of the ext. --- lib/src/date_format.dart | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/lib/src/date_format.dart b/lib/src/date_format.dart index 24491e72..583fb1af 100755 --- a/lib/src/date_format.dart +++ b/lib/src/date_format.dart @@ -362,26 +362,5 @@ String digits(int value, int length) { return '$value'.padLeft(length, "0"); } -extension extForArabicNumber on String { - String get toArabic { - String? number = this; - - Map numbers = { - '0': '۰', - '1': '۱', - '2': '۲', - '3': '۳', - '4': '٤', - '5': '٥', - '6': '٦', - '7': '۷', - '8': '۸', - '9': '۹', - }; - numbers.forEach((key, value) => number = number?.replaceAll(key, value)); - return number ?? ''; - } -} - int dayInYear(DateTime date) => date.difference(new DateTime(date.year, 1, 1)).inDays;