Skip to content

Commit f918a07

Browse files
author
PedRaM
committed
add farsi
1 parent fa7360a commit f918a07

40 files changed

+632
-124
lines changed

Diff for: assets/api/en/skill.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
},
4646
{
4747
"title": "Android Development",
48-
"rate": 3
48+
"rate": 2
4949
},
5050
{
5151
"title": "Test Driven Development",

Diff for: assets/api/fa/education.json

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
2+
[
3+
{
4+
"mainField": "کامپیوتر",
5+
"academicOrientation": "مهندسی سخت افزار",
6+
"school": "دانشگاه علوم و فنون مازندران",
7+
"fromDate": "2012-09-22",
8+
"toDate": "2017-04-21"
9+
}
10+
]

Diff for: assets/api/fa/info.json

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"name": "پدرام",
3+
"lastName": "محمدعلی پور",
4+
"phoneNumber": "09385715855",
5+
"email": "[email protected]",
6+
"image": "assets/images/png/pedram.jpg",
7+
"linkedInUrl": "http://linkedin.com/in/pedram-mohammad-ali-pour-b44721141",
8+
"portfolioUrl": "https://b1101-portfolio.web.app/"
9+
}

Diff for: assets/api/fa/job_experience.json

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
[
2+
{
3+
"company": "پاراتک",
4+
"title": "توسعه دهنده اندروید و فلاتر",
5+
"fromDate": "2017-08-23",
6+
"toDate": "2022-04-20",
7+
"isContinue": false
8+
},
9+
{
10+
"company": "توسعه و نوآوری شهر",
11+
"title": "توسعه دهنده فلاتر",
12+
"fromDate": "2022-04-21",
13+
"toDate": "2023-08-11",
14+
"isContinue": false
15+
},
16+
{
17+
"company": "هلدینگ نگاه",
18+
"title": "توسعه دهنده فلاتر",
19+
"fromDate": "2023-07-23",
20+
"toDate": "2023-07-23",
21+
"isContinue": true
22+
}
23+
]

Diff for: assets/api/fa/profession.json

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"profession": "توسعه دهنده فلاتر",
3+
"slogan": "هر اپلیکیشن را خارق العاده بساز"
4+
}

Diff for: assets/api/fa/project.json

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
[
2+
{
3+
"title": "هبیتومیک",
4+
"subtitle": "طرح ریز روزانه شخصی",
5+
"date": "2021-08-22",
6+
"androidLink": "https://play.google.com/store/apps/details?id=com.habitomic.android",
7+
"iosLink": "https://apps.apple.com/ca/app/habitomic/id1609261995"
8+
},
9+
{
10+
"title": "همراه شهر پلاس",
11+
"subtitle": "اپلیکیشن همراه بانک شهر",
12+
"androidLink": "https://cafebazaar.ir/app/com.citydi.hplus",
13+
"iosLink": "https://app.appleapps.ir/id/1062990/",
14+
"date": "2022-01-01"
15+
},
16+
{
17+
"title": "سامانه بک آفیس همراه شهر پلاس",
18+
"subtitle": "سامانه جامع بک آفیس اپلیکیشن همراه شهر پلاس",
19+
"date": "2022-01-01"
20+
},
21+
{
22+
"title": "آی-کلسیفایر",
23+
"subtitle": "اپلیکیشن وب برای طبقه بندی گاو ها",
24+
"date": "2022-01-01",
25+
"webLink": "https://app.iclassifier.ca/"
26+
},
27+
{
28+
"title": "هم آموز",
29+
"subtitle": "اپلیکیشن خود آموز در زمینه مالی و آموزشی",
30+
"date": "2018-08-22",
31+
"androidLink": "https://hamamooz.com/android/Hamamoozv3.apk",
32+
"iosLink": "https://anardoni.com/ios/app/xeJrXlAlW"
33+
}
34+
]

Diff for: assets/api/fa/skill.json

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
[
2+
{
3+
"title": "فلاتر",
4+
"rate": 3
5+
},
6+
{
7+
"title": "دارت",
8+
"rate": 3
9+
},
10+
{
11+
"title": "الگوی طراحی نرم افزار بلاک",
12+
"rate": 3
13+
},
14+
{
15+
"title": "برنامه نویسی شی گرا",
16+
"rate": 3
17+
},
18+
{
19+
"title": "تزریق وابستگی (DI)",
20+
"rate": 3
21+
},
22+
{
23+
"title": "معماری تمیز (Clean)",
24+
"rate": 3
25+
},
26+
{
27+
"title": "فلاتر بلاک",
28+
"rate": 3
29+
},
30+
{
31+
"title": "رستفول ای پی آی (Restful)",
32+
"rate": 3
33+
},
34+
{
35+
"title": "پرووایدر",
36+
"rate": 3
37+
},
38+
{
39+
"title": "فلاتر وب",
40+
"rate": 3
41+
},
42+
{
43+
"title": "جاوا",
44+
"rate": 3
45+
},
46+
{
47+
"title": "توسعه اندروید نیتیو",
48+
"rate": 2
49+
},
50+
{
51+
"title": "توسعه تست محور",
52+
"rate": 2
53+
}
54+
]

Diff for: assets/api/fa/software.json

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[
2+
{
3+
"title": "اندروید استودیو",
4+
"image": "assets/images/svg/android.svg",
5+
"color": "DEEED5"
6+
},
7+
{
8+
"title": "ویژوال استودیو کد",
9+
"image": "assets/images/svg/vs.svg",
10+
"color": "B5D2EC"
11+
},
12+
{
13+
"title": "گیت",
14+
"image": "assets/images/svg/git.svg",
15+
"color": "ECCDC4"
16+
}
17+
]

Diff for: assets/images/png/logo.png

6.55 KB
Loading

Diff for: lib/core/utils/enum.dart

+5
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,8 @@ enum SkillRate {
99
good,
1010
advance,
1111
}
12+
13+
enum SwitchState {
14+
done,
15+
switching,
16+
}

Diff for: lib/core/utils/extensions.dart

+97
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
import 'package:equatable/equatable.dart';
2+
import 'package:flutter/material.dart';
3+
import 'package:persian_datetime_picker/persian_datetime_picker.dart';
4+
import 'package:portfolio/feature/provider/presentation/widgets/app_provider.dart';
5+
16
extension MinMax on List<int> {
27
int get minValue {
38
if (isEmpty) return 0;
@@ -21,6 +26,58 @@ extension MinMax on List<int> {
2126
}
2227

2328
extension StringExt on String {
29+
String get toPersianNumber => replaceAll('1', '۱')
30+
.replaceAll('2', '۲')
31+
.replaceAll('3', '۳')
32+
.replaceAll('4', '۴')
33+
.replaceAll('5', '۵')
34+
.replaceAll('6', '۶')
35+
.replaceAll('7', '۷')
36+
.replaceAll('8', '۸')
37+
.replaceAll('9', '۹')
38+
.replaceAll('0', '۰');
39+
40+
String get toEnglishNumber => replaceAll('۱', '1')
41+
.replaceAll('۲', '2')
42+
.replaceAll('۳', '3')
43+
.replaceAll('۴', '4')
44+
.replaceAll('۵', '5')
45+
.replaceAll('۶', '6')
46+
.replaceAll('۷', '7')
47+
.replaceAll('۸', '8')
48+
.replaceAll('۹', '9')
49+
.replaceAll('۰', '0');
50+
51+
String toEnglishNumberOrPersianNumber(BuildContext context) {
52+
final language = AppProvider.of(context).language;
53+
return switch (language.language) {
54+
'fa' => toPersianNumber,
55+
'en' => toEnglishNumber,
56+
_ => toEnglishNumber,
57+
};
58+
}
59+
60+
Jalali? get toJalali {
61+
final dateTime = DateTime.tryParse(this)?.toLocal();
62+
if (dateTime == null) return null;
63+
return Jalali.fromDateTime(dateTime).copy(
64+
hour: dateTime.hour,
65+
minute: dateTime.minute,
66+
second: dateTime.second,
67+
);
68+
}
69+
70+
Jalali? get toLocalJalali {
71+
final date = DateTime.tryParse(this)?.toLocal();
72+
if (date == null) return null;
73+
final jalali = Jalali.fromDateTime(date).copy(
74+
hour: date.hour,
75+
minute: date.minute,
76+
second: date.second,
77+
);
78+
return jalali;
79+
}
80+
2481
bool get isValidEmail {
2582
return RegExp(
2683
r"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,253}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,253}[a-zA-Z0-9])?)*$")
@@ -43,3 +100,43 @@ extension StringExt on String {
43100
}
44101

45102
extension DateTimeExt on DateTime {}
103+
104+
extension MapStringDynamicExt on Map<String, dynamic> {
105+
Jalali? toJalali(String key) {
106+
final value = this[key];
107+
if (value is! String) return null;
108+
return value.toJalali;
109+
}
110+
111+
Jalali? toLocalJalali(String key) {
112+
final value = this[key];
113+
if (value is! String) return null;
114+
return value.toLocalJalali;
115+
}
116+
117+
T? toEnum<T extends Enum>(String key, T? Function(String value) converter) {
118+
final value = this[key];
119+
if (value is! String) return null;
120+
return converter(value);
121+
}
122+
123+
T? toModel<T extends Equatable>(
124+
String key,
125+
T? Function(dynamic value) converter,
126+
) {
127+
final value = this[key];
128+
if (value == null) return null;
129+
return converter(value);
130+
}
131+
132+
List<T> toListModel<T extends Equatable>(
133+
String key,
134+
T Function(dynamic value) converter,
135+
) {
136+
final value = this[key];
137+
if (value is! List) return <T>[];
138+
return value.map((e) => converter(e)).toList();
139+
}
140+
141+
Color toColor(String key) => Color(int.parse('FF${this[key]}', radix: 16));
142+
}

Diff for: lib/feature/home/data/model/education_model.dart

+13-13
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
1+
import 'package:portfolio/core/utils/extensions.dart';
2+
13
import '../../domain/entity/education.dart';
24

35
class EducationModel extends Education {
46
const EducationModel({
5-
required String academicOrientation,
6-
required DateTime fromDate,
7-
required String mainField,
8-
required String school,
9-
required DateTime toDate,
10-
}) : super(
11-
academicOrientation: academicOrientation,
12-
fromDate: fromDate,
13-
mainField: mainField,
14-
school: school,
15-
toDate: toDate,
16-
);
7+
required super.academicOrientation,
8+
required super.fromDate,
9+
required super.mainField,
10+
required super.school,
11+
required super.toDate,
12+
required super.fromDateJalali,
13+
required super.toDateJalali,
14+
});
1715

1816
factory EducationModel.fromJson(Map<String, dynamic> json) => EducationModel(
1917
academicOrientation: json['academicOrientation'],
20-
fromDate: DateTime.parse(json['fromDate']),
2118
mainField: json['mainField'],
2219
school: json['school'],
20+
fromDate: DateTime.parse(json['fromDate']),
2321
toDate: DateTime.parse(json['toDate']),
22+
fromDateJalali: json.toLocalJalali('fromDate'),
23+
toDateJalali: json.toLocalJalali('toDate'),
2424
);
2525
}

Diff for: lib/feature/home/data/model/info_model.dart

+8-17
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,14 @@ import '../../domain/entity/info.dart';
22

33
class InfoModel extends Info {
44
const InfoModel({
5-
required String name,
6-
required String lastName,
7-
required String phoneNumber,
8-
required String email,
9-
required String image,
10-
required String linkedInUrl,
11-
required String portfolioUrl,
12-
}) : super(
13-
email: email,
14-
image: image,
15-
lastName: lastName,
16-
name: name,
17-
phoneNumber: phoneNumber,
18-
linkedInUrl: linkedInUrl,
19-
portfolioUrl: portfolioUrl,
20-
);
21-
5+
required super.name,
6+
required super.lastName,
7+
required super.phoneNumber,
8+
required super.email,
9+
required super.image,
10+
required super.linkedInUrl,
11+
required super.portfolioUrl,
12+
});
2213
factory InfoModel.fromJson(Map<String, dynamic> json) => InfoModel(
2314
name: json['name'],
2415
lastName: json['lastName'],

0 commit comments

Comments
 (0)