Compare commits

...

150 Commits

Author SHA1 Message Date
Jayesh jain
6d02fed861 Merge pull request #153 from WDI-Ideas/jayeshjain25
io api settings api
2024-07-30 11:30:37 +05:30
jayesh
24382bcb13 io api settings api 2024-07-30 11:29:02 +05:30
Jayesh jain
bb041cd950 Merge pull request #152 from WDI-Ideas/jayeshjain25
Merge pull request #151 from WDI-Ideas/main
2024-07-30 11:28:40 +05:30
Jayesh jain
58a5924409 Merge pull request #151 from WDI-Ideas/main
Merge pull request #150 from WDI-Ideas/jayeshjain25
2024-07-26 17:42:08 +05:30
Jayesh jain
b689450d13 Merge pull request #150 from WDI-Ideas/jayeshjain25
io api settings api
2024-07-26 17:41:33 +05:30
jayesh
23ceeed933 io api settings api 2024-07-26 17:41:05 +05:30
Jayesh jain
ce55da045f Merge pull request #149 from WDI-Ideas/jayeshjain25
Jayeshjain25
2024-07-26 17:30:55 +05:30
jayesh
6194bc3243 Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-26 17:30:23 +05:30
Jayesh jain
9414370f8b Merge pull request #148 from WDI-Ideas/jayeshjain25
Merge pull request #147 from WDI-Ideas/main
2024-07-26 17:30:16 +05:30
jayesh
14a5e75db5 io api settings api 2024-07-26 17:29:39 +05:30
Jayesh jain
0c41162fd0 Merge pull request #147 from WDI-Ideas/main
Merge pull request #146 from WDI-Ideas/jayeshjain25
2024-07-26 16:58:03 +05:30
Jayesh jain
376fb1002c Merge pull request #146 from WDI-Ideas/jayeshjain25
Jayeshjain25
2024-07-26 16:57:08 +05:30
jayesh
481eeaaee7 Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-26 16:56:03 +05:30
Jayesh jain
0de5e3eebc Merge pull request #145 from WDI-Ideas/jayeshjain25
Merge pull request #144 from WDI-Ideas/main
2024-07-26 16:55:34 +05:30
jayesh
285f9f1d81 io api settings api 2024-07-26 16:54:11 +05:30
kishan06
9a6031b0bf app icon added 2024-07-26 15:47:06 +05:30
Jayesh jain
a5fd8a994e Merge pull request #144 from WDI-Ideas/main
Merge pull request #143 from WDI-Ideas/jayeshjain25
2024-07-26 15:34:27 +05:30
Jayesh jain
e5aaf103da Merge pull request #143 from WDI-Ideas/jayeshjain25
io api settings api
2024-07-26 15:33:18 +05:30
jayesh
babe51c40c io api settings api 2024-07-26 15:32:29 +05:30
Jayesh jain
1ce957b21e Merge pull request #142 from WDI-Ideas/jayeshjain25
Jayeshjain25
2024-07-26 14:58:59 +05:30
jayesh
f6027abafc Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-26 14:58:02 +05:30
Jayesh jain
d15dd35d43 Merge pull request #141 from WDI-Ideas/jayeshjain25
Merge pull request #140 from WDI-Ideas/main
2024-07-26 14:57:52 +05:30
jayesh
b4a3247886 io api settings api 2024-07-26 14:56:51 +05:30
Jayesh jain
987de9ae3d Merge pull request #140 from WDI-Ideas/main
Merge pull request #139 from WDI-Ideas/jayeshjain25
2024-07-26 12:06:32 +05:30
Jayesh jain
a5e6584b8c Merge pull request #139 from WDI-Ideas/jayeshjain25
Jayeshjain25
2024-07-26 12:06:00 +05:30
jayesh
7ea9a4aace Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-26 12:04:56 +05:30
Jayesh jain
df9b615554 Merge pull request #138 from WDI-Ideas/jayeshjain25
Merge pull request #137 from WDI-Ideas/main
2024-07-26 12:04:43 +05:30
jayesh
2da07cba30 io api settings api 2024-07-26 12:03:47 +05:30
Jayesh jain
d4f0a0c47c Merge pull request #137 from WDI-Ideas/main
changes
2024-07-25 23:51:28 +05:30
Jayesh jain
3c224e1036 Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App 2024-07-25 23:49:38 +05:30
Jayesh jain
47b6a7d72f changes 2024-07-25 23:49:31 +05:30
Jayesh jain
309e5c97f3 Merge pull request #136 from WDI-Ideas/jayeshjain25
Merge pull request #135 from WDI-Ideas/main
2024-07-25 23:35:35 +05:30
Jayesh jain
2b8988809c Merge pull request #135 from WDI-Ideas/main
changes
2024-07-25 23:35:02 +05:30
Jayesh jain
fe805f9f2e changes 2024-07-25 23:34:06 +05:30
Jayesh jain
cd13209831 Merge pull request #134 from WDI-Ideas/jayeshjain25
Merge pull request #133 from WDI-Ideas/main
2024-07-25 23:33:29 +05:30
Jayesh jain
36f079a5f6 Merge pull request #133 from WDI-Ideas/main
Merge pull request #132 from WDI-Ideas/jayeshjain25
2024-07-25 19:20:56 +05:30
Jayesh jain
59fd3f25be Merge pull request #132 from WDI-Ideas/jayeshjain25
Jayeshjain25
2024-07-25 19:20:26 +05:30
jayesh
5a3fcda3b7 Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-25 19:19:58 +05:30
Jayesh jain
94f6741ca9 Merge pull request #131 from WDI-Ideas/jayeshjain25
Merge pull request #130 from WDI-Ideas/main
2024-07-25 19:19:51 +05:30
jayesh
9b44dc0cf3 io api settings api 2024-07-25 19:19:25 +05:30
Jayesh jain
bd630a64ee Merge pull request #130 from WDI-Ideas/main
Merge pull request #129 from WDI-Ideas/jayeshjain25
2024-07-25 19:18:57 +05:30
Jayesh jain
bc15d0b1b3 Merge pull request #129 from WDI-Ideas/jayeshjain25
Merge pull request #128 from WDI-Ideas/main
2024-07-23 18:57:14 +05:30
Jayesh jain
8c3d5c208e Merge pull request #128 from WDI-Ideas/main
Merge pull request #127 from WDI-Ideas/jayeshjain25
2024-07-23 18:56:40 +05:30
Jayesh jain
846d6cd5e7 Merge pull request #127 from WDI-Ideas/jayeshjain25
Jayeshjain25
2024-07-23 18:56:01 +05:30
jayesh
ac0bb9bb30 Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-23 18:55:32 +05:30
Jayesh jain
8bd568de06 Merge pull request #126 from WDI-Ideas/jayeshjain25
Merge pull request #125 from WDI-Ideas/main
2024-07-23 18:55:23 +05:30
Jayesh jain
6b53fe95bc Merge pull request #125 from WDI-Ideas/main
Merge pull request #124 from WDI-Ideas/jayeshjain25
2024-07-23 18:54:43 +05:30
jayesh
07ffe7d842 Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-23 18:54:21 +05:30
Jayesh jain
a2cd025a9b Merge pull request #124 from WDI-Ideas/jayeshjain25
Merge pull request #123 from WDI-Ideas/main
2024-07-23 18:54:07 +05:30
jayesh
1dd5cc60c2 icon update 2024-07-23 18:52:59 +05:30
Jayesh jain
f753eb9507 Merge pull request #123 from WDI-Ideas/main
Merge pull request #122 from WDI-Ideas/jayeshjain25
2024-07-23 13:16:53 +05:30
Jayesh jain
85165153f5 Merge pull request #122 from WDI-Ideas/jayeshjain25
Jayeshjain25
2024-07-23 13:16:16 +05:30
jayesh
b030ec5254 Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-23 13:15:23 +05:30
Jayesh jain
a99a59469f Merge pull request #121 from WDI-Ideas/jayeshjain25
Merge pull request #120 from WDI-Ideas/main
2024-07-23 13:15:00 +05:30
jayesh
e4fab6ea81 Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-23 13:14:27 +05:30
Jayesh jain
5e51933675 Merge pull request #120 from WDI-Ideas/main
Merge pull request #119 from WDI-Ideas/jayeshjain25
2024-07-23 13:14:17 +05:30
Jayesh jain
2ee69e270d Merge pull request #119 from WDI-Ideas/jayeshjain25
Merge pull request #118 from WDI-Ideas/main
2024-07-23 13:07:37 +05:30
jayesh
ae5c2fe0f0 new splash screen, deposit screen 2024-07-23 13:06:35 +05:30
Jayesh jain
ad2151513d Merge pull request #118 from WDI-Ideas/main
Merge pull request #117 from WDI-Ideas/jayeshjain25
2024-07-22 19:29:38 +05:30
Jayesh jain
4e823837d0 Merge pull request #117 from WDI-Ideas/jayeshjain25
Jayeshjain25
2024-07-22 19:29:06 +05:30
jayesh
5903e3279d Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-22 19:28:25 +05:30
Jayesh jain
b8759bc16f Merge pull request #116 from WDI-Ideas/jayeshjain25
Merge pull request #115 from WDI-Ideas/main
2024-07-22 19:28:16 +05:30
jayesh
726527ba13 new splash screen, deposit screen 2024-07-22 19:27:32 +05:30
Jayesh jain
8646015198 Merge pull request #115 from WDI-Ideas/main
Merge pull request #114 from WDI-Ideas/jayeshjain25
2024-07-22 18:41:48 +05:30
Jayesh jain
857702bfb0 Merge pull request #114 from WDI-Ideas/jayeshjain25
new splash screen, deposit screen
2024-07-22 18:41:11 +05:30
jayesh
3d7d6b8368 new splash screen, deposit screen 2024-07-22 18:40:32 +05:30
Jayesh jain
fe73681e09 Merge pull request #113 from WDI-Ideas/jayeshjain25
Jayeshjain25
2024-07-19 16:21:47 +05:30
jayesh
b6ac751a0d Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-19 16:21:16 +05:30
Jayesh jain
8099dc03da Merge pull request #112 from WDI-Ideas/jayeshjain25
Merge pull request #111 from WDI-Ideas/main
2024-07-19 16:21:08 +05:30
jayesh
4e768e6f6a api integration 2024-07-19 16:20:14 +05:30
Jayesh jain
22a98e6fd7 Merge pull request #111 from WDI-Ideas/main
Merge pull request #110 from WDI-Ideas/jayeshjain25
2024-07-18 18:52:02 +05:30
Jayesh jain
948777ee21 Merge pull request #110 from WDI-Ideas/jayeshjain25
api integration
2024-07-18 18:51:31 +05:30
jayesh
58703af212 api integration 2024-07-18 18:51:01 +05:30
Jayesh jain
195a9aab7a Merge pull request #109 from WDI-Ideas/jayeshjain25
Merge pull request #108 from WDI-Ideas/main
2024-07-18 18:50:50 +05:30
Jayesh jain
d91f14c5ca Merge pull request #108 from WDI-Ideas/main
Merge pull request #107 from WDI-Ideas/jayeshjain25
2024-07-17 19:15:24 +05:30
Jayesh jain
2def888574 Merge pull request #107 from WDI-Ideas/jayeshjain25
Jayeshjain25
2024-07-17 19:14:53 +05:30
jayesh
c3cfd64328 Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-17 19:14:25 +05:30
Jayesh jain
74f9b14645 Merge pull request #106 from WDI-Ideas/jayeshjain25
Merge pull request #105 from WDI-Ideas/main
2024-07-17 19:14:16 +05:30
jayesh
7ea696d96c Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-17 19:13:53 +05:30
Jayesh jain
bef5db2c79 Merge pull request #105 from WDI-Ideas/main
bug fixing
2024-07-17 19:13:46 +05:30
Jayesh jain
83f0f9c990 Merge pull request #104 from WDI-Ideas/jayeshjain25
Merge pull request #102 from WDI-Ideas/main
2024-07-17 19:13:19 +05:30
jayesh
fab01aa29a api integration 2024-07-17 19:12:26 +05:30
poojapandeyx
1e47dd914a Merge pull request #103 from WDI-Ideas/pooja1
Pooja1
2024-07-12 19:45:48 +05:30
poojapandeyx
c60ca32d82 api integrated 2024-07-12 19:46:59 +05:30
poojapandeyx
a1692d81b2 register with mobile api body change 2024-07-12 11:58:03 +05:30
poojapandeyx
f657db89af register with mobile number change 2024-07-12 11:56:27 +05:30
Jayesh jain
7fa9f4d6f8 Merge pull request #102 from WDI-Ideas/main
Merge pull request #101 from WDI-Ideas/jayeshjain25
2024-07-12 09:16:01 +05:30
Jayesh jain
925427a8ae Merge pull request #101 from WDI-Ideas/jayeshjain25
Jayeshjain25
2024-07-12 09:15:28 +05:30
jayesh
b02c960cc8 Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-12 09:15:03 +05:30
Jayesh jain
0d50087d63 Merge pull request #100 from WDI-Ideas/jayeshjain25
Merge pull request #99 from WDI-Ideas/main
2024-07-12 09:14:56 +05:30
jayesh
2345ce8496 changes 2024-07-12 09:14:15 +05:30
Jayesh jain
ba9d545deb Merge pull request #99 from WDI-Ideas/main
Merge pull request #98 from WDI-Ideas/jayeshjain25
2024-07-11 20:19:38 +05:30
Jayesh jain
efb9f7c4c6 Merge pull request #98 from WDI-Ideas/jayeshjain25
Jayeshjain25
2024-07-11 20:19:07 +05:30
Jayesh jain
41ffd38c38 Merge pull request #97 from WDI-Ideas/jayeshjain25
Merge pull request #96 from WDI-Ideas/main
2024-07-11 20:18:29 +05:30
jayesh
40cfcc3f21 Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-11 20:18:27 +05:30
Jayesh jain
58eb038b58 Merge pull request #96 from WDI-Ideas/main
api integration
2024-07-11 20:17:49 +05:30
jayesh
b4bc63a5b2 Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-11 20:17:47 +05:30
Jayesh jain
9913f505ec Merge pull request #95 from WDI-Ideas/jayeshjain25
Merge pull request #91 from WDI-Ideas/main
2024-07-11 20:17:20 +05:30
jayesh
cd7861f041 deposit new ui 2024-07-11 20:16:37 +05:30
poojapandeyx
5063d1a2dd Merge pull request #94 from WDI-Ideas/pooja1
Pooja1
2024-07-11 19:46:42 +05:30
poojapandeyx
acf7f8980f otp flow 2024-07-11 19:36:40 +05:30
poojapandeyx
a24febc95d project structure 2024-07-11 11:05:57 +05:30
poojapandeyx
63f7c7ad94 get country api 2024-07-11 10:53:25 +05:30
poojapandeyx
f58c5cfb49 Merge pull request #92 from WDI-Ideas/pooja
Pooja
2024-07-11 10:52:18 +05:30
poojapandeyx
feb9aa2efd get country api 2024-07-11 10:51:29 +05:30
Jayesh jain
8ab2dd590f Merge pull request #91 from WDI-Ideas/main
Merge pull request #90 from WDI-Ideas/jayeshjain25
2024-07-10 20:36:33 +05:30
Jayesh jain
89c8bc1c5d Merge pull request #90 from WDI-Ideas/jayeshjain25
language localization
2024-07-10 20:35:46 +05:30
jayesh
6feefde6e2 language localization 2024-07-10 20:35:18 +05:30
poojapandeyx
be54cca41d get country api 2024-07-10 17:38:29 +05:30
poojapandeyx
da3a50e0b3 get country api 2024-07-10 17:37:12 +05:30
poojapandeyx
05e48ebbbe get country api 2024-07-10 17:34:49 +05:30
Jayesh jain
663d6726c0 Merge pull request #89 from WDI-Ideas/jayeshjain25
language localization
2024-07-10 07:33:08 +05:30
jayesh
815b58e552 language localization 2024-07-10 07:32:29 +05:30
Jayesh jain
0ab7bb6df0 Merge pull request #88 from WDI-Ideas/jayeshjain25
language localization
2024-07-09 14:57:07 +05:30
jayesh
11d0d3cf8b language localization 2024-07-09 14:56:23 +05:30
Jayesh jain
c830e4d09c Merge pull request #87 from WDI-Ideas/jayeshjain25
Jayeshjain25
2024-07-05 15:39:42 +05:30
jayesh
62199ed13a Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-05 15:39:11 +05:30
Jayesh jain
97e856c34a Merge pull request #86 from WDI-Ideas/jayeshjain25
Merge pull request #85 from WDI-Ideas/main
2024-07-05 15:38:55 +05:30
jayesh
03a5dcbdd9 Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-07-05 15:38:05 +05:30
Jayesh jain
3e1077aad4 Merge pull request #85 from WDI-Ideas/main
bug fixing
2024-07-05 15:37:59 +05:30
Jayesh jain
3ada52d835 Merge pull request #84 from WDI-Ideas/jayeshjain25
Merge pull request #82 from WDI-Ideas/main
2024-07-05 15:37:25 +05:30
jayesh
1a6858d34f fingerprint auth added 2024-07-05 15:36:29 +05:30
harshmishraGithub
f009e1b680 Merge pull request #83 from WDI-Ideas/harsh_mishra
bug fixing
2024-07-04 11:05:58 +05:30
Harsh Mishra
481391561d bug fixing 2024-07-04 11:05:07 +05:30
Jayesh jain
388b02deb0 Merge pull request #82 from WDI-Ideas/main
Merge pull request #81 from WDI-Ideas/jayeshjain25
2024-07-03 18:51:25 +05:30
Jayesh jain
9ce5a9bfb4 Merge pull request #81 from WDI-Ideas/jayeshjain25
Jayeshjain25
2024-07-03 18:50:34 +05:30
jayesh
f4a1f2dfb3 fingerprint auth added 2024-07-03 18:50:05 +05:30
jayesh
d9c4711cef fingerprint auth added 2024-07-03 18:46:18 +05:30
meet2711
cc994f5e3b Merge pull request #80 from WDI-Ideas/meet
changes donee
2024-06-28 18:47:59 +05:30
meet2711
42776882e7 changes donee 2024-06-28 18:47:34 +05:30
meet2711
e656945376 Merge pull request #79 from WDI-Ideas/meet
changes done
2024-06-27 19:35:17 +05:30
meet2711
34b40aeb53 changes done 2024-06-27 19:34:54 +05:30
meet2711
c7b0be1ba3 Merge pull request #78 from WDI-Ideas/meet
text changes done
2024-06-26 19:33:14 +05:30
meet2711
3129d4c1de text changes done 2024-06-26 19:32:56 +05:30
meet2711
167afce823 Merge pull request #77 from WDI-Ideas/meet
changes done
2024-06-25 19:35:14 +05:30
meet2711
64797a4946 changes done 2024-06-25 19:34:44 +05:30
meet2711
495b70037a Merge pull request #76 from WDI-Ideas/meet
minor changes done
2024-06-24 19:27:39 +05:30
meet2711
e2f9d384cb minor changes done 2024-06-24 19:27:15 +05:30
jayesh
d25048f01d Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-06-24 11:11:41 +05:30
meet2711
2df5346ec9 Merge pull request #75 from WDI-Ideas/meet
bugs solvedd
2024-06-21 19:50:40 +05:30
meet2711
07149dcb86 bugs solvedd 2024-06-21 19:50:19 +05:30
jayesh
9f6dae3bc1 ui fixing 2024-06-21 15:36:44 +05:30
jayesh
4f3d1b196f Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-06-21 14:43:05 +05:30
meet2711
0a6dc94253 Merge pull request #74 from WDI-Ideas/meet
bugs solved
2024-06-21 13:34:48 +05:30
meet2711
0147426e85 bugs solved 2024-06-21 13:34:24 +05:30
jayesh
c44b8b2f5e Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-06-21 10:40:18 +05:30
meet2711
074d780086 Merge pull request #73 from WDI-Ideas/meet
text fixed
2024-06-20 19:21:08 +05:30
meet2711
6a02b799df text fixed 2024-06-20 19:20:50 +05:30
jayesh
ded04e7b64 Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-06-20 17:27:21 +05:30
jayesh
bc0478c134 Merge branch 'main' of https://github.com/WDI-Ideas/Tanami_App into jayeshjain25 2024-06-20 17:26:47 +05:30
298 changed files with 11873 additions and 3416 deletions

3
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"dart.flutterSdkPath": "D:\\pooja\\fluttersdk\\flutter_3.22.2\\flutter"
}

View File

@@ -14,7 +14,7 @@ package="com.example.tanami_app">
android:requestLegacyExternalStorage="true"
android:usesCleartextTraffic="true"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
android:icon="@mipmap/launcher_icon">
<activity
android:name=".MainActivity"
android:exported="true"

View File

@@ -1,5 +1,5 @@
package com.example.tanami_app
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.android.FlutterFragmentActivity
class MainActivity: FlutterActivity()
class MainActivity: FlutterFragmentActivity()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 442 B

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 721 B

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
assets/images/Vector.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px"><path fill="#FFC107" d="M43.611,20.083H42V20H24v8h11.303c-1.649,4.657-6.08,8-11.303,8c-6.627,0-12-5.373-12-12c0-6.627,5.373-12,12-12c3.059,0,5.842,1.154,7.961,3.039l5.657-5.657C34.046,6.053,29.268,4,24,4C12.955,4,4,12.955,4,24c0,11.045,8.955,20,20,20c11.045,0,20-8.955,20-20C44,22.659,43.862,21.35,43.611,20.083z"/><path fill="#FF3D00" d="M6.306,14.691l6.571,4.819C14.655,15.108,18.961,12,24,12c3.059,0,5.842,1.154,7.961,3.039l5.657-5.657C34.046,6.053,29.268,4,24,4C16.318,4,9.656,8.337,6.306,14.691z"/><path fill="#4CAF50" d="M24,44c5.166,0,9.86-1.977,13.409-5.192l-6.19-5.238C29.211,35.091,26.715,36,24,36c-5.202,0-9.619-3.317-11.283-7.946l-6.522,5.025C9.505,39.556,16.227,44,24,44z"/><path fill="#1976D2" d="M43.611,20.083H42V20H24v8h11.303c-0.792,2.237-2.231,4.166-4.087,5.571c0.001-0.001,0.002-0.001,0.003-0.002l6.19,5.238C36.971,39.205,44,34,44,24C44,22.659,43.862,21.35,43.611,20.083z"/></svg>

After

Width:  |  Height:  |  Size: 988 B

View File

@@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.81204 2.5H16.188C19.3978 2.5 22 5.16116 22 8.44374V9.18592L22.0002 9.20241L22 9.21891V14.5201L22.0002 14.5366L22 14.5531V15.5563C22 18.8388 19.3978 21.5 16.188 21.5H7.81204C4.60219 21.5 2 18.8388 2 15.5563V8.44374C2 5.16116 4.60219 2.5 7.81204 2.5ZM20.5464 8.44374V8.45916H17.3504L17.1673 8.46431C15.4101 8.56244 14.0147 10.0491 14.0147 11.8695C14.0159 13.7531 15.5084 15.2787 17.3499 15.2798H20.5464V15.5563C20.5464 18.0179 18.595 20.0135 16.188 20.0135H7.81204C5.40498 20.0135 3.45358 18.0179 3.45358 15.5563V8.44374C3.45358 5.98214 5.40498 3.98651 7.81204 3.98651H16.188C18.595 3.98651 20.5464 5.98214 20.5464 8.44374ZM17.3508 9.94567L20.5464 9.94567V13.7933H17.3504L17.2033 13.7874C16.2329 13.7102 15.4689 12.8811 15.4683 11.869C15.4683 10.8074 16.3109 9.94632 17.3508 9.94567ZM18.521 11.8084C18.521 11.3979 18.1956 11.0652 17.7942 11.0652H17.4921L17.3935 11.072C17.0388 11.1212 16.7653 11.4322 16.7653 11.8084C16.7653 12.2189 17.0907 12.5517 17.4921 12.5517H17.7942L17.8928 12.5449C18.2475 12.4957 18.521 12.1847 18.521 11.8084ZM13.0807 7.74062C13.0807 7.33013 12.7553 6.99736 12.3539 6.99736H7.12203L7.0234 7.00415C6.66866 7.05337 6.39524 7.36434 6.39524 7.74062C6.39524 8.15111 6.72063 8.48388 7.12203 8.48388H12.3539L12.4525 8.47709C12.8073 8.42788 13.0807 8.1169 13.0807 7.74062Z" fill="#363636"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1,4 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="20" fill="#004717"/>
<path d="M19.38 26.5V15.42L17.08 15.96V14L20.46 12.5H22.04V26.5H19.38Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 244 B

View File

@@ -0,0 +1,4 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="20" fill="#004717"/>
<path d="M15.02 26.5V24.64C15.8733 23.9333 16.7 23.2333 17.5 22.54C18.3133 21.8467 19.0333 21.16 19.66 20.48C20.3 19.8 20.8067 19.14 21.18 18.5C21.5667 17.8467 21.76 17.2133 21.76 16.6C21.76 16.0267 21.6 15.52 21.28 15.08C20.9733 14.64 20.46 14.42 19.74 14.42C19.0067 14.42 18.4533 14.66 18.08 15.14C17.7067 15.62 17.52 16.2 17.52 16.88H15.04C15.0667 15.8533 15.2933 15 15.72 14.32C16.1467 13.6267 16.7133 13.1133 17.42 12.78C18.1267 12.4333 18.92 12.26 19.8 12.26C21.2267 12.26 22.3333 12.6533 23.12 13.44C23.92 14.2133 24.32 15.22 24.32 16.46C24.32 17.2333 24.14 17.9867 23.78 18.72C23.4333 19.4533 22.9733 20.16 22.4 20.84C21.8267 21.52 21.2067 22.16 20.54 22.76C19.8733 23.3467 19.2267 23.8933 18.6 24.4H24.66V26.5H15.02Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 899 B

View File

@@ -0,0 +1,4 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="20" fill="#004717"/>
<path d="M19.94 26.74C19.02 26.74 18.1867 26.58 17.44 26.26C16.6933 25.9267 16.0933 25.42 15.64 24.74C15.1867 24.06 14.9467 23.2067 14.92 22.18H17.44C17.4533 22.86 17.6733 23.4333 18.1 23.9C18.54 24.3533 19.1533 24.58 19.94 24.58C20.6867 24.58 21.26 24.3733 21.66 23.96C22.06 23.5467 22.26 23.0267 22.26 22.4C22.26 21.6667 21.9933 21.1133 21.46 20.74C20.94 20.3533 20.2667 20.16 19.44 20.16H18.4V18.06H19.46C20.14 18.06 20.7067 17.9 21.16 17.58C21.6133 17.26 21.84 16.7867 21.84 16.16C21.84 15.64 21.6667 15.2267 21.32 14.92C20.9867 14.6 20.52 14.44 19.92 14.44C19.2667 14.44 18.7533 14.6333 18.38 15.02C18.02 15.4067 17.82 15.88 17.78 16.44H15.28C15.3333 15.1467 15.78 14.1267 16.62 13.38C17.4733 12.6333 18.5733 12.26 19.92 12.26C20.88 12.26 21.6867 12.4333 22.34 12.78C23.0067 13.1133 23.5067 13.56 23.84 14.12C24.1867 14.68 24.36 15.3 24.36 15.98C24.36 16.7667 24.14 17.4333 23.7 17.98C23.2733 18.5133 22.74 18.8733 22.1 19.06C22.8867 19.22 23.5267 19.6067 24.02 20.22C24.5133 20.82 24.76 21.58 24.76 22.5C24.76 23.2733 24.5733 23.98 24.2 24.62C23.8267 25.26 23.28 25.7733 22.56 26.16C21.8533 26.5467 20.98 26.74 19.94 26.74Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,5 @@
<svg width="84" height="84" viewBox="0 0 84 84" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="42" cy="42" r="42" fill="#B5D0BD"/>
<circle cx="42" cy="42" r="27" fill="#066123"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M57.357 30.9319C58.6588 32.1745 58.6588 34.1891 57.357 35.4317L39.5792 52.4014C38.2775 53.644 36.1669 53.644 34.8652 52.4014L25.9763 43.9166C24.6746 42.674 24.6746 40.6594 25.9763 39.4168C27.2781 38.1742 29.3886 38.1742 30.6904 39.4168L37.2222 45.6517L52.643 30.9319C53.9447 29.6894 56.0553 29.6894 57.357 30.9319Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 579 B

View File

@@ -0,0 +1,10 @@
<svg width="300" height="28" viewBox="0 0 300 28" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M148 14L287 14" stroke="#066123" stroke-opacity="0.46" stroke-dasharray="4 4"/>
<path d="M12 14L151 14" stroke="#066123" stroke-opacity="0.5" stroke-dasharray="4 4"/>
<rect width="28" height="28" rx="14" fill="#004717"/>
<path d="M13.228 18.5V11.852L11.848 12.176V11L13.876 10.1H14.824V18.5H13.228Z" fill="white"/>
<rect x="136" width="28" height="28" rx="14" fill="#D8D8D8"/>
<path d="M147.112 18.5V17.384C147.624 16.96 148.12 16.54 148.6 16.124C149.088 15.708 149.52 15.296 149.896 14.888C150.28 14.48 150.584 14.084 150.808 13.7C151.04 13.308 151.156 12.928 151.156 12.56C151.156 12.216 151.06 11.912 150.868 11.648C150.684 11.384 150.376 11.252 149.944 11.252C149.504 11.252 149.172 11.396 148.948 11.684C148.724 11.972 148.612 12.32 148.612 12.728H147.124C147.14 12.112 147.276 11.6 147.532 11.192C147.788 10.776 148.128 10.468 148.552 10.268C148.976 10.06 149.452 9.956 149.98 9.956C150.836 9.956 151.5 10.192 151.972 10.664C152.452 11.128 152.692 11.732 152.692 12.476C152.692 12.94 152.584 13.392 152.368 13.832C152.16 14.272 151.884 14.696 151.54 15.104C151.196 15.512 150.824 15.896 150.424 16.256C150.024 16.608 149.636 16.936 149.26 17.24H152.896V18.5H147.112Z" fill="white"/>
<rect x="272" width="28" height="28" rx="14" fill="#D8D8D8"/>
<path d="M285.564 18.644C285.012 18.644 284.512 18.548 284.064 18.356C283.616 18.156 283.256 17.852 282.984 17.444C282.712 17.036 282.568 16.524 282.552 15.908H284.064C284.072 16.316 284.204 16.66 284.46 16.94C284.724 17.212 285.092 17.348 285.564 17.348C286.012 17.348 286.356 17.224 286.596 16.976C286.836 16.728 286.956 16.416 286.956 16.04C286.956 15.6 286.796 15.268 286.476 15.044C286.164 14.812 285.76 14.696 285.264 14.696H284.64V13.436H285.276C285.684 13.436 286.024 13.34 286.296 13.148C286.568 12.956 286.704 12.672 286.704 12.296C286.704 11.984 286.6 11.736 286.392 11.552C286.192 11.36 285.912 11.264 285.552 11.264C285.16 11.264 284.852 11.38 284.628 11.612C284.412 11.844 284.292 12.128 284.268 12.464H282.768C282.8 11.688 283.068 11.076 283.572 10.628C284.084 10.18 284.744 9.956 285.552 9.956C286.128 9.956 286.612 10.06 287.004 10.268C287.404 10.468 287.704 10.736 287.904 11.072C288.112 11.408 288.216 11.78 288.216 12.188C288.216 12.66 288.084 13.06 287.82 13.388C287.564 13.708 287.244 13.924 286.86 14.036C287.332 14.132 287.716 14.364 288.012 14.732C288.308 15.092 288.456 15.548 288.456 16.1C288.456 16.564 288.344 16.988 288.12 17.372C287.896 17.756 287.568 18.064 287.136 18.296C286.712 18.528 286.188 18.644 285.564 18.644Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -0,0 +1,10 @@
<svg width="300" height="28" viewBox="0 0 300 28" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M148 14L287 14" stroke="#066123" stroke-opacity="0.46" stroke-dasharray="4 4"/>
<path d="M12 14L151 14" stroke="#066123" stroke-opacity="0.8" stroke-dasharray="4 4"/>
<rect width="28" height="28" rx="14" fill="#004717"/>
<path d="M13.228 18.5V11.852L11.848 12.176V11L13.876 10.1H14.824V18.5H13.228Z" fill="white"/>
<rect x="136" width="28" height="28" rx="14" fill="#004717"/>
<path d="M147.112 18.5V17.384C147.624 16.96 148.12 16.54 148.6 16.124C149.088 15.708 149.52 15.296 149.896 14.888C150.28 14.48 150.584 14.084 150.808 13.7C151.04 13.308 151.156 12.928 151.156 12.56C151.156 12.216 151.06 11.912 150.868 11.648C150.684 11.384 150.376 11.252 149.944 11.252C149.504 11.252 149.172 11.396 148.948 11.684C148.724 11.972 148.612 12.32 148.612 12.728H147.124C147.14 12.112 147.276 11.6 147.532 11.192C147.788 10.776 148.128 10.468 148.552 10.268C148.976 10.06 149.452 9.956 149.98 9.956C150.836 9.956 151.5 10.192 151.972 10.664C152.452 11.128 152.692 11.732 152.692 12.476C152.692 12.94 152.584 13.392 152.368 13.832C152.16 14.272 151.884 14.696 151.54 15.104C151.196 15.512 150.824 15.896 150.424 16.256C150.024 16.608 149.636 16.936 149.26 17.24H152.896V18.5H147.112Z" fill="white"/>
<rect x="272" width="28" height="28" rx="14" fill="#D8D8D8"/>
<path d="M285.564 18.644C285.012 18.644 284.512 18.548 284.064 18.356C283.616 18.156 283.256 17.852 282.984 17.444C282.712 17.036 282.568 16.524 282.552 15.908H284.064C284.072 16.316 284.204 16.66 284.46 16.94C284.724 17.212 285.092 17.348 285.564 17.348C286.012 17.348 286.356 17.224 286.596 16.976C286.836 16.728 286.956 16.416 286.956 16.04C286.956 15.6 286.796 15.268 286.476 15.044C286.164 14.812 285.76 14.696 285.264 14.696H284.64V13.436H285.276C285.684 13.436 286.024 13.34 286.296 13.148C286.568 12.956 286.704 12.672 286.704 12.296C286.704 11.984 286.6 11.736 286.392 11.552C286.192 11.36 285.912 11.264 285.552 11.264C285.16 11.264 284.852 11.38 284.628 11.612C284.412 11.844 284.292 12.128 284.268 12.464H282.768C282.8 11.688 283.068 11.076 283.572 10.628C284.084 10.18 284.744 9.956 285.552 9.956C286.128 9.956 286.612 10.06 287.004 10.268C287.404 10.468 287.704 10.736 287.904 11.072C288.112 11.408 288.216 11.78 288.216 12.188C288.216 12.66 288.084 13.06 287.82 13.388C287.564 13.708 287.244 13.924 286.86 14.036C287.332 14.132 287.716 14.364 288.012 14.732C288.308 15.092 288.456 15.548 288.456 16.1C288.456 16.564 288.344 16.988 288.12 17.372C287.896 17.756 287.568 18.064 287.136 18.296C286.712 18.528 286.188 18.644 285.564 18.644Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -0,0 +1,10 @@
<svg width="300" height="28" viewBox="0 0 300 28" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M148 14L287 14" stroke="#066123" stroke-opacity="0.8" stroke-dasharray="4 4"/>
<path d="M12 14L151 14" stroke="#066123" stroke-opacity="0.8" stroke-dasharray="4 4"/>
<rect width="28" height="28" rx="14" fill="#004717"/>
<path d="M13.228 18.5V11.852L11.848 12.176V11L13.876 10.1H14.824V18.5H13.228Z" fill="white"/>
<rect x="136" width="28" height="28" rx="14" fill="#004717"/>
<path d="M147.112 18.5V17.384C147.624 16.96 148.12 16.54 148.6 16.124C149.088 15.708 149.52 15.296 149.896 14.888C150.28 14.48 150.584 14.084 150.808 13.7C151.04 13.308 151.156 12.928 151.156 12.56C151.156 12.216 151.06 11.912 150.868 11.648C150.684 11.384 150.376 11.252 149.944 11.252C149.504 11.252 149.172 11.396 148.948 11.684C148.724 11.972 148.612 12.32 148.612 12.728H147.124C147.14 12.112 147.276 11.6 147.532 11.192C147.788 10.776 148.128 10.468 148.552 10.268C148.976 10.06 149.452 9.956 149.98 9.956C150.836 9.956 151.5 10.192 151.972 10.664C152.452 11.128 152.692 11.732 152.692 12.476C152.692 12.94 152.584 13.392 152.368 13.832C152.16 14.272 151.884 14.696 151.54 15.104C151.196 15.512 150.824 15.896 150.424 16.256C150.024 16.608 149.636 16.936 149.26 17.24H152.896V18.5H147.112Z" fill="white"/>
<rect x="272" width="28" height="28" rx="14" fill="#004717"/>
<path d="M285.564 18.644C285.012 18.644 284.512 18.548 284.064 18.356C283.616 18.156 283.256 17.852 282.984 17.444C282.712 17.036 282.568 16.524 282.552 15.908H284.064C284.072 16.316 284.204 16.66 284.46 16.94C284.724 17.212 285.092 17.348 285.564 17.348C286.012 17.348 286.356 17.224 286.596 16.976C286.836 16.728 286.956 16.416 286.956 16.04C286.956 15.6 286.796 15.268 286.476 15.044C286.164 14.812 285.76 14.696 285.264 14.696H284.64V13.436H285.276C285.684 13.436 286.024 13.34 286.296 13.148C286.568 12.956 286.704 12.672 286.704 12.296C286.704 11.984 286.6 11.736 286.392 11.552C286.192 11.36 285.912 11.264 285.552 11.264C285.16 11.264 284.852 11.38 284.628 11.612C284.412 11.844 284.292 12.128 284.268 12.464H282.768C282.8 11.688 283.068 11.076 283.572 10.628C284.084 10.18 284.744 9.956 285.552 9.956C286.128 9.956 286.612 10.06 287.004 10.268C287.404 10.468 287.704 10.736 287.904 11.072C288.112 11.408 288.216 11.78 288.216 12.188C288.216 12.66 288.084 13.06 287.82 13.388C287.564 13.708 287.244 13.924 286.86 14.036C287.332 14.132 287.716 14.364 288.012 14.732C288.308 15.092 288.456 15.548 288.456 16.1C288.456 16.564 288.344 16.988 288.12 17.372C287.896 17.756 287.568 18.064 287.136 18.296C286.712 18.528 286.188 18.644 285.564 18.644Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -0,0 +1,23 @@
<svg width="123" height="32" viewBox="0 0 123 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_699_21034)">
<path d="M47.5693 0.91821C48.4315 0.784938 49.7546 0.577627 50.3194 0.533203L50.4978 0.710899C50.3938 1.54014 49.814 4.72386 49.6208 5.49387L49.0707 5.67156C48.8329 5.21252 47.8518 3.28748 47.4801 2.25093L44.0462 2.39901V8.45546C44.0462 14.8821 44.1503 15.4448 44.1949 16.0964L47.2869 16.9256L46.945 17.9918C45.3841 17.9918 43.7935 17.9622 42.2178 17.9622C40.642 17.9622 38.9176 17.9918 37.223 17.9918L37.5352 16.9256L40.0772 16.0964C40.1515 15.3115 40.1515 14.2602 40.1515 9.31432V2.41381L36.9257 2.26573C36.3013 3.25787 35.4391 4.48693 34.7405 5.37541L34.1161 5.50868C34.0715 4.8127 34.1161 1.42168 34.2648 0.696091L34.5026 0.548011C34.9634 0.548011 36.5094 0.829362 37.0743 0.933018H47.5247L47.5693 0.91821Z" fill="#002F0F"/>
<path d="M56.9354 10.1438C57.0098 8.23357 55.7313 7.75972 54.8543 7.75972C54.3043 7.75972 53.8583 7.89299 53.6056 8.01145C53.4569 9.18128 53.1893 10.4696 53.011 10.9582L52.7434 11.1952C52.4609 11.1655 50.796 9.92168 50.3798 8.663C51.3609 7.80414 53.0258 6.93047 54.3489 6.45662C55.0475 6.19007 55.553 6.04199 56.0881 6.04199C59.5964 6.04199 60.5329 8.42607 60.5329 9.98091C60.5329 11.8467 60.5031 14.0531 60.4883 15.5783C60.6369 15.8597 61.4991 16.4816 62.4357 16.763L62.3019 17.3108C61.9897 17.5922 61.0532 18.2437 59.6707 18.2437C58.0355 18.2437 57.2327 17.5182 56.9949 16.9406H56.9354C55.5827 17.8735 54.7502 18.2882 53.888 18.2882C51.6731 18.2882 50.3203 16.452 50.3203 14.8972C50.3203 13.7569 50.7068 13.135 51.4947 12.6908C52.3271 12.1725 55.1664 11.2692 56.876 10.7953L56.9057 10.129L56.9354 10.1438ZM55.8949 16.1558C56.207 16.1558 56.3854 16.0522 56.653 15.9041C56.8165 15.7708 56.8611 15.5635 56.8611 15.2822L56.9206 12.0688C56.2962 12.3354 55.5232 12.6611 54.9435 13.0313C54.3637 13.4164 54.111 13.831 54.111 14.3493C54.111 15.6968 55.1219 16.1558 55.9097 16.1558" fill="#002F0F"/>
<path d="M64.9329 8.66261L63.5505 8.07029L63.8329 7.19662C64.2789 6.88566 68.0101 6.0268 68.6939 6.05641L68.4412 7.92221L68.4858 7.95183C69.9426 6.88566 71.2359 6.05641 72.3359 6.05641C75.2496 6.05641 76.1861 8.41088 76.1861 10.173V15.7112C76.1861 16.0518 76.3645 16.1999 76.751 16.3628L78.1037 16.9255L77.8362 17.9916C76.6618 17.9916 75.4725 17.962 74.2982 17.962C73.2279 17.962 72.1873 17.9916 71.1021 17.9916L71.3102 16.9255L72.3211 16.1702C72.3508 15.5039 72.4251 13.9194 72.4251 10.9578C72.4251 9.16608 71.7264 8.42568 70.5521 8.42568C69.898 8.42568 69.3034 8.70704 68.679 9.22531V16.1702L70.0021 16.9255L69.7939 17.9916C68.7534 17.962 67.7425 17.962 66.7019 17.962C65.5573 17.962 64.4127 17.9916 63.2383 17.9916L63.5059 16.9255L64.8586 16.1702C64.8883 15.8593 64.9181 13.3715 64.9181 10.6617V8.66261H64.9329Z" fill="#002F0F"/>
<path d="M85.8339 10.1438C85.9082 8.23357 84.6298 7.75972 83.7527 7.75972C83.2027 7.75972 82.7716 7.89299 82.504 8.01145C82.3405 9.18128 82.0878 10.4696 81.9094 10.9582L81.6418 11.1952C81.3594 11.1655 79.6944 9.92168 79.2782 8.663C80.2593 7.80414 81.9243 6.93047 83.2621 6.45662C83.9608 6.19007 84.4514 6.04199 85.0014 6.04199C88.5097 6.04199 89.4462 8.42607 89.4462 9.98091C89.4462 11.8467 89.4164 14.0531 89.3867 15.5783C89.5502 15.8597 90.3976 16.4816 91.3341 16.763L91.2003 17.3108C90.8881 17.5922 89.9516 18.2437 88.5691 18.2437C86.9339 18.2437 86.1312 17.5182 85.8933 16.9406H85.8339C84.4811 17.8735 83.6486 18.2882 82.7865 18.2882C80.5715 18.2882 79.2188 16.452 79.2188 14.8972C79.2188 13.7569 79.6053 13.135 80.3931 12.6908C81.2256 12.1725 84.05 11.2692 85.7744 10.7953L85.8041 10.129L85.8339 10.1438ZM84.7933 16.1558C85.1055 16.1558 85.2838 16.0522 85.5514 15.9041C85.7149 15.7708 85.7595 15.5635 85.7595 15.2822L85.819 12.0688C85.1947 12.3354 84.4217 12.6611 83.8419 13.0313C83.2622 13.4164 83.0094 13.831 83.0094 14.3493C83.0094 15.6968 84.0203 16.1558 84.8082 16.1558" fill="#002F0F"/>
<path d="M93.9056 8.633L92.5231 8.07029L92.8056 7.19662C93.2515 6.88566 96.9976 6.0268 97.6368 6.05641L97.399 7.92221L97.4584 7.95183C99.0193 6.88566 100.09 6.05641 101.532 6.05641C103.122 6.05641 104.103 7.09297 104.52 8.05549C106.11 6.87085 107.507 6.05641 108.726 6.05641C111.61 6.05641 112.502 8.47011 112.502 10.0694V15.8445C112.502 16.1258 112.74 16.2591 113.052 16.4368L114.375 16.9255L114.108 17.9916C112.963 17.9916 111.789 17.962 110.629 17.962C109.559 17.962 108.474 17.9916 107.359 17.9916L107.597 16.9255L108.667 16.1406C108.697 15.4447 108.771 13.7862 108.771 11.2244C108.771 8.66261 107.493 8.38126 106.868 8.38126C105.991 8.38126 105.441 8.79588 104.847 9.25493C104.98 9.74359 105.084 10.2323 105.084 10.943V16.1554L106.482 16.9403L106.214 18.0064C105.233 18.0064 104.237 17.9768 103.226 17.9768C102.111 17.9768 100.967 18.0064 99.8221 18.0064L100 16.9699L101.279 16.1702C101.309 15.7556 101.338 14.0675 101.338 10.869C101.338 8.8255 100.194 8.51453 99.391 8.51453C98.8409 8.51453 98.3058 8.69223 97.6517 9.21051C97.6517 11.0171 97.6517 15.8445 97.6814 16.1702L98.9747 16.9551L98.7369 18.0212C97.726 18.0212 96.7152 17.9916 95.6895 17.9916C94.5448 17.9916 93.3704 18.0212 92.2109 18.0212L92.3893 16.9847L93.8461 16.1851C93.8759 15.8741 93.9056 14.2452 93.9056 10.6913V8.67742V8.633Z" fill="#002F0F"/>
<path d="M115.638 6.85616C116.025 6.75251 118.418 6.18981 120.663 6.02692V11.4466C120.663 14.3934 120.693 15.7706 120.722 16.2296L122.491 16.896L122.224 17.9769C121.049 17.9769 119.964 17.9473 118.76 17.9473C117.645 17.9473 116.471 17.9769 115.326 17.9769L115.564 16.896L116.857 16.2296C116.857 15.43 116.917 13.4901 116.917 11.3874V8.45542L115.386 7.77426L115.653 6.84136L115.638 6.85616ZM118.805 0.355469C119.325 0.533164 120.336 1.67338 120.722 2.39897L120.648 2.70993C120.336 3.40591 119.251 4.44247 118.745 4.75343L118.433 4.82747C117.705 4.44247 116.842 3.45033 116.486 2.78397L116.56 2.47301C117.051 1.67338 117.957 0.7849 118.537 0.429509L118.805 0.355469Z" fill="#002F0F"/>
<path d="M39.8536 31.5263C39.3185 31.2153 38.9022 30.7711 38.6049 30.1936C38.3225 29.616 38.1738 28.9497 38.1738 28.1649C38.1738 27.38 38.3225 26.7137 38.6049 26.151C38.8874 25.5735 39.3036 25.144 39.8536 24.8331C40.3888 24.5221 41.028 24.374 41.7415 24.374C42.2024 24.374 42.6483 24.4481 43.0497 24.5813C43.4659 24.7146 43.8227 24.9219 44.1349 25.1737C44.2241 25.2477 44.2835 25.3217 44.3281 25.3958C44.3579 25.4698 44.3876 25.5735 44.3876 25.6771C44.3876 25.8252 44.343 25.9585 44.2538 26.0621C44.1646 26.1658 44.0605 26.225 43.9416 26.225C43.793 26.225 43.6592 26.1806 43.5105 26.0769C43.2132 25.8548 42.9308 25.6919 42.6632 25.6031C42.3956 25.5142 42.1132 25.4698 41.801 25.4698C41.0726 25.4698 40.5077 25.6919 40.1361 26.151C39.7644 26.61 39.5712 27.2764 39.5712 28.1649C39.5712 29.0533 39.7644 29.7345 40.1361 30.1936C40.5077 30.6526 41.0726 30.8747 41.801 30.8747C42.0983 30.8747 42.3807 30.8303 42.6483 30.7414C42.901 30.6526 43.1983 30.4897 43.5254 30.2824C43.5997 30.238 43.674 30.2084 43.7335 30.1787C43.8078 30.1491 43.8822 30.1343 43.9565 30.1343C44.0754 30.1343 44.1795 30.1936 44.2687 30.2972C44.3579 30.4009 44.4025 30.5341 44.4025 30.6822C44.4025 30.7859 44.3876 30.8747 44.343 30.9636C44.3133 31.0376 44.2389 31.1116 44.1497 31.1857C43.8376 31.4522 43.4659 31.6447 43.0646 31.778C42.6632 31.9113 42.2172 31.9853 41.7564 31.9853C41.0429 31.9853 40.4036 31.8372 39.8685 31.5263" fill="#002F0F"/>
<path d="M59.0463 31.3631C59.0463 31.5259 58.9869 31.6592 58.8531 31.7777C58.7193 31.8961 58.5706 31.9406 58.4071 31.9406C58.2882 31.9406 58.1841 31.911 58.0949 31.8517C57.9909 31.7925 57.9166 31.7036 57.8571 31.5704L57.2179 30.1636H53.5015L52.8623 31.5704C52.8028 31.6888 52.7285 31.7925 52.6245 31.8517C52.5204 31.911 52.4163 31.9406 52.2974 31.9406C52.1339 31.9406 51.9852 31.8813 51.8515 31.7777C51.7177 31.674 51.6582 31.5259 51.6582 31.3631C51.6582 31.2742 51.6731 31.1854 51.7177 31.0817L54.6313 24.8328C54.6908 24.6995 54.7948 24.581 54.9286 24.507C55.0624 24.4329 55.1962 24.4033 55.3448 24.4033C55.4935 24.4033 55.6273 24.4329 55.7611 24.507C55.8949 24.581 55.9841 24.6847 56.0435 24.8328L58.972 31.0817C59.0166 31.1706 59.0315 31.2594 59.0315 31.3631M56.7422 29.1123L55.3448 25.9878L53.9475 29.1123H56.7422Z" fill="#002F0F"/>
<path d="M67.0143 31.7779C66.8954 31.6594 66.8359 31.4817 66.8359 31.2744V25.1143C66.8359 24.907 66.8954 24.7589 67.0143 24.6404C67.1333 24.522 67.2968 24.4775 67.49 24.4775H70.0915C70.8942 24.4775 71.5037 24.6848 71.9497 25.0699C72.3956 25.4697 72.6186 26.0176 72.6186 26.7432C72.6186 27.4687 72.3956 28.0166 71.9497 28.4165C71.5037 28.8163 70.8793 29.0236 70.0915 29.0236H68.2036V31.2892C68.2036 31.4965 68.1441 31.6742 68.0252 31.7927C67.9062 31.9111 67.7279 31.9704 67.5197 31.9704C67.3116 31.9704 67.1481 31.9111 67.0292 31.7927M69.928 27.987C70.8645 27.987 71.3402 27.5872 71.3402 26.7728C71.3402 25.9583 70.8645 25.5437 69.928 25.5437H68.2036V27.987H69.928Z" fill="#002F0F"/>
<path d="M80.7643 31.7774C80.6454 31.6589 80.5859 31.4812 80.5859 31.2887V25.099C80.5859 24.8917 80.6454 24.7288 80.7643 24.6103C80.8832 24.4919 81.0468 24.4326 81.2549 24.4326C81.463 24.4326 81.6265 24.4919 81.7603 24.6103C81.8792 24.7288 81.9387 24.8917 81.9387 25.099V31.2887C81.9387 31.496 81.8792 31.6589 81.7603 31.7774C81.6414 31.9106 81.463 31.9699 81.2549 31.9699C81.0468 31.9699 80.8832 31.9106 80.7643 31.7774Z" fill="#002F0F"/>
<path d="M92.2704 31.7632C92.1515 31.6448 92.092 31.4819 92.092 31.2746V25.5883H90.1744C89.7433 25.5883 89.5352 25.4106 89.5352 25.0256C89.5352 24.6406 89.7433 24.4629 90.1744 24.4629H95.3921C95.8084 24.4629 96.0314 24.6554 96.0314 25.0256C96.0314 25.3958 95.8232 25.5883 95.3921 25.5883H93.4745V31.2746C93.4745 31.4819 93.415 31.6448 93.2961 31.7632C93.1772 31.8817 93.0137 31.9409 92.8056 31.9409C92.5974 31.9409 92.4191 31.8817 92.3001 31.7632" fill="#002F0F"/>
<path d="M109.484 31.3631C109.484 31.5259 109.424 31.6592 109.291 31.7777C109.157 31.8961 109.008 31.9406 108.845 31.9406C108.726 31.9406 108.622 31.911 108.532 31.8517C108.428 31.7925 108.354 31.7036 108.295 31.5704L107.655 30.1636H103.939L103.3 31.5704C103.24 31.6888 103.166 31.7925 103.062 31.8517C102.958 31.911 102.854 31.9406 102.735 31.9406C102.571 31.9406 102.423 31.8813 102.289 31.7777C102.155 31.674 102.096 31.5259 102.096 31.3631C102.096 31.2742 102.111 31.1854 102.155 31.0817L105.069 24.8328C105.128 24.6995 105.232 24.581 105.366 24.507C105.5 24.4329 105.634 24.4033 105.782 24.4033C105.931 24.4033 106.065 24.4329 106.199 24.507C106.332 24.581 106.422 24.6847 106.496 24.8328L109.424 31.0817C109.469 31.1706 109.484 31.2594 109.484 31.3631ZM107.195 29.1123L105.797 25.9878L104.4 29.1123H107.195Z" fill="#002F0F"/>
<path d="M117.437 31.7329C117.318 31.6145 117.273 31.4664 117.273 31.2739V25.099C117.273 24.8917 117.333 24.7288 117.452 24.6103C117.571 24.4919 117.734 24.4326 117.942 24.4326C118.15 24.4326 118.329 24.4919 118.448 24.6103C118.567 24.7288 118.626 24.8917 118.626 25.099V30.7852H121.599C122.016 30.7852 122.239 30.9777 122.239 31.3479C122.239 31.7181 122.03 31.9106 121.599 31.9106H117.913C117.705 31.9106 117.556 31.8514 117.437 31.7477" fill="#002F0F"/>
<path d="M25.6429 6.13049C25.6875 5.89356 25.6429 5.65664 25.524 5.46413C24.8996 4.472 22.8333 1.37714 20.5589 0.103652C20.2913 -0.0592359 20.0981 -0.044428 19.4143 0.296155C16.0398 2.32485 6.09483 8.5738 6.09483 8.5738C4.25152 9.74363 0.624349 11.7723 0 14.571C0.252713 15.3559 1.54601 17.3697 3.6569 18.584C4.13259 18.658 4.34071 18.6728 5.79752 17.9917L13.483 14.808C13.483 17.5919 13.0667 22.1231 13.2748 25.9732C13.2748 25.9732 14.9992 28.7571 16.7682 29.69C16.7682 29.69 17.2588 30.1046 18.3886 29.2309C21.0792 27.1282 21.4508 25.7362 21.7482 24.7737C22.7144 20.4498 25.1969 8.35169 25.6578 6.11568" fill="#002F0F"/>
</g>
<defs>
<clipPath id="clip0_699_21034">
<rect width="122.462" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 295 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 268 KiB

View File

@@ -1,13 +1,13 @@
<svg width="393" height="852" viewBox="0 0 393 852" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="mask0_870_81037" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="-84" y="-145" width="539" height="1083">
<rect x="-83.6155" y="928.732" width="1073.61" height="520.354" transform="rotate(-89.0361 -83.6155 928.732)" fill="#D9D9D9"/>
<mask id="mask0_491_19657" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="-84" y="-145" width="539" height="1083">
<rect x="-83.6152" y="928.732" width="1073.61" height="520.354" transform="rotate(-89.0361 -83.6152 928.732)" fill="#D9D9D9"/>
</mask>
<g mask="url(#mask0_870_81037)">
<path d="M-235.912 890.946L-204.615 -68.0479L539.36 -43.7681C551.504 -43.3718 561.027 -33.206 560.63 -21.0622L530.769 893.955C530.372 906.099 520.207 915.622 508.063 915.226L-235.912 890.946Z" fill="#004717"/>
<g mask="url(#mask0_491_19657)">
<path d="M-235.912 890.946L-204.615 -68.0479L539.359 -43.7681C551.503 -43.3718 561.026 -33.206 560.63 -21.0622L530.768 893.955C530.372 906.099 520.206 915.622 508.062 915.226L-235.912 890.946Z" fill="#002F0F"/>
<g opacity="0.03">
<path d="M-27.2757 244.241C-21.9062 320.358 24.1712 450.218 69.6501 530.909C77.9484 545.66 92.0023 556.298 108.357 560.371L117.357 562.677C121.191 563.587 125.123 564.316 129.123 564.499C222.626 568.246 386.666 514.463 457.957 477.626C464.907 474.043 471.141 469.257 476.386 463.353L478.984 460.446C490.979 447.12 497.122 429.461 495.842 411.631C488.938 317.313 446.194 196.018 402.489 118.153C394.151 103.264 380.097 92.6263 363.566 88.458L358.577 87.1566C352.072 85.5009 345.431 84.9374 338.655 85.4663C224.698 94.8961 83.3372 140.438 7.1016 181.36C1.48167 184.38 -3.72658 188.323 -8.32792 192.827C-21.819 206.392 -28.6841 225.175 -27.3637 244.193" fill="#FBFBF6"/>
<path d="M-167.004 355.133C-161.634 431.25 -115.557 561.111 -70.078 641.802C-61.7797 656.552 -47.6769 667.1 -31.3706 671.263L-22.3713 673.57C-18.5369 674.479 -14.6049 675.209 -10.605 675.392C82.8981 679.139 246.938 625.355 318.229 588.518C325.179 584.935 331.413 580.149 336.658 574.245L339.256 571.338C351.251 558.013 357.394 540.353 356.114 522.524C349.21 428.206 306.466 306.911 262.761 229.045C254.423 214.157 240.369 203.519 223.838 199.351L218.849 198.049C212.344 196.393 205.703 195.83 198.927 196.359C84.9696 205.789 -56.3909 251.33 -132.626 292.253C-138.246 295.273 -143.455 299.215 -148.056 303.719C-161.547 317.284 -168.412 336.068 -167.092 355.085" fill="black"/>
<path d="M462.972 612.8C470.146 599.547 473.573 584.381 472.452 569.202C465.07 466.932 418.089 342.527 377.528 270.211C367.515 252.317 350.28 239.141 330.453 234.121L325.464 232.82C317.355 230.762 309.276 230.12 301.278 230.803C181.942 240.703 38.5989 288.435 -35.6527 328.217C-42.514 331.847 -48.8362 336.586 -54.3362 342.119C-70.6016 358.496 -78.9785 381.124 -77.3801 404.256C-71.5733 487.138 -21.6391 620.602 21.2433 696.623C31.217 714.378 48.3246 727.369 68.1523 732.389L77.1516 734.695C82.1891 735.906 86.884 736.699 91.5586 736.898C186.138 740.761 350.765 687.995 427.031 648.488C435.408 644.162 442.99 638.357 449.369 631.201L451.967 628.294C456.265 623.509 459.995 618.3 463.021 612.71M-44.4269 373.246C-42.0844 368.919 -39.1254 364.924 -35.5988 361.354C-32.0234 357.694 -27.8899 354.685 -23.5113 352.275C48.3945 313.672 187.212 267.57 302.841 257.996C307.946 257.611 313.197 258.006 318.411 259.313L323.4 260.614C336.322 263.878 347.537 272.397 354.072 284.094C393.252 353.914 438.536 473.67 445.689 571.736C446.681 585.68 441.816 599.717 432.37 610.226L429.772 613.133C425.572 617.737 420.686 621.504 415.252 624.392C343.315 661.58 182.061 713.373 93.1441 709.777C90.3569 709.668 87.3151 709.187 84.1066 708.383L75.1073 706.076C62.1856 702.813 51.1459 694.389 44.6015 682.919C-2.88587 598.577 -45.5659 472.537 -50.5777 401.859C-51.2824 391.802 -49.1119 381.902 -44.4269 373.246Z" fill="#747474"/>
<path d="M-27.2757 244.241C-21.9062 320.358 24.1712 450.218 69.6501 530.909C77.9484 545.66 92.0024 556.298 108.357 560.371L117.357 562.677C121.191 563.587 125.123 564.316 129.123 564.499C222.626 568.246 386.666 514.463 457.957 477.626C464.907 474.043 471.141 469.257 476.386 463.353L478.984 460.446C490.979 447.12 497.122 429.461 495.842 411.631C488.938 317.313 446.194 196.018 402.489 118.153C394.151 103.264 380.097 92.6263 363.566 88.458L358.577 87.1566C352.072 85.5009 345.431 84.9374 338.655 85.4663C224.698 94.8961 83.3372 140.438 7.10159 181.36C1.48167 184.38 -3.72657 188.323 -8.32793 192.827C-21.819 206.392 -28.6841 225.175 -27.3637 244.193" fill="#FBFBF6"/>
<path d="M-167.003 355.133C-161.634 431.25 -115.556 561.111 -70.0775 641.802C-61.7792 656.552 -47.6764 667.1 -31.3701 671.263L-22.3708 673.57C-18.5364 674.479 -14.6044 675.209 -10.6045 675.392C82.8986 679.139 246.938 625.355 318.23 588.518C325.179 584.935 331.413 580.149 336.659 574.245L339.257 571.338C351.252 558.013 357.395 540.353 356.115 522.524C349.21 428.206 306.467 306.911 262.761 229.045C254.423 214.157 240.369 203.519 223.838 199.351L218.849 198.049C212.345 196.393 205.704 195.83 198.927 196.359C84.9701 205.789 -56.3904 251.33 -132.626 292.253C-138.246 295.273 -143.454 299.215 -148.055 303.719C-161.547 317.284 -168.412 336.068 -167.091 355.085" fill="black"/>
<path d="M462.972 612.8C470.146 599.547 473.573 584.381 472.452 569.202C465.07 466.932 418.089 342.527 377.528 270.211C367.515 252.317 350.281 239.141 330.453 234.121L325.464 232.82C317.355 230.762 309.277 230.12 301.278 230.803C181.942 240.703 38.5991 288.435 -35.6525 328.217C-42.5137 331.847 -48.836 336.586 -54.3359 342.119C-70.6014 358.496 -78.9783 381.124 -77.3798 404.256C-71.5731 487.138 -21.6389 620.602 21.2436 696.623C31.2172 714.378 48.3248 727.369 68.1525 732.389L77.1518 734.695C82.1894 735.906 86.8842 736.699 91.5589 736.898C186.138 740.761 350.765 687.995 427.032 648.488C435.408 644.162 442.991 638.357 449.369 631.201L451.967 628.294C456.265 623.509 459.995 618.3 463.021 612.71M-44.4266 373.246C-42.0841 368.919 -39.1251 364.924 -35.5985 361.354C-32.0231 357.694 -27.8897 354.685 -23.5111 352.275C48.3947 313.672 187.212 267.57 302.841 257.996C307.946 257.611 313.198 258.006 318.411 259.313L323.4 260.614C336.322 263.878 347.538 272.397 354.073 284.094C393.252 353.914 438.537 473.67 445.689 571.736C446.682 585.68 441.816 599.717 432.371 610.226L429.772 613.133C425.572 617.737 420.686 621.504 415.252 624.392C343.316 661.58 182.061 713.373 93.1443 709.777C90.3571 709.668 87.3153 709.187 84.1069 708.383L75.1076 706.076C62.1858 702.813 51.1462 694.389 44.6017 682.919C-2.88562 598.577 -45.5657 472.537 -50.5774 401.859C-51.2822 391.802 -49.1117 381.902 -44.4266 373.246Z" fill="#747474"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 44 KiB

334
assets/language/ar.json Normal file
View File

@@ -0,0 +1,334 @@
{
"splashVersionText": "التطبيق: v.",
"splashCopyrightText": "© 2024 Tanami",
"welcomeTitle1Text": "يوفر Tanami الوصول إلى",
"welcomeTitle2Text": "استثمر مع",
"welcomeTitle3Text": "بمبلغ 1,000 ريال سعودي فقط",
"welcomeDescription1Text": "استثمارات خاصة عالمية حصرية",
"welcomeDescription2Text": "خبراء الاستثمار ذوي الخبرة مع سجل حافل طويل الأمد",
"welcomeDescription3Text": "ابدأ الاستثمار اليوم",
"loginText": "تسجيل الدخول",
"signUpText": "اشتراك",
"welcomeText": "مرحبا بعودتك!",
"pleaseEnterLoginDetails": "يرجى إدخال تفاصيل تسجيل الدخول الخاصة بك للبدء",
"toGetYourAccountPleaseSetYourInfo": "للحصول على حسابك، يرجى تحديد معلوماتك",
"countryOfResidence": "بلد الإقامة",
"chooseCountry": "اختر الدولة",
"phoneNumber": "رقم الهاتف",
"password": "كلمة المرور",
"enterPassword": "أدخل كلمة المرور",
"invalidPhoneNo": "رقم الهاتف غير صالح",
"enterPhoneNo": "أدخل رقم الهاتف",
"invalidPassword": "كلمة المرور غير صالحة",
"forgotPassword": "نسيت كلمة المرور",
"getStartedToday": "ابدأ اليوم",
"setupYourTanamiAccountToBegin": "قم بإعداد حساب تانامي الخاص بك لبدء الاستثمار في بضع خطوات بسيطة",
"step1": "الخطوة 1",
"step2": "الخطوة 2",
"step3": "الخطوة 3",
"enterYourCountryOfResidence": "أدخل بلد إقامتك ورقم هاتفك المحمول",
"enterNameEmailPassword": "أدخل اسمك، بريدك الإلكتروني وكلمة المرور",
"enterNameEmailUniquePassword": "أدخل اسمك وبريدك الإلكتروني واختر كلمة مرور فريدة",
"enableBiometricAuthentication": "قم بتمكين المصادقة البيومترية واختر رمز PIN فريد للوصول بسهولة",
"getStarted": "ابدأ",
"welcome": "أهلا بك!",
"selectYourCountryOfResidence": "حدد بلد إقامتك وأدخل رقم هاتفك المحمول",
"nextText": "التالي",
"backText": "رجوع",
"firstNameText": "الاسم الأول",
"lastNameText": "اسم العائلة",
"emailText": "البريد الإلكتروني",
"repeatPasswordText": "أعد إدخال كلمة المرور",
"min8CharactersSpecialCharctersText": "الحد الأدنى 8 أحرف، تتطلب أحرف خاصة",
"enterFirstName": "أدخل الاسم الأول",
"enterLastName": "أدخل اسم العائلة",
"enterEmail": "أدخل البريد الإلكتروني",
"cantBeEmptyText": "لا يمكن أن يكون فارغا",
"passwordMismatch": "عدم تطابق كلمة المرور",
"iAgreeToThe": "أوافق على",
"termsAndCondition": "الشروط والأحكام",
"andThe": " و",
"privacyPolicy": "سياسة الخصوصية",
"bahrainCountryText": "البحرين",
"kuwaitCountryText": "الكويت",
"omanCountryText": "عمان",
"qatarCountryText": "قطر",
"saudiArabiaCountryText": "المملكة العربية السعودية",
"uaeCountryText": "الإمارات العربية المتحدة",
"confirmSelectionText": "تأكيد الاختيار",
"portfolioText": "قيمة المحفظة",
"portfolio": "قيمة المحفظة: ",
"investmentamount": "مبلغ الاستثمار",
"currentval": "التقييم الحالي",
"totalreturn": "إجمالي العائد",
"disttodate": "التوزيعات حتى الآن",
"includeddocs": "وثائق الاستثمار",
"videosTitle": "فيديوهات",
"academyText": "الأكاديمية",
"exitText": "خروج",
"cancelText": "إلغاء",
"areYouSureYouWantToExitText": "هل أنت متأكد أنك تريد الخروج؟",
"faqTitle": "الأسئلة الشائعة:",
"unlockText": "افتح",
"tanamiAppIsLocked": "تطبيق تانامي مقفل",
"securityMssgText": "لأمانك، يمكنك استخدام تطبيق تانامي فقط عندما يكون مفتوحًا",
"faceIdText": "معرف الوجه",
"appAskPermissionText": "يطلب تطبيق تانامي الإذن لاستخدام معرف الوجه (أو بصمة الإصبع)",
"checkYourMessages": "تحقق من رسائلك",
"referToSameOtpMessage": "أدخل الكود المكون من 6 أرقام المرسل إلى هاتفك المحمول",
"resendSms": "إعادة إرسال الرسائل القصيرة",
"otpVerifiedSucessfully": "تم التحقق من OTP بنجاح!",
"otpVerifiedFailed": "فشل التحقق من OTP:",
"pinCode": "رمز PIN",
"createPinCode": "إنشاء رمز PIN",
"changePinCode": "تغيير رمز PIN",
"confirmPinCode": "تأكيد رمز PIN",
"incorrectPinCode": "رمز PIN غير صحيح. حاول مرة اخرى.",
"welcomeBackText": "مرحبا بعودتك",
"userYourAppPinToLoginEnterTanami": "استخدم رمز PIN لتسجيل الدخول إلى تانامي",
"forgotPinCode": "نسيت رمز PIN",
"notificationText": "إشعار",
"allowNotificationText": "السماح بالإشعار",
"toRestorePinYouWillBeLoggedOut": "لاستعادة رمز PIN ستتم تسجيل خروجك",
"allowText": "السماح",
"declineText": "رفض",
"almostHere": "تقريبًا هنا...",
"completeAcc": "أكمل ملف الحساب في 3 دقائق لبدء الاستثمار",
"restorePasswordText": "استعادة كلمة المرور",
"toRestorePasswordPleaseEnterPhoneNumber": "لاستعادة كلمة المرور، يرجى إدخال رقم الهاتف",
"createNewPasswordText": "إنشاء كلمة مرور جديدة",
"submitText": "إرسال",
"walletTitle": "رصيد المحفظة",
"walletText": "محفظة",
"day": "اليوم",
"filterTitle": "مرشحات",
"onHold": "قيد الانتظار",
"deposit": "إيداع",
"withdraw": "سحب",
"withdrawal": "انسحاب",
"yield": "عائد",
"refund": "استرداد",
"investment": "استثمار",
"walletDetailsTitle": "تفاصيل",
"withdrawalScreenTitle": "أدخل تفاصيل البنك",
"depositScreenTitle": "إخطار الإيداع",
"status": "الحالة",
"paymentMethod": "طريقة الدفع",
"accountName": "اسم الحساب",
"accountHolderName": "اسم صاحب الحساب/المستفيد",
"iban": "رقم الحساب الدولي IBAN",
"beneficiaryAddress": "عنوان المستفيد",
"bankName": "اسم البنك",
"branchAddress": "عنوان الفرع",
"SWIFTcode": "رمز SWIFT/BIC",
"refid": "معرف المرجع",
"previewTitle": "تأكيد السحب",
"info": "تم استلام طلب السحب الخاص بك وهو قيد المعالجة حاليًا.",
"info1": "يرجى تأكيد مبلغ السحب والتحقق من دقة تفاصيل البنك الخاصة بك.",
"workingDays": "تختلف أوقات المعالجة من 3-7 أيام عمل",
"balance": "رصيد المحفظة",
"withdrawTitle": "انسحاب",
"depositTitle": "إيداع",
"withdrawDetails": "تفاصيل السحب",
"depositDetails": "تفاصيل الإيداع",
"required": "الحقول بعلامة * مطلوبة",
"withdrawAmt": "إجمالي مبلغ السحب:",
"depositAmt": "إجمالي مبلغ الإيداع:",
"info2": "يمكن أن يشمل الدفع رسوم التحويل من البنك الخاص بك",
"info3": "لإتمام الدفع، يرجى استخدام تفاصيل الدفع ومعرف المرجع في بنكك",
"next": "التالي",
"depositNoti": "إنشاء إشعار إيداع",
"payWithAppleText": "الدفع بواسطة Apple Pay",
"submit": "إرسال الطلب",
"Submit": "إرسال",
"submitDeposit": "إرسال الإيداع",
"cont": "استمر",
"later": "لاحقا",
"back": "العودة للتغيير",
"clear": "مسح الكل",
"bankTransfer": "التحويل المصرفي",
"amtTrans": "مبلغ المعاملة",
"date1": "الأحدث أولا",
"date2": "الأقدم أولا",
"all": "الكل",
"byDate": "حسب التاريخ",
"byAction": "حسب نوع الإجراء",
"byStatus": "حسب الحالة",
"settingsText": "الإعدادات",
"experiencedInvestorText": "مستثمر متمرس؟",
"removeInvestmentText": "إزالة حدود الاستثمار",
"upgradeText": "قم بترقية حالة المستثمر الخاصة بك اليوم في بضع خطوات بسيطة للسماح بالاستثمارات التي تزيد عن 200,000 ريال سعودي",
"generalText": "عام",
"notificationsText": "الإخطارات",
"languageText": "اللغة",
"englishText": "الإنجليزية",
"privacySettingsText": "إعدادات الخصوصية",
"biometricText": "معرف بيومتري",
"resetPasswordText": "إعادة تعيين كلمة المرور",
"resetPinCodeText": "إعادة تعيين رمز PIN",
"supportText": "الدعم",
"contactAdminText": "الاتصال بالمشرف",
"privacyPolicyText": "سياسة الخصوصية",
"termsAndConditionText": "الشروط والأحكام",
"faqText": "الأسئلة الشائعة",
"logoutText": "تسجيل خروج",
"deleteAccountText": "حذف الحساب",
"areYouSureWantToLogoutText": "هل أنت متأكد أنك تريد تسجيل الخروج؟",
"noText": "لا",
"yesText": "نعم",
"pinUpdatedSucess": "تم تحديث رمز PIN بنجاح!",
"pinVerifiedSucess": "تم التحقق من رمز PIN بنجاح!",
"passwordUpdatedSucess": "تم تحديث كلمة المرور بنجاح!",
"changePasswordText": "تغيير كلمة المرور",
"newPasswordText": "كلمة المرور الجديدة",
"currentPsswordText": "كلمة المرور الحالية",
"byPhoneText": "عبر الهاتف",
"byEmailText": "بواسطة البريد الإلكتروني",
"weAreHereToHelp": "نحن هنا للمساعدة!",
"arabicText": "اللغة العربية",
"chooseTheLanguageText": "اختر اللغة",
"changingTheLanguageWillReloadApp": "سيؤدي تغيير اللغة إلى إعادة تحميل التطبيق",
"weAreSadToSeeYouGo": "نحن حزينون لرؤيتك تذهب :(",
"enterAdescription": "أدخل وصفا...",
"toHelpUsImprovePleaseLetusKnowWhyYouWantToDeleteAccount": "لمساعدتنا على التحسين، يرجى إخبارنا لماذا تريد حذف حسابك",
"charactersLeft": "الأحرف المتبقية",
"iUnderstandAndAgreeThatmyDataWillBeDeleted": "أنا أفهم وأوافق على حذف بياناتي",
"noIWantToStay": "لا، أريد البقاء",
"pleaseEnteraDescription": "يرجى إدخال وصف",
"pleaseCheckThisField": "يرجى التحقق من هذا الحقل",
"weHaveReceivedYourRequestToDeleteAccount": "لقد تلقينا طلبك لحذف حسابك",
"theRequestWillBeProcessed": "سيتم معالجة الطلب في غضون 72 ساعة",
"closeText": "أغلق",
"investText": "استثمر",
"availableText": "متاح",
"closedText": "مغلق",
"completeYourVerification": "أكمل التحقق الخاص بك",
"verifyYourAccountInUnderMinutesToStartInvestingToday": "تحقق من حسابك في أقل من 10 دقائق لبدء الاستثمار اليوم!",
"closingDateText": "تاريخ الإغلاق",
"closedDateText": "تاريخ الإغلاق",
"fundedText": "ممول",
"sponsorNameText": "اسم الراعي",
"estimatedReturnText": "العائد المقدر",
"originalEstimatedReturnText": "العائد المقدر الأصلي",
"actualEstimatedReturnText": "العائد الفعلي",
"actualReturnToDate": "العائد الفعلي حتى الآن",
"holdingPeriodText": "فترة الحيازة",
"payoutDateText": "تاريخ الدفع",
"expectedExitDate": "تاريخ الخروج المتوقع",
"minimumInvestmentText": "الحد الأدنى للاستثمار",
"keyMeritsOfInvestmentText": "المزايا الرئيسية",
"investmentDetailsText": "تفاصيل الاستثمار",
"enterInvestmentAmountText": "أدخل مبلغ الاستثمار",
"thisIsUsdInvestmentOpportunityText": "هذه فرصة استثمارية بالدولار الأمريكي. سيتم تحويل الأموال إلى الدولار الأمريكي بسعر x عند التأكيد",
"choosePaymentMethodText": "اختر طريقة الدفع",
"balanceText": "الرصيد",
"applePayText": "Apple Pay",
"gPayText": "جوجل الدفع",
"bankTransferText": "حول الأموال مباشرة من حسابك المصرفي إلى محفظة تانامي الخاصة بك.",
"instantTransferFundsApplePayText": "تحويل فوري للأموال باستخدام Apple Pay!",
"instantTransferFundsGpayPayText": "تحويل فوري للأموال باستخدام Google Pay!",
"retailInvestirCanInvestMaxText": "يمكن للمستثمرين التجزئة استثمار حد أقصى قدره 200,000 ريال سعودي في هذه الفرصة.",
"upgradeYourInvestorStatusToIncreaseText": "قم بترقية حالة المستثمر الخاصة بك لزيادة حد الاستثمار الخاص بك.",
"currentExchangeText": "سعر الصرف الحالي",
"feeText": "الرسوم",
"processingFees": "رسوم المعالجة",
"debitedAmountText": "المبلغ المخصوم",
"totalInvestmentAmountText": "إجمالي مبلغ الاستثمار",
"confirmInvestmentText": "تأكيد الاستثمار",
"paymentMethodText": "طريقة الدفع",
"totalDebitedAmountText": "إجمالي المبلغ المخصوم",
"unableToProcessTransactionText": "غير قادر على معالجة المعاملة",
"investmentOpportunityHasReachedMaxcapText": "وصلت فرصة الاستثمار إلى الحد الأقصى",
"backToInvestmentText": "العودة إلى الاستثمار",
"otpCheckIsFailedText": "فشل التحقق من OTP...",
"pleaseTryAgainText": "الرجاء المحاولة مرة أخرى",
"tryAgainText": "حاول مرة اخرى",
"investmentConfirmationText": "تأكيد الاستثمار",
"enterAmountText": "أدخل المبلغ",
"pleaseEnterAmountText": "الرجاء إدخال المبلغ",
"authenticationFailedText" : "المصادقة فشلت",
"pleaseAuthenticateToAccessTheApp" : "يرجى المصادقة للوصول إلى التطبيق",
"masterPinAddedSucessfullyText" : "تمت إضافة الدبوس الرئيسي بنجاح",
"passwordChangedSucessfully" : "تم تغيير الرقم السري بنجاح!",
"passwordResetSucessful" : "تمت إعادة تعيين كلمة المرور بنجاح!",
"otpSendSuccessfulText" : "تم إرسال OTP بنجاح!",
"successfulText" : "ناجح !",
"portfolioBottomText" : "مَلَفّ",
"inOrderForYouToCompleteBankTransfers" : "لكي تتمكن من إكمال التحويل المصرفي، ستحتاج إلى إنشاء إشعار إيداع وتحويل الأموال من محفظتك مباشرة إلى حسابك المصرفي.",
"tanamiWillNotifyUponReceiptFunds" : "سوف يقوم Tanami بإخطارك عند استلام أموالك وسيظهر في رصيد محفظتك بعد 3-4 أيام عمل من بدء التحويل.",
"pleaseCompleteTheBelowSteps" : "يرجى إكمال الخطوات أدناه",
"insertTheAmountYouWouldLikeToTransfer" : "أدخل المبلغ الذي ترغب في تحويله.",
"copyTheBankDetailsYourTanamiAccountShownNextPage" : "انسخ التفاصيل المصرفية لحساب Tanami الخاص بك والموضحة في الصفحة التالية. تأكد من ملاحظة المعرف المرجعي.",
"transferTheFundsDirectlyFromYourBankAccount": "تحويل الأموال مباشرة من حسابك المصرفي.",
"copyTheBankDetailsOfYourTanamiAccount" : "انسخ التفاصيل المصرفية لحساب Tanami الخاص بك. تأكد من ملاحظة المعرف المرجعي/معرف العميل.",
"youAreAllSet" : "أنت جاهز تمامًا!",
"depositNotificationCreated" : "تم إنشاء إشعار الإيداع!",
"amountDeposited" : "المبلغ المودع",
"pleaseEnsureTheFundsAreTransferredFromBank" : "يرجى التأكد من تحويل الأموال من البنك الذي تتعامل معه خلال 14 يومًا من إنشاء إشعار الإيداع.",
"manageDepositNotifications" : "إدارة إشعارات الإيداع",
"accountNo" : "رقم الحساب",
"swiftCode" :"رمز السرعة",
"bankAddress" : "عنوان البنك",
"clientId" : "معرف العميل",
"bankDetails" : "التفاصيل المصرفية",
"addBankDetails" : "إضافة تفاصيل البنك",
"updateBankDetails" : "تحديث تفاصيل البنك",
"yourAccountDetails" : "تفاصيل حسابك",
"gettingStarted": "البدء",
"knowledgeAndEducation": "المعرفة والتعليم",
"complianceSecurityAndSupport": "الامتثال والأمان والدعم",
"getStartedTitle1": "كيف أبدأ في استخدام تطبيقكم؟",
"geStartedDesc1": "لبدء الاستخدام، قم بتنزيل تطبيق Tanami من متجر التطبيقات أو متجر Google Play. اتبع التعليمات على الشاشة لإنشاء حساب وإكمال عملية التسجيل. بمجرد إعداد حسابك، يمكنك استكشاف خيارات الاستثمار لدينا.",
"getStartedTitle2": "كم من المال أحتاج للبدء في الاستثمار عبر تطبيقكم؟",
"geStartedDesc2": "يختلف الحد الأدنى لمبلغ الاستثمار حسب الفرصة الاستثمارية المحددة. ستجد الحد الأدنى لمبلغ الاستثمار ضمن صفحة كل فرصة استثمارية.",
"getStartedTitle3": "كم يستغرق فتح حساب والبدء في الاستثمار؟",
"geStartedDesc3": "يمكن عادةً إكمال عملية فتح الحساب عبر الإنترنت في غضون بضع دقائق. بمجرد الموافقة على حسابك، يمكنك البدء في استكشاف والاستثمار في الأصول البديلة عبر تطبيقنا. ومع ذلك، يرجى ملاحظة أن متطلبات التحقق الإضافية أو تمويل الحساب قد تكون ضرورية، مما قد يؤثر على الجدول الزمني.",
"investmentTitle1": "ما هي أنواع الفرص الاستثمارية المتاحة عبر تطبيقكم؟",
"investmentDesc1": "يوفر تطبيقنا مجموعة من خيارات الاستثمار البديلة، بما في ذلك صناديق الأسهم الخاصة، صناديق رأس المال الاستثماري، صناديق الاستثمار العقاري، صناديق البنية التحتية، صناديق الدين الخاص، والمزيد. يمكنك اختيار الاستثمارات بناءً على تحملك للمخاطر وأهدافك الاستثمارية.",
"investmentTitle2": "كيف تختارون الفرص الاستثمارية البديلة المتاحة على تطبيقكم؟",
"investmentDesc2": "يقوم فريقنا من المتخصصين الاستثماريين ذوي الخبرة بإجراء عمليات تدقيق وبحث شاملة لتحديد واختيار مجموعة من الفرص الاستثمارية البديلة. نأخذ في الاعتبار عوامل مثل سجل الأداء، ممارسات إدارة المخاطر، خبرة مديري الصناديق، والتوافق مع فلسفتنا الاستثمارية.",
"investmentTitle3": "هل الاستثمارات البديلة مناسبة للجميع؟",
"investmentDesc3": "قد لا تكون الاستثمارات البديلة مناسبة لجميع المستثمرين. فهي أقل سيولة من الأسهم والسندات التقليدية، وقد تتضمن مخاطر أعلى مقارنة بالاستثمارات التقليدية. من المهم مراعاة تحملك للمخاطر وأهدافك الاستثمارية بعناية قبل الاستثمار. نوصي بالتشاور مع مستشار مالي لتحديد ما إذا كانت الاستثمارات البديلة تتماشى مع استراتيجيتك الاستثمارية العامة.",
"investmentTitle4": "كيف أختار الاستثمارات عبر تطبيقكم؟",
"investmentDesc4": "يوفر تطبيقنا معلومات شاملة حول كل فرصة استثمارية، بما في ذلك تاريخ الأداء، ملف المخاطر، والتفاصيل ذات الصلة. يمكنك مراجعة الاستثمارات المتاحة، إجراء الأبحاث، وتحليل البيانات لاتخاذ قرارات مستنيرة. نقدم أيضًا مقالات قصيرة وفيديوهات حول أنواع الاستثمارات المختلفة في منطقة المعرفة لدينا.",
"investmentTitle5": "كم مرة يتم تحديث أو تجديد خيارات الاستثمار؟",
"investmentDesc5": "نقوم بمراجعة وتحليل الفرص الاستثمارية بانتظام لضمان مجموعة متنوعة وديناميكية لمستخدمينا. قد يختلف تكرار التحديثات حسب ظروف السوق وتوافر الفرص الاستثمارية الجديدة. يمكنك توقع تطور عروضنا بمرور الوقت.",
"investmentTitle6": "ما هي فوائد الاستثمار في الأصول البديلة عبر تطبيقكم؟",
"investmentDesc6": "يوفر الاستثمار في الأصول البديلة عبر تطبيقنا العديد من الفوائد، بما في ذلك الوصول إلى فرص استثمارية فريدة في فئات الأصول ذات العائد المرتفع جنبًا إلى جنب مع مديري الصف الأول عالميًا. يتم اختيار فرص الاستثمار بواسطة خبراء استثماريين متمرسين يستهدفون الاستثمارات ذات العوائد المعدلة حسب المخاطر الأعلى. تلتزم Tanami بالشفافية والتوافق التام مع المستثمرين ولا تتلقى رسوم توظيف للاستثمارات المدرجة على المنصة. من خلال تطبيقنا المتطور، نسعى لتوفير تجربة استثمارية سلسة ومجزية لمستخدمينا.",
"investmentTitle7": "هل تقدمون أي ضمانات للأداء للاستثمارات التي تتم عبر تطبيقكم؟",
"investmentDesc7": "نحن لا نقدم ضمانات أداء للاستثمارات لأنها تخضع لتقلبات السوق والمخاطر الكامنة. الأداء السابق ليس مؤشراً على النتائج المستقبلية. نشجع المستخدمين على مراجعة بيانات الأداء التاريخية، ومراعاة تحملهم للمخاطر، وإجراء العناية الواجبة الشاملة قبل اتخاذ قرارات الاستثمار.",
"investmentTitle8": "هل يمكنني الوصول إلى حساب الاستثمار الخاص بي وإجراء المعاملات عبر التطبيق في أي وقت؟",
"investmentDesc8": "نعم، يوفر تطبيقنا وصولاً على مدار الساعة طوال أيام الأسبوع إلى حساب الاستثمار الخاص بك. يمكنك عرض محفظتك، وتتبع الأداء، وإجراء المعاملات في أي وقت يناسبك. تم تصميم تطبيقنا لتقديم واجهة سلسة وسهلة الاستخدام لإدارة استثماراتك البديلة.",
"investmentTitle9": "كيف يمكنني البقاء على اطلاع بأداء وأخبار استثماراتي؟",
"investmentDesc9": "نعم، يوفر تطبيقنا ميزة تتبع المحفظة التي تتيح لك مراقبة أداء استثماراتك في الوقت الفعلي. يمكنك عرض قيمة محفظتك، وتتبع عوائد الاستثمار الفردية، وتقييم الأداء العام لاستثماراتك البديلة. يمكنك أيضًا تخصيص تفضيلاتك لتلقي تحديثات الأخبار، والرؤى السوقية، والإعلانات المتعلقة بالاستثمار.",
"investmentTitle10": "ما هي أنواع التقارير والبيانات التي يمكنني توقعها من تطبيقكم؟",
"investmentDesc10": "يوفر تطبيقنا تقارير وبيانات دورية تلخص أداء محفظة استثماراتك، والمعاملات، والممتلكات. يمكنك الوصول إلى هذه التقارير داخل التطبيق أو تنزيلها لسجلاتك.",
"investmentTitle11": "ما هي الرسوم المرتبطة باستخدام تطبيقكم والاستثمار في الأصول البديلة؟",
"investmentDesc11": "يختلف هيكل الرسوم لدينا حسب الفرصة الاستثمارية المحددة. نحن شفافون بشأن رسومنا، ويمكنك العثور على معلومات مفصلة عنها في التطبيق وفي الشروط والأحكام لكل فرصة استثمارية. تلتزم Tanami بالتماشي التام مع المستثمرين ولا تتلقى رسوم توظيف للاستثمارات المدرجة على المنصة.",
"investmentTitle12": "هل يمكنني سحب استثماراتي في أي وقت؟",
"investmentDesc12": "قد تختلف سيولة الاستثمارات البديلة حسب الفرصة الاستثمارية المحددة. قد تحتوي بعض الاستثمارات على فترات قفل محددة أو قيود على الاسترداد. يوفر تطبيقنا معلومات حول شروط السيولة المرتبطة بكل استثمار، مما يتيح لك اتخاذ قرارات مستنيرة.",
"investmentTitle13": "هل هناك أي غرامات أو رسوم على السحوبات المبكرة أو التصفية؟",
"investmentDesc13": "قد تحتوي بعض الاستثمارات البديلة على شروط محددة بشأن السحوبات المبكرة أو التصفية. قد تختلف هذه الشروط حسب المنتج الاستثماري وسياسات الصندوق الأساسي. من المهم مراجعة الشروط والأحكام لكل استثمار قبل الالتزام.",
"knowledgeTitle1": "ما هو مستوى المعرفة أو الخبرة الاستثمارية التي أحتاجها لاستخدام تطبيقكم؟",
"knowledgeDesc1": "تم تصميم تطبيقنا ليكون سهل الاستخدام ومتاحًا للمستثمرين ذوي مستويات الخبرة المختلفة. سواء كنت مستثمرًا متمرسًا أو جديدًا على الاستثمارات البديلة، يوفر تطبيقنا موارد تعليمية، وتقارير تدقيق، ودعم معرفي آخر لمساعدتك في اتخاذ قرارات مستنيرة.",
"knowledgeTitle2": "هل تقدمون أي موارد تعليمية حول الاستثمارات البديلة؟",
"knowledgeDesc2": "بالتأكيد! نحن نؤمن بتمكين المستثمرين بالمعرفة. يوفر تطبيقنا موارد تعليمية مثل المقالات، والأدلة، والفيديوهات التي تغطي جوانب مختلفة من الاستثمارات البديلة، واستراتيجيات إدارة المخاطر، والرؤى السوقية. هذه الموارد متاحة في منطقة المعرفة لدينا وهي مصممة لتعزيز فهمك لمشهد الاستثمار.",
"knowledgeTitle3": "هل تقدمون أي نصائح استثمارية أو توصيات مخصصة؟",
"knowledgeDesc3": "في الوقت الحالي، لا نقدم أي توصيات استثمارية لأي من مستثمرينا. من المهم إجراء أبحاثك الخاصة، ومراجعة تفاصيل الفرص والمستندات، واستشارة مستشار مالي قبل اتخاذ قرارات الاستثمار.",
"securityTitle1": "هل هناك أي قيود على من يمكنه استخدام تطبيقكم والاستثمار في الأصول البديلة؟",
"securityDesc1": "قد تكون هناك بعض المتطلبات الأهلية أو القيود القانونية حسب ولايتك القضائية. قبل استخدام تطبيقنا والاستثمار في أي من فرصنا، سنطلب منك إكمال نموذج معرفة عميلك (KYC) بالتفصيل. نوصي أيضًا بمراجعة والامتثال للشروط والأحكام الموضحة في تطبيقنا واللوائح ذات الصلة في بلد إقامتك.",
"securityTitle2": "هل هناك أي قيود على التوافر الجغرافي لتطبيقكم وحلول الاستثمار الخاصة بكم؟",
"securityDesc2": "يتوفر تطبيقنا وحلول الاستثمار في ولايات قضائية مختارة. يرجى الرجوع إلى الشروط والأحكام الخاصة بتطبيقنا أو الاتصال بفريق الدعم لدينا للتحقق مما إذا كانت خدماتنا متاحة في بلدك أو منطقتك.",
"securityTitle3": "هل هناك أي آثار ضريبية مرتبطة بالاستثمار في الأصول البديلة؟",
"securityDesc3": "قد يكون للاستثمارات البديلة آثار ضريبية تختلف حسب الاستثمار المحدد والولاية القضائية الخاصة بك. نوصي باستشارة محترف ضرائب لفهم ومعالجة أي اعتبارات ضريبية تتعلق باستثماراتك البديلة.",
"securityTitle4": "ما مدى أمان معلوماتي الشخصية والمالية؟",
"securityDesc4": "نحن نولي أولوية قصوى لأمان بياناتك. يستخدم تطبيقنا بروتوكولات تشفير قياسية لحماية معلوماتك الشخصية والمالية. نلتزم أيضًا بسياسات خصوصية صارمة ونمتثل للأنظمة ذات الصلة لضمان سرية وسلامة بياناتك.",
"securityTitle5": "كيف يمكنني الحصول على الدعم إذا كان لدي أسئلة أو واجهت مشاكل؟",
"securityDesc5": "لدينا فريق دعم عملاء مخصص لمساعدتك. يمكنك الاتصال بنا من خلال قسم الاتصال داخل التطبيق، أو عبر البريد الإلكتروني، أو الهاتف. نسعى لتقديم دعم سريع ومفيد لمعالجة أي أسئلة أو مخاوف قد تكون لديك.",
"websiteText" : "موقع إلكتروني",
"toRestorePasswordYouWillBeLoggedOut" : "لاستعادة كلمة المرور، سيتم تسجيل خروجك من التطبيق",
"noDataAvailable" : "لا تتوافر بيانات",
"payWithGpayText": "ادفع باستخدام Google Pay"
}

334
assets/language/en.json Normal file
View File

@@ -0,0 +1,334 @@
{
"splashVersionText": "APP: v.",
"splashCopyrightText": "© 2024 Tanami",
"welcomeTitle1Text": "Tanami offers access to",
"welcomeTitle2Text": "Invest alongside",
"welcomeTitle3Text": "With only SAR 1,000",
"welcomeDescription1Text": "Exclusive, Global Private Investments",
"welcomeDescription2Text": "Experienced Investment Experts with a long-standing track record",
"welcomeDescription3Text": "Start Investing Today ",
"loginText": "Log In",
"signUpText": "Sign Up",
"welcomeText": "Welcome back!",
"pleaseEnterLoginDetails": "Please enter your login details to get started",
"toGetYourAccountPleaseSetYourInfo": "To get your account please set your info",
"countryOfResidence": "Country of residence",
"chooseCountry": "Choose country",
"phoneNumber": "Phone number",
"password": "Password",
"enterPassword": "Enter Password",
"invalidPhoneNo": "Invalid phone number",
"enterPhoneNo": "Enter phone number",
"invalidPassword": "Invalid password",
"forgotPassword": "Forgot password",
"getStartedToday": "Get started today",
"setupYourTanamiAccountToBegin": "Setup your Tanami account to begin investing in a few simple steps",
"step1": "Step 1",
"step2": "Step 2",
"step3": "Step 3",
"enterYourCountryOfResidence": "Enter your country of residence and mobile number",
"enterNameEmailPassword": "Enter your name, email and password",
"enterNameEmailUniquePassword": "Enter your name and email and choose a unique password",
"enableBiometricAuthentication": "Enable biometric authentication and select a unique pin code for easy access",
"getStarted": "Get started",
"welcome": "Welcome!",
"selectYourCountryOfResidence": "Select your country of residence and enter your mobile number",
"nextText": "Next",
"backText": "Back",
"firstNameText": "First Name",
"lastNameText": "Last Name",
"emailText": "Email",
"repeatPasswordText": "Repeat Password",
"min8CharactersSpecialCharctersText": "Min 8 characters, special characters required",
"enterFirstName": "Enter first name",
"enterLastName": "Enter last name",
"enterEmail": "Enter email",
"cantBeEmptyText": "Can't be empty",
"passwordMismatch": "Password mismatch",
"iAgreeToThe": "I agree to the",
"termsAndCondition": "Terms & Conditions",
"andThe": " and the",
"privacyPolicy": "Privacy Policy",
"bahrainCountryText": "Bahrain",
"kuwaitCountryText": "Kuwait",
"omanCountryText": "Oman",
"qatarCountryText": "Qatar",
"saudiArabiaCountryText": "Saudi Arabia",
"uaeCountryText": "United Arab Emirates",
"confirmSelectionText": "Confirm selection",
"portfolioText": "Portfolio Value",
"portfolio": "Portfolio Value: ",
"investmentamount": "Investment Amount",
"currentval": "Current valuation",
"totalreturn": "Total return",
"disttodate": "Distributions to date",
"includeddocs": "Investment Documents",
"videosTitle": "Videos",
"academyText": "Academy",
"exitText": "Exit",
"cancelText": "Cancel",
"areYouSureYouWantToExitText": "Are you sure you want to Exit?",
"faqTitle": "Frequently Asked Questions:",
"unlockText": "Unlock",
"tanamiAppIsLocked": "Tanami Capital is locked",
"securityMssgText": "For your security, you can only use Tanami Capital when it's unlocked",
"faceIdText": "Face Id",
"appAskPermissionText": "Tanami App ask permission to use Face ID (or Fingerprint)",
"checkYourMessages": "Check your messages",
"referToSameOtpMessage": "Enter the 6-digit code sent to your mobile",
"resendSms": "Resend SMS",
"otpVerifiedSucessfully": "OTP Verified Successfully!",
"otpVerifiedFailed": "OTP Verification Failed:",
"pinCode": "Pin Code",
"createPinCode": "Create Pin Code",
"changePinCode": "Change Pin Code",
"confirmPinCode": "Confirm Pin Code",
"incorrectPinCode": "Incorrect PIN. Please try again.",
"welcomeBackText": "Welcome back",
"userYourAppPinToLoginEnterTanami": "Use your app PIN to login to enter Tanami",
"forgotPinCode": "Forgot Pin Code",
"notificationText": "Notification",
"allowNotificationText": "Allow notification",
"toRestorePinYouWillBeLoggedOut": "To restore PIN you will be Logged out",
"allowText": "Allow",
"declineText": "Decline",
"almostHere": "Almost here...",
"completeAcc": "Complete account profile in 3 minutes to start investing",
"restorePasswordText": "Restore password",
"toRestorePasswordPleaseEnterPhoneNumber": "To restore password please enter phone number",
"createNewPasswordText": "Create new password",
"submitText": "Submit",
"walletTitle": "Wallet balance",
"walletText": "Wallet",
"day": "Today",
"filterTitle": "Filters",
"onHold": "On Hold",
"deposit": "Deposit",
"withdraw": "Withdraw",
"withdrawal": "Withdrawal",
"yield": "Yield",
"refund": "Refund",
"investment": "Investment",
"walletDetailsTitle": "Details",
"withdrawalScreenTitle": "Enter bank details",
"depositScreenTitle": "Deposit notification",
"status": "Status",
"paymentMethod": "Payment Method",
"accountName": "Account Name",
"accountHolderName": "Account Holder Name/Beneficiary Name",
"iban": "IBAN",
"beneficiaryAddress": "Beneficiary Address",
"bankName": "Bank Name",
"branchAddress": "Branch Address",
"SWIFTcode": "SWIFT/BIC code",
"refid": "Reference ID",
"previewTitle": "Withdrawal confirmation",
"info": "Your withdrawal request has been received and is currently being processed.",
"info1": "Please confirm the withdrawal amount and verify the accuracy of your bank details.",
"workingDays": "Processing times vary from 3-7 working days",
"balance": "Wallet Balance",
"withdrawTitle": "Withdrawal",
"depositTitle": "Deposit",
"withdrawDetails": "Withdrawal details",
"depositDetails": "Deposit details",
"required": "Fields with * are required",
"withdrawAmt": "Total Withdrawal amount:",
"depositAmt": "Total Deposit amount:",
"info2": "Payment can include transfer fee from your bank",
"info3": "To accomplish payment please use payment details and Reference ID in tour Bank",
"next": "Next",
"depositNoti": "Create deposit notification",
"payWithAppleText": "Pay with Apple Pay",
"payWithGpayText": "Pay with Google Pay",
"submit": "Submit request",
"Submit": "Submit",
"submitDeposit": "Submit deposit",
"cont": "Continue",
"later": "Later",
"back": "Back to change",
"clear": "Clear All",
"bankTransfer": "Bank Transfer",
"amtTrans": "Amount of transaction",
"date1": "Newest first",
"date2": "Oldest first",
"all": "All",
"byDate": "By date",
"byAction": "By type of action",
"byStatus": "By status",
"settingsText": "Settings",
"experiencedInvestorText": "Experienced investor?",
"removeInvestmentText": "Remove investment thresholds",
"upgradeText": "Upgrade your investor status today in a few simple steps to allows investments higher than SAR 200,000",
"generalText": "General",
"notificationsText": "Notifications",
"languageText": "Language",
"englishText": "English",
"privacySettingsText": "Privacy Settings",
"biometricText": "Biometric ID",
"resetPasswordText": "Reset Password",
"resetPinCodeText": "Reset PIN-code",
"supportText": "Support",
"contactAdminText": "Contact Admin",
"privacyPolicyText": "Privacy Policy",
"termsAndConditionText": "Terms & Conditions",
"faqText": "FAQ",
"logoutText": "Log Out",
"deleteAccountText": "Delete account",
"areYouSureWantToLogoutText": "Are you sure you want to Logout?",
"noText": "No",
"yesText": "Yes",
"pinUpdatedSucess": "Pin updated Sucessfully !",
"pinVerifiedSucess": "Pin verified Sucessfully !",
"passwordUpdatedSucess": "Password updated Sucessfully !",
"changePasswordText": "Change Password",
"newPasswordText": "New Password",
"currentPsswordText": "Current Password",
"byPhoneText": "By phone",
"byEmailText": "By-mail",
"weAreHereToHelp": "We are here to help!",
"arabicText": "اللغة العربية",
"chooseTheLanguageText": "Choose the language",
"changingTheLanguageWillReloadApp": "Changing the language will reload the application",
"weAreSadToSeeYouGo": "We're sad to see you go :(",
"enterAdescription": "Enter a description...",
"toHelpUsImprovePleaseLetusKnowWhyYouWantToDeleteAccount": "To help us improve, please let us know why you want to delete your account",
"charactersLeft": "characters left",
"iUnderstandAndAgreeThatmyDataWillBeDeleted": "I understand and agree that my data will be deleted",
"noIWantToStay": "No, i want to stay",
"pleaseEnteraDescription": "Please enter a description",
"pleaseCheckThisField": "Please check this field",
"weHaveReceivedYourRequestToDeleteAccount": "We have received your request to delete your account",
"theRequestWillBeProcessed": "The request will be processed within 72 hours",
"closeText": "Close",
"investText": "Invest",
"availableText": "Available",
"closedText": "Closed",
"completeYourVerification": "Complete your verification",
"verifyYourAccountInUnderMinutesToStartInvestingToday": "Verify your account in under 10 minutes to start investing today!",
"closingDateText": "Closing Date",
"closedDateText": "Closed Date",
"fundedText": "funded",
"sponsorNameText": "Sponsor name",
"estimatedReturnText": "Estimated return",
"originalEstimatedReturnText": "Original estimated return",
"actualEstimatedReturnText": "Actual return",
"actualReturnToDate": "Actual return to date",
"holdingPeriodText": "Holding period",
"payoutDateText": "Payout Date",
"expectedExitDate": "Expected Exit Date",
"minimumInvestmentText": "Minimum investment",
"keyMeritsOfInvestmentText": "Key Merits",
"investmentDetailsText": "Investment details",
"enterInvestmentAmountText": "Enter investment amount",
"thisIsUsdInvestmentOpportunityText": "This is a USD investment opportunity. Funds will be converted into USD at a rate of x upon confirmation",
"choosePaymentMethodText": "Choose payment method",
"balanceText": "Balance",
"applePayText": "Apple Pay",
"gPayText": "Google Pay",
"bankTransferText": "Directly transfer funds from your bank account into your Tanami wallet.",
"instantTransferFundsApplePayText": "Instant transfer of funds using Apple Pay!",
"instantTransferFundsGpayPayText": "Instant transfer of funds using Google Pay!",
"retailInvestirCanInvestMaxText": "Retail investors can invest a maximum of SAR 200,000 in this opportunity.",
"upgradeYourInvestorStatusToIncreaseText": "Upgrade your investor status to increase your investment limit.",
"currentExchangeText": "Current Exchange",
"feeText": "Fee",
"processingFees": "Processing fee",
"debitedAmountText": "Debited amount",
"totalInvestmentAmountText": "Total Investment amount",
"confirmInvestmentText": "Confirm investment",
"paymentMethodText": "Payment method",
"totalDebitedAmountText": "Total debited amount",
"unableToProcessTransactionText": "Unable to process transaction",
"investmentOpportunityHasReachedMaxcapText": "Investment opportunity has reached maximum capacity",
"backToInvestmentText": "Back to Investment",
"otpCheckIsFailedText": "OTP Check is failed...",
"pleaseTryAgainText": "Please try again",
"tryAgainText": "Try again",
"investmentConfirmationText": "Investment confirmation",
"enterAmountText": "Enter Amount",
"pleaseEnterAmountText": "Please Enter Amount",
"authenticationFailedText" : "Authentication failed",
"pleaseAuthenticateToAccessTheApp" : "Please authenticate to access the app",
"masterPinAddedSucessfullyText" : "Master pin added sucessfully",
"passwordChangedSucessfully" : "Password changed successfully!",
"passwordResetSucessful" : "Password reset successful!",
"otpSendSuccessfulText" : "OTP send successful !",
"successfulText" : "successful !",
"portfolioBottomText" : "Portfolio",
"inOrderForYouToCompleteBankTransfers" : "In order for you to complete a bank transfer, you need will need to create a deposit notification and transfer funds from your wallet, directly into your bank account.",
"tanamiWillNotifyUponReceiptFunds" : "Tanami will notify you upon receipt of your funds and it will appear in your wallet balance 3-4 business days after initiating the transfer.",
"pleaseCompleteTheBelowSteps" : "Please complete the below steps",
"insertTheAmountYouWouldLikeToTransfer" : "Insert the amount you would like to transfer.",
"copyTheBankDetailsYourTanamiAccountShownNextPage" : "Copy the bank details of your Tanami account shown on the next page. Make sure to keep note of the reference ID.",
"transferTheFundsDirectlyFromYourBankAccount": "Transfer the funds directly from your bank account.",
"copyTheBankDetailsOfYourTanamiAccount" : "Copy the bank details of your Tanami account. Make sure to keep note of the Reference ID/ Client ID.",
"youAreAllSet" : "You're all set!",
"depositNotificationCreated" : "Deposit Notification Created!",
"amountDeposited" : "Amount Deposited",
"pleaseEnsureTheFundsAreTransferredFromBank" : "Please ensure the funds are transferred from your bank within 14 days of creating the deposit notification.",
"manageDepositNotifications" : "Manage Deposit Notifications",
"accountNo" : "Account No.",
"swiftCode" :"SWIFT Code",
"bankAddress" : "Bank Address",
"clientId" : "Client ID",
"bankDetails" : "Bank details",
"addBankDetails" : "Add bank details",
"updateBankDetails" : "Update bank details",
"yourAccountDetails" : "Your account Details",
"gettingStarted" : "Getting Started",
"knowledgeAndEducation" : "Knowledge and Education",
"complianceSecurityAndSupport": "Compliance, Security and Support",
"getStartedTitle1" : "How do I get started with your app?",
"geStartedDesc1" : "To get started, simply download the Tanami app from the App Store or Google Play Store. Follow the on-screen instructions to create an account and complete the registration process. Once your account is set up, you can explore our investment options.",
"getStartedTitle2" : "How much money do I need to start investing through your app?",
"geStartedDesc2" : "The minimum investment amount varies depending on the specific investment opportunity. You will find the minimum investment amount within the page of each investment opportunity.",
"getStartedTitle3" : "How long does it take to open an account and start investing?",
"geStartedDesc3" : "The account opening process can typically be completed online within a few minutes. Once your account is approved, you can start exploring and investing in alternative assets through our app. However, please note that additional verification requirements or account funding may be necessary, which may affect the timeline.",
"investmentTitle1" : "What types of investment opportunities are available through your app?",
"investmentDesc1" : "Our app offers a range of alternative investment options, including private equity funds, venture capital funds, real estate investment funds, infrastructure funds, private debt funds, and more. You can choose investments based on your risk tolerance and investment goals.",
"investmentTitle2" : "How do you select the alternative investment opportunities available on your app?",
"investmentDesc2" : "Our team of experienced investment professionals conducts extensive due diligence and research to identify and select a range of alternative investment opportunities. We consider factors such as performance track record, risk management practices, fund managers' expertise, and alignment with our investment philosophy.",
"investmentTitle3" : "Are alternative investments suitable for everyone?",
"investmentDesc3" : "Alternative investments may not be suitable for all investors. They are less liquid than traditional stocks and bonds, and may involve higher risks compared to traditional investments, and it is important to carefully consider your risk tolerance and investment objectives before investing. We recommend consulting with a financial advisor to determine if alternative investments align with your overall investment strategy.",
"investmentTitle4" : "How do I select investments through your app?",
"investmentDesc4" : "Our app provides comprehensive information about each investment opportunity, including performance history, risk profile, and relevant details. You can review the available investments, conduct research, and analyse the data to make informed decisions. We also offer short articles and videos about different types of investments in our Knowledge Zone.",
"investmentTitle5" : "How often are the investment options updated or refreshed?",
"investmentDesc5" : "We regularly review and analyze investment opportunities to ensure a diverse and dynamic selection for our users. The frequency of updates may vary depending on market conditions and the availability of new investment opportunities. You can expect our offerings to evolve over time.",
"investmentTitle6" : "What are the benefits of investing in alternative assets through your app?",
"investmentDesc6" : "Investing in alternative assets through our app offers several benefits, including access to unique investment opportunities in higher return asset classes alongside world class managers globally. Investment opportunities are vetted by seasoned investment experts that target investments with the highest risk-adjusted returns. Tanami is committed to transparency and total alignment with investors and does not receive placement fees for investments listed on the platform. Through our cutting-edge app, we strive to provide a seamless and rewarding investing experience for our users.",
"investmentTitle7" : "Do you offer any performance guarantees for the investments made through your app?",
"investmentDesc7" : "We do not provide performance guarantees for investments as they are subject to market fluctuations and inherent risks. Past performance is not indicative of future results. We encourage users to review historical performance data, consider their risk tolerance, and conduct thorough due diligence before making investment decisions.",
"investmentTitle8" : "Can I access my investment account and make transactions through the app at any time?",
"investmentDesc8" : "Yes, our app provides 24/7 access to your investment account. You can view your portfolio, track performance, and make transactions at your convenience. Our app is designed to offer a seamless and user-friendly interface for managing your alternative investments.",
"investmentTitle9" : "How can I stay updated on the performance and news related to my investments?",
"investmentDesc9" : "Yes, our app offers a portfolio tracking feature that allows you to monitor the performance of your investments in real-time. You can view your portfolio's value, track individual investment returns, and assess the overall performance of your alternative investments. You can also customize your preferences to receive news updates, market insights, and investment-related announcements.",
"investmentTitle10" : "What types of reporting and statements can I expect from your app?",
"investmentDesc10" : "Our app provides regular reports and statements that summarize your investment portfolio's performance, transactions, and holdings. You can access these reports within the app or download them for your records.",
"investmentTitle11" : "What are the fees associated with using your app and investing in alternative assets?",
"investmentDesc11" : "Our fee structure varies depending on the specific investment opportunity. We are transparent about our fees, and you can find detailed information about them in the app and in the terms and conditions of each investment opportunity. Tanami is committed to total alignment with investors and does not receive placement fees for investments listed on the platform.",
"investmentTitle12" : "Can I withdraw my investments at any time?",
"investmentDesc12" : "The liquidity of alternative investments may vary depending on the specific investment opportunity. Some investments may have specific lock-up periods or redemption restrictions. Our app provides information about the liquidity terms associated with each investment, allowing you to make informed decisions.",
"investmentTitle13" : "Are there any penalties or fees for early withdrawals or liquidation?",
"investmentDesc13" : "Some alternative investments may have specific terms regarding early withdrawals or liquidation. These terms can vary depending on the investment product and the underlying fund's policies. It is important to review the terms and conditions of each investment before making a commitment.",
"knowledgeTitle1" : "What level of investment knowledge or experience do I need to use your app?",
"knowledgeDesc1" : "Our app is designed to be user-friendly and accessible to investors with varying levels of experience. Whether you are a seasoned investor or new to alternative investments, our app provides educational resources, due diligence reports, and other knowledge support to help you make informed decisions.",
"knowledgeTitle2" : "Do you provide any educational resources on alternative investments?",
"knowledgeDesc2" : "Absolutely! We believe in empowering investors with knowledge. Our app offers educational resources such as articles, guides, and videos that cover various aspects of alternative investments, risk management strategies, and market insights. These resources are available in our Knowledge Zone and are designed to enhance your understanding of the investment landscape.",
"knowledgeTitle3" : "Do you provide any investment advice or personalized recommendations?",
"knowledgeDesc3" : "At the moment, we do not provide any investment recommendations to any of our investors. It is important to conduct your own research, review opportunity details and documents, and/or consult with a financial advisor before making investment decisions.",
"securityTitle1" : "Are there any restrictions on who can use your app and invest in alternative assets?",
"securityDesc1" : "There may be certain eligibility requirements or legal restrictions depending on your jurisdiction. Before using our app and investing in any of our opportunities, we will ask you to complete a detailed Know Your Customer (KYC) form. We also recommend reviewing and complying with the terms and conditions outlined in our app and relevant regulations in your country of residence.",
"securityTitle2" : "Are there any restrictions on the geographic availability of your app and investment solutions?",
"securityDesc2" : "Our app and investment solutions are available in select jurisdictions. Please refer to our app's terms and conditions or contact our support team to verify if our services are available in your country or region.",
"securityTitle3" : "Are there any tax implications associated with investing in alternative assets?",
"securityDesc3" : "Alternative investments may have tax implications that vary depending on the specific investment and your jurisdiction. We recommend consulting with a tax professional to understand and address any tax considerations related to your alternative investments.",
"securityTitle4" : "How secure is my personal and financial information?",
"securityDesc4" : "We prioritize the security of your data. Our app employs industry-standard encryption protocols to protect your personal and financial information. We also adhere to strict privacy policies and comply with relevant regulations to ensure the confidentiality and integrity of your data.",
"securityTitle5" : "How can I get support if I have questions or encounter issues?",
"securityDesc5" : "We have a dedicated customer support team available to assist you. You can reach out to us through our in-app contact section, email, or phone. We strive to provide timely and helpful support to address any questions or concerns you may have.",
"websiteText" : "website",
"toRestorePasswordYouWillBeLoggedOut" : "To restore password you will be logged out of the app",
"noDataAvailable" : "No Data Available"
}

View File

@@ -0,0 +1,37 @@
{
"provider": "google_pay",
"data": {
"environment": "TEST",
"apiVersion": 2,
"apiVersionMinor": 0,
"allowedPaymentMethods": [
{
"type": "CARD",
"tokenizationSpecification": {
"type": "PAYMENT_GATEWAY",
"parameters": {
"gateway": "example",
"gatewayMerchantId": "gatewayMerchantId"
}
},
"parameters": {
"allowedCardNetworks": ["VISA", "MASTERCARD"],
"allowedAuthMethods": ["PAN_ONLY", "CRYPTOGRAM_3DS"],
"billingAddressRequired": true,
"billingAddressParameters": {
"format": "FULL",
"phoneNumberRequired": true
}
}
}
],
"merchantInfo": {
"merchantId": "01234567890123456789",
"merchantName": "Example Merchant Name"
},
"transactionInfo": {
"countryCode": "US",
"currencyCode": "USD"
}
}
}

3
devtools_options.yaml Normal file
View File

@@ -0,0 +1,3 @@
description: This file stores settings for Dart & Flutter DevTools.
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
extensions:

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project
# platform :ios, '12.0'
platform :ios, '13.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
@@ -30,11 +30,10 @@ flutter_ios_podfile_setup
target 'Runner' do
use_frameworks!
use_modular_headers!
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
target 'RunnerTests' do
inherit! :search_paths
end
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
# target 'RunnerTests' do
# inherit! :search_paths
# end
end
post_install do |installer|

146
ios/Podfile.lock Normal file
View File

@@ -0,0 +1,146 @@
PODS:
- connectivity_plus (0.0.1):
- Flutter
- FlutterMacOS
- device_info_plus (0.0.1):
- Flutter
- Firebase/CoreOnly (10.25.0):
- FirebaseCore (= 10.25.0)
- firebase_core (2.32.0):
- Firebase/CoreOnly (= 10.25.0)
- Flutter
- FirebaseCore (10.25.0):
- FirebaseCoreInternal (~> 10.0)
- GoogleUtilities/Environment (~> 7.12)
- GoogleUtilities/Logger (~> 7.12)
- FirebaseCoreInternal (10.29.0):
- "GoogleUtilities/NSData+zlib (~> 7.8)"
- Flutter (1.0.0)
- flutter_jailbreak_detection (1.0.0):
- Flutter
- IOSSecuritySuite
- flutter_localization (0.0.1):
- Flutter
- flutter_secure_storage (6.0.0):
- Flutter
- GoogleUtilities/Environment (7.13.3):
- GoogleUtilities/Privacy
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/Logger (7.13.3):
- GoogleUtilities/Environment
- GoogleUtilities/Privacy
- "GoogleUtilities/NSData+zlib (7.13.3)":
- GoogleUtilities/Privacy
- GoogleUtilities/Privacy (7.13.3)
- IOSSecuritySuite (2.1.0)
- local_auth_darwin (0.0.1):
- Flutter
- package_info_plus (0.4.5):
- Flutter
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
- permission_handler_apple (9.3.0):
- Flutter
- PromisesObjC (2.4.0)
- secure_application (0.0.1):
- Flutter
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- sms_autofill (0.0.1):
- Flutter
- sqflite (0.0.3):
- Flutter
- FlutterMacOS
- url_launcher_ios (0.0.1):
- Flutter
DEPENDENCIES:
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
- Flutter (from `Flutter`)
- flutter_jailbreak_detection (from `.symlinks/plugins/flutter_jailbreak_detection/ios`)
- flutter_localization (from `.symlinks/plugins/flutter_localization/ios`)
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
- local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
- secure_application (from `.symlinks/plugins/secure_application/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- sms_autofill (from `.symlinks/plugins/sms_autofill/ios`)
- sqflite (from `.symlinks/plugins/sqflite/darwin`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
SPEC REPOS:
trunk:
- Firebase
- FirebaseCore
- FirebaseCoreInternal
- GoogleUtilities
- IOSSecuritySuite
- PromisesObjC
EXTERNAL SOURCES:
connectivity_plus:
:path: ".symlinks/plugins/connectivity_plus/darwin"
device_info_plus:
:path: ".symlinks/plugins/device_info_plus/ios"
firebase_core:
:path: ".symlinks/plugins/firebase_core/ios"
Flutter:
:path: Flutter
flutter_jailbreak_detection:
:path: ".symlinks/plugins/flutter_jailbreak_detection/ios"
flutter_localization:
:path: ".symlinks/plugins/flutter_localization/ios"
flutter_secure_storage:
:path: ".symlinks/plugins/flutter_secure_storage/ios"
local_auth_darwin:
:path: ".symlinks/plugins/local_auth_darwin/darwin"
package_info_plus:
:path: ".symlinks/plugins/package_info_plus/ios"
path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/darwin"
permission_handler_apple:
:path: ".symlinks/plugins/permission_handler_apple/ios"
secure_application:
:path: ".symlinks/plugins/secure_application/ios"
shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
sms_autofill:
:path: ".symlinks/plugins/sms_autofill/ios"
sqflite:
:path: ".symlinks/plugins/sqflite/darwin"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
SPEC CHECKSUMS:
connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db
device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d
Firebase: 0312a2352584f782ea56f66d91606891d4607f06
firebase_core: a626d00494efa398e7c54f25f1454a64c8abf197
FirebaseCore: 7ec4d0484817f12c3373955bc87762d96842d483
FirebaseCoreInternal: df84dd300b561c27d5571684f389bf60b0a5c934
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_jailbreak_detection: c5bf66ff6c0c4230769b6ba0bd63eb6ac4148a76
flutter_localization: f43b18844a2b3d2c71fd64f04ffd6b1e64dd54d4
flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12
GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15
IOSSecuritySuite: 45e8531b05ffa72b5661cbdb5b5b5648a8de1a84
local_auth_darwin: 4d56c90c2683319835a61274b57620df9c4520ab
package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
secure_application: 27d424e8c2e770f63e38e280b5a51f921aa9b0c8
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
sms_autofill: c461043483362c3f1709ee76eaae6eb570b31686
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
PODFILE CHECKSUM: 43a9c63a5ae3ced395468a38a1d1f52a168ba9f5
COCOAPODS: 1.15.2

View File

@@ -7,6 +7,7 @@
objects = {
/* Begin PBXBuildFile section */
086333DCEBE30744A8B72799 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4EEDFFE82DF84F0A9977AFF8 /* Pods_Runner.framework */; };
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
@@ -40,14 +41,18 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
0CE95444FD6E656EA60BAB64 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
182DD8010AE0B1F861314BE9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
4EEDFFE82DF84F0A9977AFF8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
884C9A80C1736AD2EB38D444 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -62,6 +67,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
086333DCEBE30744A8B72799 /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -76,6 +82,16 @@
path = RunnerTests;
sourceTree = "<group>";
};
3C47D009CCFEBBCC155D80D9 /* Pods */ = {
isa = PBXGroup;
children = (
884C9A80C1736AD2EB38D444 /* Pods-Runner.debug.xcconfig */,
0CE95444FD6E656EA60BAB64 /* Pods-Runner.release.xcconfig */,
182DD8010AE0B1F861314BE9 /* Pods-Runner.profile.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
};
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
@@ -94,6 +110,8 @@
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
331C8082294A63A400263BE5 /* RunnerTests */,
3C47D009CCFEBBCC155D80D9 /* Pods */,
9CDE7EA15007B060D5AF313C /* Frameworks */,
);
sourceTree = "<group>";
};
@@ -121,6 +139,14 @@
path = Runner;
sourceTree = "<group>";
};
9CDE7EA15007B060D5AF313C /* Frameworks */ = {
isa = PBXGroup;
children = (
4EEDFFE82DF84F0A9977AFF8 /* Pods_Runner.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -145,12 +171,15 @@
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
AFB70CB9889F1047B6B2F5A5 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
51B0BF3A5629B47C8A34FE1F /* [CP] Embed Pods Frameworks */,
A7D67757570BD1DB843A9A8F /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -238,6 +267,23 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
51B0BF3A5629B47C8A34FE1F /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
@@ -253,6 +299,45 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
A7D67757570BD1DB843A9A8F /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
AFB70CB9889F1047B6B2F5A5 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
@@ -361,17 +446,29 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = A89AY6VY4F;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = Tanami;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.finance";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.tanamiApp;
MARKETING_VERSION = 1;
PRODUCT_BUNDLE_IDENTIFIER = com.wdi.tanami;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
@@ -386,9 +483,14 @@
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.tanamiApp.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Debug;
@@ -403,7 +505,12 @@
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.tanamiApp.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Release;
@@ -418,7 +525,12 @@
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.tanamiApp.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Profile;
@@ -427,7 +539,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
@@ -484,7 +596,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
@@ -540,18 +652,30 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = A89AY6VY4F;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = Tanami;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.finance";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.tanamiApp;
MARKETING_VERSION = 1;
PRODUCT_BUNDLE_IDENTIFIER = com.wdi.tanami;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
@@ -562,17 +686,29 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = A89AY6VY4F;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = Tanami;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.finance";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.tanamiApp;
MARKETING_VERSION = 1;
PRODUCT_BUNDLE_IDENTIFIER = com.wdi.tanami;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;

View File

@@ -4,4 +4,7 @@
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 229 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

After

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 450 B

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 B

After

Width:  |  Height:  |  Size: 939 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 462 B

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 704 B

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 762 B

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -2,6 +2,8 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
@@ -24,8 +26,12 @@
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>NSFaceIDUsageDescription</key>
<string>Why is my app authenticating using face id?</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
@@ -41,9 +47,5 @@
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
</dict>
</plist>

View File

@@ -0,0 +1,18 @@
class ResponseData<T> {
ResponseData(this.message, this.status, {this.data});
final T? data;
final String message;
final ResponseStatus status;
@override
String toString() => message;
}
enum ResponseStatus {
SUCCESS,
FAILED,
PRIVATE,
}

10
lib/Globalconst.dart Normal file
View File

@@ -0,0 +1,10 @@
class Globalconst {
static String token = "";
static String name = "";
static String phonenumber = "";
static String isdcode = "";
static String createdpin = "";
static String firstName = "";
static String lastName = "";
static String languageSelected = "en";
}

View File

@@ -43,6 +43,9 @@ class RouteName {
static const String withdrawalConfirmation = 'withdrawalConfirmation';
static const String depositScreen = 'depositScreen';
static const String depositPreview = 'depositPreview';
static const String selectDepositMethodScreen = 'selectDepositMethodScreen';
static const String depositStepScreen = 'depositStepScreen';
static const String depositCompleteScreen = 'depositCompleteScreen';
//Biometric
static const String biometricScreen = 'biometricScreen';
@@ -75,4 +78,13 @@ class RouteName {
static const String investDetailScreen = "investDetailScreen";
static const String investPaymentScreen = "investPaymentScreen";
static const String confirmInvestScreen = "confirmInvestScreen";
//Bank Details
static const String addBankDetailsScreen = "addBankDetailsScreen";
//Vimeo
static const String vimeoScreen = "vimeoScreen";
//PDF
static const String pdfReaderScreen = "pdfReaderScreen";
}

View File

@@ -7,13 +7,15 @@ import 'package:tanami_app/features/MainScreens/Invest/presentation/pages/invest
import 'package:tanami_app/features/MainScreens/Invest/presentation/pages/payment/confirm_investment_screen.dart';
import 'package:tanami_app/features/MainScreens/Invest/presentation/pages/payment/invest_payment_screen.dart';
import 'package:tanami_app/features/MainScreens/Portfolio/presentation/pages/portfolio_details_screen.dart';
import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/deposit/depositScreen.dart';
import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/deposit/deposit_screen.dart';
import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/deposit/deposit_step_screen.dart';
import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/deposit/preview.dart';
import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/deposit/select_deposit_method_screen.dart';
import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/filter_screen.dart';
import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/walletDetails.dart';
import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/wallet_details.dart';
import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/withdrawal/confirmation.dart';
import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/withdrawal/preview.dart';
import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/withdrawal/withdrawalScreen.dart';
import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/withdrawal/withdrawal_screen.dart';
import 'package:tanami_app/features/biometric/presentation/pages/biometric_screen.dart';
import 'package:tanami_app/features/changePassword/presentation/pages/change_password_screen.dart';
import 'package:tanami_app/features/contactAdmin/presentation/pages/contact_admin_screen.dart';
@@ -28,13 +30,17 @@ import 'package:tanami_app/features/register/presentation/pages/register_step_sc
import 'package:tanami_app/features/securePin/presentation/pages/pin_screen.dart';
import 'package:tanami_app/features/welcome/presentation/pages/weclome_screen.dart';
import 'package:tanami_app/shared/components/no_internet.dart';
import 'package:tanami_app/shared/components/read_pdf.dart';
import '../../features/MainScreens/Wallet/presentation/pages/deposit/deposit_completed_screen.dart';
import '../../features/MainScreens/main_screen.dart';
import '../../features/bankDetails/presentation/pages/add_bank_details_screen.dart';
import '../../features/forgotPassword/presentation/pages/restore_password_phone_verification_screen.dart';
import '../../features/login/presentation/pages/login_screen.dart';
import '../../features/register/presentation/pages/register_user_details_screen.dart';
import '../../features/securePin/presentation/pages/confirm_pin_screen.dart';
import '../../features/splash/presentation/pages/splash_screen.dart';
import '../../shared/components/viemo_screen.dart';
/* CREATED BY - JAYESH JAIN
DATE - 24-05-2024
@@ -49,7 +55,8 @@ final goRouter = GoRouter(
name: "splash",
path: RouteName.splashScreen,
builder: (context, state) {
return const SplashScreen();
// context.read<GetCountryBlock>().add(GetCountry());
return const SplashScreen(); //const MainScreen();
},
routes: [
GoRoute(
@@ -135,6 +142,13 @@ final goRouter = GoRouter(
return const AcademyDetailsScreen();
},
),
GoRoute(
name: RouteName.addBankDetailsScreen,
path: RouteName.addBankDetailsScreen,
builder: (context, state) {
return const AddBankDetails();
},
),
GoRoute(
name: RouteName.pinScreen,
path: "${RouteName.pinScreen}/:fromScreen",
@@ -208,6 +222,27 @@ final goRouter = GoRouter(
return const DepositScreen();
},
),
GoRoute(
name: RouteName.selectDepositMethodScreen,
path: RouteName.selectDepositMethodScreen,
builder: (context, state) {
return const SelectDepositMethodScreen();
},
),
GoRoute(
name: RouteName.depositStepScreen,
path: RouteName.depositStepScreen,
builder: (context, state) {
return const DepositStepScreen();
},
),
GoRoute(
name: RouteName.depositCompleteScreen,
path: RouteName.depositCompleteScreen,
builder: (context, state) {
return const DepositeCompleteScreen();
},
),
GoRoute(
name: RouteName.depositPreview,
path: RouteName.depositPreview,
@@ -245,10 +280,11 @@ final goRouter = GoRouter(
),
GoRoute(
name: RouteName.investDetailScreen,
path: "${RouteName.investDetailScreen}/:type",
path: "${RouteName.investDetailScreen}/:type/:id",
builder: (context, state) {
return InvestDetailsScreen(
type: state.pathParameters["type"]!,
id: state.pathParameters["id"]!,
);
},
),
@@ -280,6 +316,25 @@ final goRouter = GoRouter(
return const FAQScreen();
},
),
GoRoute(
name: RouteName.vimeoScreen,
path: "${RouteName.vimeoScreen}/:videoUrl",
builder: (context, state) {
return VimeoScreen(
videoUrl: state.pathParameters["videoUrl"]!,
);
},
),
GoRoute(
name: RouteName.pdfReaderScreen,
path: "${RouteName.pdfReaderScreen}/:title/:pdfUrl",
builder: (context, state) {
return ReadPDF(
title: state.pathParameters["title"]!,
pdfUrl: state.pathParameters["pdfUrl"]!,
);
},
),
],
),
],

View File

@@ -95,10 +95,12 @@ class AppColor {
//Wallet Color
static const Color onHoldTextColor = Color(0xFF0172CB);
static const Color depositListIconColor = Color(0xFF0FA4A4);
static const Color withdrawalListIconColor = Color(0xFFE6681F);
static const Color investmentListIconColor = Color(0xFF0172CB);
static const Color yieldListIconColor = Color(0xFF4C4AEF);
static const Color refundListIconColor = Color(0xFF0E9445);
//Security
static const Color permissionTextClr = Color(0xFF007AFF);
}

View File

@@ -6,6 +6,8 @@ class AppImages {
"assets/images/welcome_screen/svg/Tanami_Capital_Splash_Logo.svg";
//Welcome
static const String welcomeLogo1 =
"assets/images/welcome_screen/Tanami_Capital_Logo.svg";
static const String welcomeLogo =
"assets/images/welcome_screen/svg/Tanami_Capital_Logo.svg";
static const String firstWelcome =
@@ -116,6 +118,10 @@ class AppImages {
'assets/images/invest_screen/svg/time_square.svg';
static const String applePayIcon =
'assets/images/invest_screen/svg/apple_pay.svg';
static const String googlePayIcon =
'assets/images/invest_screen/svg/google_pay.svg';
static const String walletSettingsIcon =
'assets/images/settings_screen/svg/wallet_settings.svg';
//No Internet
static const String noInternetImage =
@@ -129,7 +135,6 @@ class AppImages {
'assets/images/wallet_screen/search.png';
static const String walletFilterIcon =
'assets/images/wallet_screen/filter.png';
static const String depositListIcon =
'assets/images/wallet_screen/deposit_list.png';
static const String withdrawalListIcon =
@@ -140,4 +145,15 @@ class AppImages {
'assets/images/wallet_screen/yield_list.png';
static const String refundListIcon =
'assets/images/wallet_screen/refund_list.png';
static const String dStep1Icon = 'assets/images/wallet_screen/d_step_1.svg';
static const String dStep2Icon = 'assets/images/wallet_screen/d_step_2.svg';
static const String dStep3Icon = 'assets/images/wallet_screen/d_step_3.svg';
static const String dStepCount1Icon =
'assets/images/wallet_screen/deposit_step_complete_1.svg';
static const String dStep2CountIcon =
'assets/images/wallet_screen/deposit_step_complete_2.svg';
static const String dStep3CountIcon =
'assets/images/wallet_screen/deposit_step_complete_3.svg';
static const String depositCheckIcon =
'assets/images/wallet_screen/deposit_check.svg';
}

View File

@@ -1,72 +1,82 @@
class AppText {
//Splash
static const String splashVersionText = "APP: v.";
static const String splashCopyrightText = '© 2024 Tanami';
static const String splashVersionText = "splashVersionText";
static const String splashCopyrightText = "splashCopyrightText";
//Welcome
static const String welcomeTitle1Text = "Tanami offers";
static const String welcomeTitle2Text = "Invest alongside";
static const String welcomeTitle3Text = "Start investing today ";
static const String weclomeDescription1Text =
"access to best-in-class, exclusive, global private investments";
static const String weclomeDescription2Text =
"experienced investment experts with a long-standing track record";
static const String weclomeDescription3Text = "with only SAR 1,000";
static const String loginText = "Log In";
static const String signUpText = "Sign Up";
static const String welcomeTitle1Text = "welcomeTitle1Text";
static const String welcomeTitle2Text = "welcomeTitle2Text";
static const String welcomeTitle3Text = "welcomeTitle3Text";
static const String welcomeDescription1Text = "welcomeDescription1Text";
static const String welcomeDescription2Text = "welcomeDescription2Text";
static const String welcomeDescription3Text = "welcomeDescription3Text";
static const String loginText = "loginText";
static const String signUpText = "signUpText";
//Login
static const String welcomeText = "Welcome back!";
static const String pleaseEnterLoginDetails =
"Please enter your login details to get started";
static const String welcomeText = "welcomeText";
static const String pleaseEnterLoginDetails = "pleaseEnterLoginDetails";
static const String toGetYourAccountPleaseSetYourInfo =
"To get your account please set your info";
static const String countryOfResidence = "Country of residence";
static const String chooseCountry = "Choose country";
static const String phoneNumber = "Phone number";
static const String password = "Password";
static const String enterPassword = "Enter password";
static const String invalidPhoneNo = "Invalid phone number";
static const String enterPhoneNo = "Enter phone number";
static const String invalidPassword = "Invalid password";
static const String forgotPassword = "Forgot password";
"toGetYourAccountPleaseSetYourInfo";
static const String countryOfResidence = "countryOfResidence";
static const String chooseCountry = "chooseCountry";
static const String phoneNumber = "phoneNumber";
static const String password = "password";
static const String enterPassword = "enterPassword";
static const String invalidPhoneNo = "invalidPhoneNo";
static const String enterPhoneNo = "enterPhoneNo";
static const String invalidPassword = "invalidPassword";
static const String forgotPassword = "forgotPassword";
static const String passwordLength =
"Password must be between 8 and 20 characters long.";
static const String passwordLowerCase =
"Password must contain at least one lower-case letter.";
static const String passwordUpperCase =
"Password must contain at least one upper-case letter.";
static const String passwordDigit =
"Password must contain at least one digit.";
static const String passwordSpecialCharacter =
"Password must contain at least one special character (!@#\$%&*()-+=^).";
static const String authenticationFailedText = "authenticationFailedText";
static const String pleaseAuthenticateToAccessTheApp =
"pleaseAuthenticateToAccessTheApp";
//Register
static const String getStartedToday = "Get started today";
static const String getStartedToday = "getStartedToday";
static const String setupYourTanamiAccountToBegin =
"Setup your Tanami account to begin investing in a few simple steps";
static const String step1 = "Step 1";
static const String step2 = "Step 2";
static const String step3 = "Step 3";
"setupYourTanamiAccountToBegin";
static const String step1 = "step1";
static const String step2 = "step2";
static const String step3 = "step3";
static const String enterYourCountryOfResidence =
"Enter your country of residence and mobile number";
static const String enterNameEmailPassword =
"Enter your name, email and password";
"enterYourCountryOfResidence";
static const String enterNameEmailPassword = "enterNameEmailPassword";
static const String enterNameEmailUniquePassword =
"Enter your name and email and choose a unique password";
"enterNameEmailUniquePassword";
static const String enableBiometricAuthentication =
"Enable biometric authentication and select a unique pin code for easy access";
static const String getStarted = "Get started";
static const String welcome = "Welcome!";
"enableBiometricAuthentication";
static const String getStarted = "getStarted";
static const String welcome = "welcome";
static const String selectYourCountryOfResidence =
"Select your country of residence and enter your mobile number";
static const String nextText = "Next";
static const String backText = "Back";
static const String firstNameText = "First Name";
static const String lastNameText = "Last Name";
static const String emailText = "Email";
static const String repeatPasswordText = "Repeat Password";
"selectYourCountryOfResidence";
static const String nextText = "nextText";
static const String backText = "backText";
static const String firstNameText = "firstNameText";
static const String lastNameText = "lastNameText";
static const String emailText = "emailText";
static const String repeatPasswordText = "repeatPasswordText";
static const String min8CharactersSpecialCharctersText =
"Min 8 characters, special characters required";
static const String enterFirstName = "Enter first name";
static const String enterLastName = "Enter last name";
static const String enterEmail = "Enter email";
static const String cantBeEmptyText = "Can't be empty";
static const String passwordMismatch = "Password mismatch";
static const String iAgreeToThe = "I agree to the ";
static const String termsAndCondition = "Terms & Conditions";
static const String andThe = " and the";
static const String privacyPolicy = "Privacy Policy";
"min8CharactersSpecialCharctersText";
static const String enterFirstName = "enterFirstName";
static const String enterLastName = "enterLastName";
static const String enterEmail = "enterEmail";
static const String cantBeEmptyText = "cantBeEmptyText";
static const String passwordMismatch = "passwordMismatch";
static const String iAgreeToThe = "iAgreeToThe";
static const String termsAndCondition = "termsAndCondition";
static const String andThe = "andThe";
static const String privacyPolicy = "privacyPolicy";
static const String successfulText = "successfulText";
//Country Name
static const String bahrainCountryText = "Bahrain";
@@ -75,231 +85,332 @@ class AppText {
static const String qatarCountryText = "Qatar";
static const String saudiArabiaCountryText = "Saudi Arabia";
static const String uaeCountryText = "United Arab Emirates";
static const String confirmSelectionText = "Confirm selection";
static const String confirmSelectionText = "confirmSelectionText";
//Portfolio
static const String portfolioText = "Portfolio Value";
static const String portfolio = "Portfolio Value: ";
static const String investmentamount = "Investment Amount";
static const String currentval = "Current valuation";
static const String totalreturn = "Total return";
static const String disttodate = "Distributions to date";
static const String includeddocs = "Included Documents";
static const String portfolioText = "portfolioText";
static const String portfolio = "portfolio";
static const String investmentamount = "investmentamount";
static const String currentval = "currentval";
static const String totalreturn = "totalreturn";
static const String disttodate = "disttodate";
static const String includeddocs = "includeddocs";
static const String portfolioBottomText = "portfolioBottomText";
//Academy
static const String videosTitle = "Videos";
static const String academyText = "Academy";
static const String videosTitle = "videosTitle";
static const String academyText = "academyText";
//Dialog
static const String exitText = "Exit";
static const String cancelText = "Cancel";
static const String exitText = "exitText";
static const String cancelText = "cancelText";
static const String areYouSureYouWantToExitText =
"Are you sure you want to Exit?";
"areYouSureYouWantToExitText";
//FAQ
static const String faqTitle = "faqTitle";
static const String gettingStarted = "gettingStarted";
static const String knowledgeAndEducation = "knowledgeAndEducation";
static const String complianceSecurityAndSupport =
"complianceSecurityAndSupport";
static const String getStartedTitle1 = "getStartedTitle1";
static const String geStartedDesc1 = "geStartedDesc1";
static const String getStartedTitle2 = "getStartedTitle2";
static const String geStartedDesc2 = "geStartedDesc2";
static const String getStartedTitle3 = "getStartedTitle3";
static const String geStartedDesc3 = "geStartedDesc3";
static const String investmentTitle1 = "investmentTitle1";
static const String investmentDesc1 = "investmentDesc1";
static const String investmentTitle2 = "investmentTitle2";
static const String investmentDesc2 = "investmentDesc2";
static const String investmentTitle3 = "investmentTitle3";
static const String investmentDesc3 = "investmentDesc3";
static const String investmentTitle4 = "investmentTitle4";
static const String investmentDesc4 = "investmentDesc4";
static const String investmentTitle5 = "investmentTitle5";
static const String investmentDesc5 = "investmentDesc5";
static const String investmentTitle6 = "investmentTitle6";
static const String investmentDesc6 = "investmentDesc6";
static const String investmentTitle7 = "investmentTitle7";
static const String investmentDesc7 = "investmentDesc7";
static const String investmentTitle8 = "investmentTitle8";
static const String investmentDesc8 = "investmentDesc8";
static const String investmentTitle9 = "investmentTitle9";
static const String investmentDesc9 = "investmentDesc9";
static const String investmentTitle10 = "investmentTitle10";
static const String investmentDesc10 = "investmentDesc10";
static const String investmentTitle11 = "investmentTitle11";
static const String investmentDesc11 = "investmentDesc11";
static const String investmentTitle12 = "investmentTitle12";
static const String investmentDesc12 = "investmentDesc12";
static const String investmentTitle13 = "investmentTitle13";
static const String investmentDesc13 = "investmentDesc13";
static const String knowledgeTitle1 = "knowledgeTitle1";
static const String knowledgeDesc1 = "knowledgeDesc1";
static const String knowledgeTitle2 = "knowledgeTitle2";
static const String knowledgeDesc2 = "knowledgeDesc2";
static const String knowledgeTitle3 = "knowledgeTitle3";
static const String knowledgeDesc3 = "knowledgeDesc3";
static const String securityTitle1 = "securityTitle1";
static const String securityDesc1 = "securityDesc1";
static const String securityTitle2 = "securityTitle2";
static const String securityDesc2 = "securityDesc2";
static const String securityTitle3 = "securityTitle3";
static const String securityDesc3 = "securityDesc3";
static const String securityTitle4 = "securityTitle4";
static const String securityDesc4 = "securityDesc4";
static const String securityTitle5 = "securityTitle5";
static const String securityDesc5 = "securityDesc5";
//Security
static const String unlockText = "unlockText";
static const String tanamiAppIsLocked = "tanamiAppIsLocked";
static const String securityMssgText = "securityMssgText";
static const String faceIdText = "faceIdText";
static const String appAskPermissionText = "appAskPermissionText";
//OTP
static const String checkYourMessages = "Check your messages";
static const String referToSameOtpMessage =
"Enter the 6-digit code sent to your mobile";
static const String resendSms = "Resend SMS";
static const String otpVerifiedSucessfully = "OTP Verified Successfully!";
static const String otpVerifiedFailed = "OTP Verification Failed:";
static const String checkYourMessages = "checkYourMessages";
static const String referToSameOtpMessage = "referToSameOtpMessage";
static const String resendSms = "resendSms";
static const String otpVerifiedSucessfully = "otpVerifiedSucessfully";
static const String otpVerifiedFailed = "otpVerifiedFailed";
static const String otpSendSuccessfulText = "otpSendSuccessfulText";
//Pin Code
static const String pinCode = "Pin Code";
static const String createPinCode = "Create Pin Code";
static const String changePinCode = "Change Pin Code";
static const String confirmPinCode = "Confirm Pin Code";
static const String incorrectPinCode = "Incorrect PIN. Please try again.";
static const String welcomeBackText = "Welcome back";
static const String pinCode = "pinCode";
static const String createPinCode = "createPinCode";
static const String changePinCode = "changePinCode";
static const String confirmPinCode = "confirmPinCode";
static const String incorrectPinCode = "incorrectPinCode";
static const String welcomeBackText = "welcomeBackText";
static const String userYourAppPinToLoginEnterTanami =
"Use your app PIN to login to enter Tanami";
static const String forgotPinCode = "Forgot Pin Code";
static const String notificationText = "Notification";
"userYourAppPinToLoginEnterTanami";
static const String forgotPinCode = "forgotPinCode";
static const String notificationText = "notificationText";
static const String allowNotificationText = "allowNotificationText";
static const String toRestorePinYouWillBeLoggedOut =
"To restore PIN you will be Logged out";
static const String allowText = "Allow";
static const String declineText = "Decline";
"toRestorePinYouWillBeLoggedOut";
static const String allowText = "allowText";
static const String declineText = "declineText";
static const String masterPinAddedSucessfullyText =
"masterPinAddedSucessfullyText";
static const String toRestorePasswordYouWillBeLoggedOut =
"toRestorePasswordYouWillBeLoggedOut";
//Forgot Password
static const String restorePasswordText = "Restore password";
static const String almostHere = "almostHere";
static const String completeAcc = "completeAcc";
static const String restorePasswordText = "restorePasswordText";
static const String toRestorePasswordPleaseEnterPhoneNumber =
"To restore password please enter phone number";
static const String createNewPasswordText = "Create new password";
static const String submitText = "Submit";
"toRestorePasswordPleaseEnterPhoneNumber";
static const String createNewPasswordText = "createNewPasswordText";
static const String submitText = "submitText";
static const String passwordChangedSucessfully = "passwordChangedSucessfully";
static const String passwordResetSucessful = "passwordResetSucessful";
//Wallet
static const String walletTitle = "Wallet balance";
static const String walletText = "Wallet";
static const String day = "Today";
static const String filterTitle = "Filters";
static const String onHold = "On Hold";
static const String deposit = "Deposit";
static const String withdrawal = "Withdrawal";
static const String yield = "Yield";
static const String refund = "Refund";
static const String investment = "Investment";
static const String walletDetailsTitle = "Details";
static const String withdrawalScreenTitle = 'Enter bank details';
static const String depositScreenTitle = 'Deposit notification';
static const String status = "Status";
static const String paymentMethod = "Payment Method";
static const String accountName = "Account Name";
static const String accountHolderName =
'Account Holder Name/Beneficiary Name';
static const String iban = "IBAN";
static const String beneficiaryAddress = "Beneficiary Address";
static const String bankName = "Bank Name";
static const String branchAddress = "Branch Address";
static const String SWIFTcode = "SWIFT/BIC code";
static const String refid = "Reference ID";
static const String previewTitle = "Withdrawal confirmation";
static const String info =
'Your withdrawal request has been received and is currently being processed.';
static const String info1 =
'Please confirm the withdrawal amount and verify the accuracy of your bank details.';
static const String workingDays =
'Processing times vary from 3-7 working days';
static const String balance = 'Wallet Balance';
static const String withdrawTitle = 'Withdrawal';
static const String depositTitle = 'Deposit';
static const String withdrawDetails = 'Withdrawal details';
static const String depositDetails = 'Deposit details';
static const String required = 'Fields with * are required';
static const String withdrawAmt = 'Total Withdrawal amount:';
static const String depositAmt = 'Total Deposit amount:';
static const String info2 = 'Payment can include transfer fee from your bank';
static const String info3 =
'To accomplish payment please use payment details and Reference ID in tour Bank';
static const String next = 'Next';
static const String depositNoti = 'Create deposit notification';
static const String submit = 'Submit request';
static const String Submit = 'Submit';
static const String submitDeposit = 'Submit deposit';
static const String cont = 'Continue';
static const String later = 'Later';
static const String back = 'Back to change';
static const String clear = 'Clear All';
static const String bankTransfer = 'Bank Transfer';
static const String amtTrans = 'Amount of transaction';
static const String date1 = 'Newest first';
static const String date2 = 'Oldest first';
static const String all = 'All';
static const String byDate = 'By date';
static const String byAction = 'By type of action';
static const String byStatus = 'By status';
static const String walletTitle = "walletTitle";
static const String walletText = "walletText";
static const String day = "day";
static const String filterTitle = "filterTitle";
static const String onHold = "onHold";
static const String deposit = "deposit";
static const String withdraw = "withdraw";
static const String withdrawal = "withdrawal";
static const String yield = "yield";
static const String refund = "refund";
static const String investment = "investment";
static const String walletDetailsTitle = "walletDetailsTitle";
static const String withdrawalScreenTitle = "withdrawalScreenTitle";
static const String depositScreenTitle = "depositScreenTitle";
static const String status = "status";
static const String paymentMethod = "paymentMethod";
static const String accountName = "accountName";
static const String accountHolderName = "accountHolderName";
static const String iban = "iban";
static const String beneficiaryAddress = "beneficiaryAddress";
static const String bankName = "bankName";
static const String branchAddress = "branchAddress";
static const String SWIFTcode = "SWIFTcode";
static const String refid = "refid";
static const String previewTitle = "previewTitle";
static const String info = "info";
static const String info1 = "info1";
static const String workingDays = "workingDays";
static const String balance = "balance";
static const String withdrawTitle = "withdrawTitle";
static const String depositTitle = "depositTitle";
static const String withdrawDetails = "withdrawDetails";
static const String depositDetails = "depositDetails";
static const String required = "required";
static const String withdrawAmt = "withdrawAmt";
static const String depositAmt = "depositAmt";
static const String info2 = "info2";
static const String info3 = "info3";
static const String next = "next";
static const String depositNoti = "depositNoti";
static const String payWithAppleText = "payWithAppleText";
static const String payWithGpayText = "payWithGpayText";
static const String submit = "submit";
static const String Submit = "Submit";
static const String submitDeposit = "submitDeposit";
static const String cont = "cont";
static const String later = "later";
static const String back = "back";
static const String clear = "clear";
static const String bankTransfer = "bankTransfer";
static const String amtTrans = "amtTrans";
static const String date1 = "date1";
static const String date2 = "date2";
static const String all = "all";
static const String byDate = "byDate";
static const String byAction = "byAction";
static const String byStatus = "byStatus";
static const String inOrderForYouToCompleteBankTransfers =
"inOrderForYouToCompleteBankTransfers";
static const String tanamiWillNotifyUponReceiptFunds =
"tanamiWillNotifyUponReceiptFunds";
static const String pleaseCompleteTheBelowSteps =
"pleaseCompleteTheBelowSteps";
static const String insertTheAmountYouWouldLikeToTransfer =
"insertTheAmountYouWouldLikeToTransfer";
static const String copyTheBankDetailsYourTanamiAccountShownNextPage =
"copyTheBankDetailsYourTanamiAccountShownNextPage";
static const String transferTheFundsDirectlyFromYourBankAccount =
"transferTheFundsDirectlyFromYourBankAccount";
static const String copyTheBankDetailsOfYourTanamiAccount =
"copyTheBankDetailsOfYourTanamiAccount";
static const String youAreAllSet = "youAreAllSet";
static const String depositNotificationCreated = "depositNotificationCreated";
static const String amountDeposited = "amountDeposited";
static const String pleaseEnsureTheFundsAreTransferredFromBank =
"pleaseEnsureTheFundsAreTransferredFromBank";
static const String manageDepositNotifications = "manageDepositNotifications";
static const String accountNo = "accountNo";
static const String swiftCode = "swiftCode";
static const String bankAddress = "bankAddress";
static const String clientId = "clientId";
static const String updateBankDetails = "updateBankDetails";
static const String yourAccountDetails = "yourAccountDetails";
//Settings
static const String settingsText = "Settings";
static const String experiencedInvestorText = "Experienced investor?";
static const String upgradeText =
"Upgrade your investor status today in a few simple steps to allows investments higher than SAR 200,000";
static const String generalText = "General";
static const String notificationsText = "Notifications";
static const String languageText = "Language";
static const String settingsText = "settingsText";
static const String experiencedInvestorText = "experiencedInvestorText";
static const String removeInvestmentText = "removeInvestmentText";
static const String upgradeText = "upgradeText";
static const String generalText = "generalText";
static const String notificationsText = "notificationsText";
static const String languageText = "languageText";
static const String englishText = "English";
static const String privacySettingsText = "Privacy Settings";
static const String biometricText = "Biometric ID";
static const String resetPasswordText = "Reset Password";
static const String resetPinCodeText = "Reset PIN-code";
static const String supportText = "Support";
static const String contactAdminText = "Contact Admin";
static const String privacyPolicyText = "Privacy Policy";
static const String termsAndConditionText = "Terms & Conditions";
static const String faqText = "FAQ";
static const String logoutText = "Log Out";
static const String deleteAccountText = "Delete account";
static const String areYouSureWantToLogoutText =
"Are you sure you want to Logout?";
static const String noText = "No";
static const String yesText = "Yes";
static const String pinUpdatedSucess = "Pin updated Sucessfully !";
static const String pinVerifiedSucess = "Pin verified Sucessfully !";
static const String passwordUpdatedSucess = "Password updated Sucessfully !";
static const String changePasswordText = "Change Password";
static const String newPasswordText = "New Password";
static const String currentPsswordText = "Current Password";
static const String privacySettingsText = "privacySettingsText";
static const String biometricText = "biometricText";
static const String resetPasswordText = "resetPasswordText";
static const String resetPinCodeText = "resetPinCodeText";
static const String supportText = "supportText";
static const String contactAdminText = "contactAdminText";
static const String privacyPolicyText = "privacyPolicyText";
static const String termsAndConditionText = "termsAndConditionText";
static const String faqText = "faqText";
static const String logoutText = "logoutText";
static const String deleteAccountText = "deleteAccountText";
static const String areYouSureWantToLogoutText = "areYouSureWantToLogoutText";
static const String noText = "noText";
static const String yesText = "yesText";
static const String pinUpdatedSucess = "pinUpdatedSucess";
static const String pinVerifiedSucess = "pinVerifiedSucess";
static const String passwordUpdatedSucess = "passwordUpdatedSucess";
static const String changePasswordText = "changePasswordText";
static const String newPasswordText = "newPasswordText";
static const String currentPsswordText = "currentPsswordText";
static const String bankDetails = "bankDetails";
static const String addBankDetails = "addBankDetails";
static const String websiteText = "websiteText";
//Contact Admin
static const String byPhoneText = "By phone";
static const String byEmailText = "By-mail";
static const String weAreHereToHelp = "We are here to help!";
static const String byPhoneText = "byPhoneText";
static const String byEmailText = "byEmailText";
static const String weAreHereToHelp = "weAreHereToHelp";
//Language Screen
static const String arabicText = "اللغة العربية";
static const String chooseTheLanguageText = "Choose the language";
static const String chooseTheLanguageText = "chooseTheLanguageText";
static const String changingTheLanguageWillReloadApp =
"Changing the language will reload the application";
"changingTheLanguageWillReloadApp";
//Delete Screen
static const String weAreSadToSeeYouGo = "We're sad to see you go :(";
static const String enterAdescription = "Enter a description...";
static const String weAreSadToSeeYouGo = "weAreSadToSeeYouGo";
static const String enterAdescription = "enterAdescription";
static const String toHelpUsImprovePleaseLetusKnowWhyYouWantToDeleteAccount =
"To help us improve, please let us know why you want to delete your account";
static const String charactersLeft = "characters left";
"toHelpUsImprovePleaseLetusKnowWhyYouWantToDeleteAccount";
static const String charactersLeft = "charactersLeft";
static const String iUnderstandAndAgreeThatmyDataWillBeDeleted =
"I understand and agree that my data will be deleted";
static const String noIWantToStay = "No, i want to stay";
static const String pleaseEnteraDescription = "Please enter a description";
static const String pleaseCheckThisField = "Please check this field";
"iUnderstandAndAgreeThatmyDataWillBeDeleted";
static const String noIWantToStay = "noIWantToStay";
static const String pleaseEnteraDescription = "pleaseEnteraDescription";
static const String pleaseCheckThisField = "pleaseCheckThisField";
static const String weHaveReceivedYourRequestToDeleteAccount =
"We have received your request to delete your account";
static const String theRequestWillBeProcessed =
"The request will be processed within 72 hours";
static const closeText = "Close";
"weHaveReceivedYourRequestToDeleteAccount";
static const String theRequestWillBeProcessed = "theRequestWillBeProcessed";
static const String closeText = "closeText";
//Invest
static const String investText = "Invest";
static const String availableText = "Available";
static const String closedText = "Closed";
static const String completeYourVerification = "Complete your verification";
static const String investText = "investText";
static const String availableText = "availableText";
static const String closedText = "closedText";
static const String completeYourVerification = "completeYourVerification";
static const String verifyYourAccountInUnderMinutesToStartInvestingToday =
"Verify your account in under 10 minutes to start investing today!";
static const String closingDateText = "Closing Date";
static const String fundedText = "funded";
static const String sponsorNameText = "Sponsor name";
static const String estimatedReturnText = "Estimated return";
static const String originalEstimatedReturnText = "Original estimated return";
static const String actualEstimatedReturnText = "Actual return";
static const String holdingPeriodText = "Holding period";
static const String payoutDateText = "Payout Date";
static const String minimumInvestmentText = "Minimum investment";
static const String keyMeritsOfInvestmentText = "Key Merits of Investment";
static const String investmentDetailsText = "Investment details";
static const String enterInvestmentAmountText = "Enter investment amount";
"verifyYourAccountInUnderMinutesToStartInvestingToday";
static const String closingDateText = "closingDateText";
static const String closedDateText = "closedDateText";
static const String fundedText = "fundedText";
static const String sponsorNameText = "sponsorNameText";
static const String estimatedReturnText = "estimatedReturnText";
static const String originalEstimatedReturnText =
"originalEstimatedReturnText";
static const String actualEstimatedReturnText = "actualEstimatedReturnText";
static const String actualReturnToDate = "actualReturnToDate";
static const String holdingPeriodText = "holdingPeriodText";
static const String payoutDateText = "payoutDateText";
static const String expectedExitDate = "expectedExitDate";
static const String minimumInvestmentText = "minimumInvestmentText";
static const String keyMeritsOfInvestmentText = "keyMeritsOfInvestmentText";
static const String investmentDetailsText = "investmentDetailsText";
static const String enterInvestmentAmountText = "enterInvestmentAmountText";
static const String thisIsUsdInvestmentOpportunityText =
"This is a USD investment opportunity. Funds will be converted into USD upon confirmation.";
static const String choosePaymentMethodText = "Choose payment method";
static const String balanceText = "Balance";
static const String applePayText = "Apple Pay";
static const String gPayText = "Gpay Pay";
"thisIsUsdInvestmentOpportunityText";
static const String choosePaymentMethodText = "choosePaymentMethodText";
static const String balanceText = "balanceText";
static const String applePayText = "applePayText";
static const String gPayText = "gPayText";
static const String bankTransferText = "bankTransferText";
static const String instantTransferFundsApplePayText =
"Instant transfer of funds using Apple Pay!";
"instantTransferFundsApplePayText";
static const String instantTransferFundsGpayPayText =
"Instant transfer of funds using Gpay Pay!";
"instantTransferFundsGpayPayText";
static const String retailInvestirCanInvestMaxText =
"Retail investors can invest a maximum of SAR 200,000 in this opportunity.";
"retailInvestirCanInvestMaxText";
static const String upgradeYourInvestorStatusToIncreaseText =
"Upgrade your investor status to increase your investment limit.";
static const String currentExchangeText = "Current Exchange";
static const String feeText = "Fee";
static const String debitedAmountText = "Debited amount";
static const String totalInvestmentAmountText = "Total Investment amount";
static const String confirmInvestmentText = "Confirm investment";
static const String paymentMethodText = "Payment method";
static const String totalDebitedAmountText = "Total debited amount";
"upgradeYourInvestorStatusToIncreaseText";
static const String currentExchangeText = "currentExchangeText";
static const String feeText = "feeText";
static const String processingFees = "processingFees";
static const String debitedAmountText = "debitedAmountText";
static const String totalInvestmentAmountText = "totalInvestmentAmountText";
static const String confirmInvestmentText = "confirmInvestmentText";
static const String paymentMethodText = "paymentMethodText";
static const String totalDebitedAmountText = "totalDebitedAmountText";
static const String unableToProcessTransactionText =
"Unable to process transaction";
"unableToProcessTransactionText";
static const String investmentOpportunityHasReachedMaxcapText =
"Investment opportunity has reached maximum capacity";
static const String backToInvestmentText = "Back to Investment";
static const String otpCheckIsFailedText = "OTP Check is failed...";
static const String pleaseTryAgainText = "Please try again";
static const String tryAgainText = "Try again";
static const String investmentConfirmationText = "Investment confirmation";
static const String enterAmountText = "Enter Amount";
static const String pleaseEnterAmountText = "Please Enter Amount";
//Wallet
static const String withdrawText = 'Withdraw';
"investmentOpportunityHasReachedMaxcapText";
static const String backToInvestmentText = "backToInvestmentText";
static const String otpCheckIsFailedText = "otpCheckIsFailedText";
static const String pleaseTryAgainText = "pleaseTryAgainText";
static const String tryAgainText = "tryAgainText";
static const String investmentConfirmationText = "investmentConfirmationText";
static const String enterAmountText = "enterAmountText";
static const String pleaseEnterAmountText = "pleaseEnterAmountText";
static const String noDataAvailable = "noDataAvailable";
}

View File

@@ -1,5 +1,3 @@
// network_connectivity.dart
import 'dart:async';
import 'package:connectivity_plus/connectivity_plus.dart';
@@ -22,13 +20,17 @@ class NetworkConnectivity {
void initialize() {
_subscription = _connectivity.onConnectivityChanged
.listen((List<ConnectivityResult> result) {
String status = result.toString();
onStatusChange(status);
if (result.isNotEmpty) {
String status = result.toString();
onStatusChange(status);
if (result[0] == ConnectivityResult.wifi ||
result[0] == ConnectivityResult.mobile) {
if (goRouter.canPop()) {
goRouter.pop(true);
if (result[0] == ConnectivityResult.wifi ||
result[0] == ConnectivityResult.mobile) {
if (goRouter.canPop()) {
goRouter.pop(true);
}
} else {
goRouter.pushNamed(RouteName.noInternetScreen);
}
} else {
goRouter.pushNamed(RouteName.noInternetScreen);
@@ -42,7 +44,8 @@ class NetworkConnectivity {
Future<void> checkInternet() async {
final connectivityResult = await _connectivity.checkConnectivity();
if (connectivityResult[0] != ConnectivityResult.none) {
if (connectivityResult.isNotEmpty &&
connectivityResult[0] != ConnectivityResult.none) {
onStatusChange(connectivityResult.toString());
} else {
onStatusChange(connectivityResult.toString());

View File

@@ -18,3 +18,24 @@ List<String> countryFlag = [
AppImages.saudiArabiaflag,
AppImages.unitedArabEmiratesFlag,
];
List<String> isoCountryCode = [
"+973",
"+965",
"+968",
"+974",
"+966",
"+971",
];
/* List<String> countryFlag = [
AppImages.bahrainFlag,
// AppImages.kuwaitFlag,
// AppImages.omanFlag,
AppImages.qatarFlag,
AppImages.bahrainFlag,
AppImages.qatarFlag,
// AppImages.saudiArabiaflag,
// AppImages.unitedArabEmiratesFlag,
]; */

View File

@@ -1,17 +1,4 @@
import 'package:tanami_app/core/styles/app_images.dart';
import 'package:tanami_app/core/styles/app_text.dart';
List<String> title = [
AppText.step1,
AppText.step2,
AppText.step3,
];
List<String> description = [
AppText.enterYourCountryOfResidence,
AppText.enterNameEmailPassword,
AppText.enableBiometricAuthentication,
];
List<String> stepImage = [
AppImages.step1Image,

View File

@@ -0,0 +1,16 @@
import 'package:intl/intl.dart';
class DateTimeFormatter {
String formatDate(String dateString) {
// Parse the input date string
DateTime dateTime = DateTime.parse(dateString);
// Define the output format
DateFormat formatter = DateFormat('MMM dd yyyy');
// Format the date
String formattedDate = formatter.format(dateTime);
return formattedDate;
}
}

View File

@@ -0,0 +1,15 @@
import 'package:device_info_plus/device_info_plus.dart';
class DeviceInfoData {
final deviceInfoPlugin = DeviceInfoPlugin();
Future<String> getDeviceId() async {
var dataV = await deviceInfoPlugin.androidInfo;
return dataV.id.toString();
}
// Future<String> getIOSDeviceId() async {
// var dataV = await deviceInfoPlugin.iosInfo;
// return dataV..toString();
// }
}

View File

@@ -0,0 +1,55 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class AppLocalizations {
final Locale locale;
AppLocalizations(this.locale);
static AppLocalizations of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations)!;
}
static const LocalizationsDelegate<AppLocalizations> delegate =
_AppLocalizationsDelegate();
late Map<String, String> _localizedStrings;
Future<bool> load() async {
String jsonString = await rootBundle
.loadString('assets/language/${locale.languageCode}.json');
Map<String, dynamic> jsonMap = json.decode(jsonString);
_localizedStrings = jsonMap.map((key, value) {
return MapEntry(key, value.toString());
});
return true;
}
String translate(String key) {
return _localizedStrings[key] ?? key;
}
}
class _AppLocalizationsDelegate
extends LocalizationsDelegate<AppLocalizations> {
const _AppLocalizationsDelegate();
@override
bool isSupported(Locale locale) {
return ['en', 'ar'].contains(locale.languageCode);
}
@override
Future<AppLocalizations> load(Locale locale) async {
AppLocalizations localizations = AppLocalizations(locale);
await localizations.load();
return localizations;
}
@override
bool shouldReload(_AppLocalizationsDelegate old) => false;
}

View File

@@ -0,0 +1,31 @@
class PhoneNumberHintGenerator {
String formatPhoneNumber(String code, int length) {
switch (code) {
case "+973":
return "000 000 00";
case "+965":
return "0000 0000";
case "+968":
return "000 00 000";
case "+974":
return "000 000 00";
case "+966":
return "000 000 000";
case "+971":
return "00 000 0000";
default:
return List.generate(length, (index) => '0').join('');
}
}
// Map of country codes to phone number lengths
final Map<String, int> countryPhoneLengths = {
"+973": 8, // Bahrain
"+965": 8, // Kuwait
"+968": 8, // Oman
"+974": 8, // Qatar
"+966": 9, // Saudi Arabia
"+971": 9, // United Arab Emirates
"+91": 10,
};
}

View File

@@ -1,21 +1,19 @@
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
class SecureStorageService {
final FlutterSecureStorage _storage = const FlutterSecureStorage(
aOptions: AndroidOptions(
encryptedSharedPreferences: true,
),
);
import 'package:shared_preferences/shared_preferences.dart';
class SharedPreferenceLocalData {
Future<void> write(String key, String value) async {
await _storage.write(key: key, value: value);
final SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString(key, value);
}
Future<String?> read(String key) async {
return await _storage.read(key: key);
final SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString(key);
}
Future<void> delete(String key) async {
await _storage.delete(key: key);
}
// Future<void> delete(String key) async {
// await _storage.delete(key: key);
// }
}

View File

@@ -0,0 +1,12 @@
import 'package:intl/intl.dart';
class TextConverter {
String formattedTextToNumber(String numberString) {
// Convert the string to a double
double number = double.parse(numberString);
// Format the number with commas
final formatter = NumberFormat("#,###", "en_US");
return formatter.format(number);
}
}

View File

@@ -0,0 +1,30 @@
import 'package:flutter/services.dart';
import 'package:intl/intl.dart';
class CommaTextInputFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
final text = newValue.text;
if (text.isEmpty) {
return newValue;
}
final newText = NumberFormat("#,##0", "en_US")
.format(int.parse(text.replaceAll(',', '')));
return newValue.copyWith(
text: newText,
selection: TextSelection.collapsed(offset: newText.length),
);
}
String getInitials(String name) {
List<String> words = name.split(' ');
String initials = '';
for (var word in words) {
if (word.isNotEmpty) {
initials += word[0].toUpperCase();
}
}
return initials;
}
}

View File

@@ -17,3 +17,12 @@ void launchEmail(String email) async {
throw 'Could not launch $url';
}
}
void launchWebsiteUrl(String websiteUrl) async {
final url = websiteUrl;
if (await canLaunchUrl(Uri.parse(url))) {
await launchUrl(Uri.parse(url), mode: LaunchMode.externalApplication);
} else {
throw 'Could not launch $url';
}
}

View File

@@ -13,7 +13,7 @@ class AcademyLayout extends StatelessWidget {
body: ListView.builder(
itemCount: data.length,
itemBuilder: (context, index) {
return academyCard(data[index]);
return academyCard(data[index], context);
},
),
);

View File

@@ -4,6 +4,7 @@ import 'package:tanami_app/features/MainScreens/Academy/presentation/pages/acade
import 'package:tanami_app/shared/components/text_widget.dart';
import '../../../../../core/styles/app_text.dart';
import '../../../../../core/utils/language/localizations_delegate.dart';
class AcademyScreen extends StatefulWidget {
const AcademyScreen({super.key});
@@ -15,6 +16,7 @@ class AcademyScreen extends StatefulWidget {
class _AcademyScreenState extends State<AcademyScreen> {
@override
Widget build(BuildContext context) {
var localizations = AppLocalizations.of(context);
return Scaffold(
backgroundColor: AppColor.plainWhite,
appBar: AppBar(
@@ -24,7 +26,7 @@ class _AcademyScreenState extends State<AcademyScreen> {
scrolledUnderElevation: 0,
automaticallyImplyLeading: false,
title: TextWidget().text22W700(
AppText.academyText,
localizations.translate(AppText.academyText),
clr: AppColor.charcoalColor,
),
titleSpacing: 16,

View File

@@ -3,12 +3,16 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:gap/gap.dart';
import 'package:tanami_app/core/styles/app_color.dart';
import 'package:tanami_app/core/styles/app_images.dart';
import 'package:tanami_app/core/styles/app_text.dart';
import 'package:tanami_app/shared/components/text_widget.dart';
import '../../../../../core/routes/route_name.dart';
import '../../../../../core/routes/routes.dart';
import '../../../../../core/utils/language/localizations_delegate.dart';
Widget academyCard(dynamic data, BuildContext context) {
var localizations = AppLocalizations.of(context);
Widget academyCard(dynamic data) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 10.0, horizontal: 16.0),
child: GestureDetector(
@@ -79,7 +83,7 @@ Widget academyCard(dynamic data) {
5.w,
),
TextWidget().text12W700(
'${data['videos']} videos',
'${data['videos']} ${localizations.translate(AppText.videosTitle)}',
clr: AppColor.academyCardTextColor,
),
],

View File

@@ -6,11 +6,14 @@ import 'package:tanami_app/core/styles/app_images.dart';
import 'package:tanami_app/core/styles/app_text.dart';
import 'package:tanami_app/shared/components/text_widget.dart';
import '../../../../../core/utils/language/localizations_delegate.dart';
class AcademyDetailSection extends StatelessWidget {
const AcademyDetailSection({super.key});
@override
Widget build(BuildContext context) {
var localizations = AppLocalizations.of(context);
return Container(
decoration: BoxDecoration(
color: AppColor.plainWhite,
@@ -59,7 +62,7 @@ class AcademyDetailSection extends StatelessWidget {
),
Gap(5.w),
TextWidget().text12W700(
'3 ${AppText.videosTitle}',
'3 ${localizations.translate(AppText.videosTitle)}',
clr: AppColor.academyCardTextColor,
),
],

View File

@@ -4,12 +4,14 @@ import 'package:google_fonts/google_fonts.dart';
import 'package:tanami_app/core/styles/app_images.dart';
import '../../../../../core/styles/app_text.dart';
import '../../../../../core/utils/language/localizations_delegate.dart';
class AcademyVideoSection extends StatelessWidget {
const AcademyVideoSection({super.key});
@override
Widget build(BuildContext context) {
var localizations = AppLocalizations.of(context);
return Container(
decoration: BoxDecoration(
color: Colors.white,
@@ -29,7 +31,7 @@ class AcademyVideoSection extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
AppText.videosTitle,
localizations.translate(AppText.videosTitle),
style: GoogleFonts.dmSans(
color: Colors.black,
fontSize: 15.sp,

View File

@@ -0,0 +1,517 @@
class AvailableIOModel {
int? statusCode;
Data? data;
String? message;
bool? success;
AvailableIOModel({this.statusCode, this.data, this.message, this.success});
AvailableIOModel.fromJson(Map<String, dynamic> json) {
statusCode = json['statusCode'];
data = json['data'] != null ? Data.fromJson(json['data']) : null;
message = json['message'];
success = json['success'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['statusCode'] = statusCode;
if (this.data != null) {
data['data'] = this.data!.toJson();
}
data['message'] = message;
data['success'] = success;
return data;
}
}
class Data {
int? totalItems;
List<Rows>? rows;
int? totalPages;
int? currentPage;
Data({this.totalItems, this.rows, this.totalPages, this.currentPage});
Data.fromJson(Map<String, dynamic> json) {
totalItems = json['totalItems'];
if (json['rows'] != null) {
rows = <Rows>[];
json['rows'].forEach((v) {
rows!.add(Rows.fromJson(v));
});
}
totalPages = json['totalPages'];
currentPage = json['currentPage'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['totalItems'] = totalItems;
if (rows != null) {
data['rows'] = rows!.map((v) => v.toJson()).toList();
}
data['totalPages'] = totalPages;
data['currentPage'] = currentPage;
return data;
}
}
class Rows {
int? id;
String? ioId;
int? investmentTypeXid;
int? sponsorXid;
int? ioStatusXid;
String? investmentNameEnglish;
String? investmentNameArabic;
String? descriptionEnglish;
String? descriptionArabic;
String? goalAmount;
String? closingDate;
String? holdingPeriod;
String? expectedReturn;
String? originalValuation;
String? currentValuation;
String? iSIN;
String? investmentDetails;
String? comment;
bool? isInvestedAmount;
String? amountInvested;
bool? isActive;
Null createdBy;
Null modifiedBy;
String? createdAt;
String? updatedAt;
Null deletedAt;
Sponsor? sponsor;
IoStatus? ioStatus;
InvestmentType? investmentType;
List<ArtifactsImage>? artifactsImage;
List<MinInvestmentAmt>? minInvestmentAmt;
Rows(
{this.id,
this.ioId,
this.investmentTypeXid,
this.sponsorXid,
this.ioStatusXid,
this.investmentNameEnglish,
this.investmentNameArabic,
this.descriptionEnglish,
this.descriptionArabic,
this.goalAmount,
this.closingDate,
this.holdingPeriod,
this.expectedReturn,
this.originalValuation,
this.currentValuation,
this.iSIN,
this.investmentDetails,
this.comment,
this.isInvestedAmount,
this.amountInvested,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt,
this.sponsor,
this.ioStatus,
this.investmentType,
this.artifactsImage,
this.minInvestmentAmt});
Rows.fromJson(Map<String, dynamic> json) {
id = json['id'];
ioId = json['io_id'];
investmentTypeXid = json['investmentType_xid'];
sponsorXid = json['sponsor_xid'];
ioStatusXid = json['ioStatus_xid'];
investmentNameEnglish = json['investmentNameEnglish'];
investmentNameArabic = json['investmentNameArabic'];
descriptionEnglish = json['descriptionEnglish'];
descriptionArabic = json['descriptionArabic'];
goalAmount = json['goalAmount'];
closingDate = json['closingDate'];
holdingPeriod = json['holdingPeriod'];
expectedReturn = json['expectedReturn'];
originalValuation = json['originalValuation'];
currentValuation = json['currentValuation'];
iSIN = json['ISIN'];
investmentDetails = json['InvestmentDetails'];
comment = json['comment'];
isInvestedAmount = json['isInvestedAmount'];
amountInvested = json['amountInvested'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
sponsor =
json['sponsor'] != null ? Sponsor.fromJson(json['sponsor']) : null;
ioStatus =
json['ioStatus'] != null ? IoStatus.fromJson(json['ioStatus']) : null;
investmentType = json['investmentType'] != null
? InvestmentType.fromJson(json['investmentType'])
: null;
if (json['artifactsImage'] != null) {
artifactsImage = <ArtifactsImage>[];
json['artifactsImage'].forEach((v) {
artifactsImage!.add(ArtifactsImage.fromJson(v));
});
}
if (json['minInvestmentAmt'] != null) {
minInvestmentAmt = <MinInvestmentAmt>[];
json['minInvestmentAmt'].forEach((v) {
minInvestmentAmt!.add(MinInvestmentAmt.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['io_id'] = ioId;
data['investmentType_xid'] = investmentTypeXid;
data['sponsor_xid'] = sponsorXid;
data['ioStatus_xid'] = ioStatusXid;
data['investmentNameEnglish'] = investmentNameEnglish;
data['investmentNameArabic'] = investmentNameArabic;
data['descriptionEnglish'] = descriptionEnglish;
data['descriptionArabic'] = descriptionArabic;
data['goalAmount'] = goalAmount;
data['closingDate'] = closingDate;
data['holdingPeriod'] = holdingPeriod;
data['expectedReturn'] = expectedReturn;
data['originalValuation'] = originalValuation;
data['currentValuation'] = currentValuation;
data['ISIN'] = iSIN;
data['InvestmentDetails'] = investmentDetails;
data['comment'] = comment;
data['isInvestedAmount'] = isInvestedAmount;
data['amountInvested'] = amountInvested;
data['isActive'] = isActive;
data['createdBy'] = createdBy;
data['modifiedBy'] = modifiedBy;
data['createdAt'] = createdAt;
data['updatedAt'] = updatedAt;
data['deletedAt'] = deletedAt;
if (sponsor != null) {
data['sponsor'] = sponsor!.toJson();
}
if (ioStatus != null) {
data['ioStatus'] = ioStatus!.toJson();
}
if (investmentType != null) {
data['investmentType'] = investmentType!.toJson();
}
if (artifactsImage != null) {
data['artifactsImage'] = artifactsImage!.map((v) => v.toJson()).toList();
}
if (minInvestmentAmt != null) {
data['minInvestmentAmt'] =
minInvestmentAmt!.map((v) => v.toJson()).toList();
}
return data;
}
}
class Sponsor {
int? id;
String? sponsorName;
String? sponsorNameArabic;
String? email;
Null profile;
Null address;
Null mobileNo;
Null bankName;
Null accountNumber;
bool? isActive;
Null createdBy;
Null modifiedBy;
String? createdAt;
String? updatedAt;
Null deletedAt;
Sponsor(
{this.id,
this.sponsorName,
this.sponsorNameArabic,
this.email,
this.profile,
this.address,
this.mobileNo,
this.bankName,
this.accountNumber,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
Sponsor.fromJson(Map<String, dynamic> json) {
id = json['id'];
sponsorName = json['sponsorName'];
sponsorNameArabic = json['sponsorNameArabic'];
email = json['email'];
profile = json['profile'];
address = json['address'];
mobileNo = json['mobileNo'];
bankName = json['bankName'];
accountNumber = json['accountNumber'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['sponsorName'] = sponsorName;
data['sponsorNameArabic'] = sponsorNameArabic;
data['email'] = email;
data['profile'] = profile;
data['address'] = address;
data['mobileNo'] = mobileNo;
data['bankName'] = bankName;
data['accountNumber'] = accountNumber;
data['isActive'] = isActive;
data['createdBy'] = createdBy;
data['modifiedBy'] = modifiedBy;
data['createdAt'] = createdAt;
data['updatedAt'] = updatedAt;
data['deletedAt'] = deletedAt;
return data;
}
}
class IoStatus {
int? id;
String? statusAdmin;
String? statusInvest;
String? statusPortfolio;
bool? isActive;
Null createdBy;
Null modifiedBy;
String? createdAt;
String? updatedAt;
Null deletedAt;
IoStatus(
{this.id,
this.statusAdmin,
this.statusInvest,
this.statusPortfolio,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
IoStatus.fromJson(Map<String, dynamic> json) {
id = json['id'];
statusAdmin = json['statusAdmin'];
statusInvest = json['statusInvest'];
statusPortfolio = json['statusPortfolio'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['statusAdmin'] = statusAdmin;
data['statusInvest'] = statusInvest;
data['statusPortfolio'] = statusPortfolio;
data['isActive'] = isActive;
data['createdBy'] = createdBy;
data['modifiedBy'] = modifiedBy;
data['createdAt'] = createdAt;
data['updatedAt'] = updatedAt;
data['deletedAt'] = deletedAt;
return data;
}
}
class InvestmentType {
int? id;
String? investmentTypeName;
String? investmentTypeNameArabic;
String? note;
String? noteArabic;
bool? isActive;
Null createdBy;
Null modifiedBy;
String? createdAt;
String? updatedAt;
Null deletedAt;
InvestmentType(
{this.id,
this.investmentTypeName,
this.investmentTypeNameArabic,
this.note,
this.noteArabic,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
InvestmentType.fromJson(Map<String, dynamic> json) {
id = json['id'];
investmentTypeName = json['investmentTypeName'];
investmentTypeNameArabic = json['investmentTypeNameArabic'];
note = json['note'];
noteArabic = json['noteArabic'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['investmentTypeName'] = investmentTypeName;
data['investmentTypeNameArabic'] = investmentTypeNameArabic;
data['note'] = note;
data['noteArabic'] = noteArabic;
data['isActive'] = isActive;
data['createdBy'] = createdBy;
data['modifiedBy'] = modifiedBy;
data['createdAt'] = createdAt;
data['updatedAt'] = updatedAt;
data['deletedAt'] = deletedAt;
return data;
}
}
class ArtifactsImage {
int? id;
int? ioXid;
String? artifactName;
String? artifactPathName;
int? displayOrder;
bool? isActive;
Null createdBy;
Null modifiedBy;
String? createdAt;
String? updatedAt;
Null deletedAt;
ArtifactsImage(
{this.id,
this.ioXid,
this.artifactName,
this.artifactPathName,
this.displayOrder,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
ArtifactsImage.fromJson(Map<String, dynamic> json) {
id = json['id'];
ioXid = json['io_xid'];
artifactName = json['artifactName'];
artifactPathName = json['artifactPathName'];
displayOrder = json['displayOrder'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['io_xid'] = ioXid;
data['artifactName'] = artifactName;
data['artifactPathName'] = artifactPathName;
data['displayOrder'] = displayOrder;
data['isActive'] = isActive;
data['createdBy'] = createdBy;
data['modifiedBy'] = modifiedBy;
data['createdAt'] = createdAt;
data['updatedAt'] = updatedAt;
data['deletedAt'] = deletedAt;
return data;
}
}
class MinInvestmentAmt {
int? id;
int? ioXid;
int? countryXid;
String? minInvestmentAmt;
String? maxInvestmentAmt;
bool? isActive;
Null createdBy;
Null modifiedBy;
String? createdAt;
String? updatedAt;
Null deletedAt;
MinInvestmentAmt(
{this.id,
this.ioXid,
this.countryXid,
this.minInvestmentAmt,
this.maxInvestmentAmt,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
MinInvestmentAmt.fromJson(Map<String, dynamic> json) {
id = json['id'];
ioXid = json['io_xid'];
countryXid = json['country_xid'];
minInvestmentAmt = json['minInvestmentAmt'];
maxInvestmentAmt = json['maxInvestmentAmt'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['io_xid'] = ioXid;
data['country_xid'] = countryXid;
data['minInvestmentAmt'] = minInvestmentAmt;
data['maxInvestmentAmt'] = maxInvestmentAmt;
data['isActive'] = isActive;
data['createdBy'] = createdBy;
data['modifiedBy'] = modifiedBy;
data['createdAt'] = createdAt;
data['updatedAt'] = updatedAt;
data['deletedAt'] = deletedAt;
return data;
}
}

View File

@@ -0,0 +1,519 @@
class ClosedIOModel {
int? statusCode;
Data? data;
String? message;
bool? success;
ClosedIOModel({this.statusCode, this.data, this.message, this.success});
ClosedIOModel.fromJson(Map<String, dynamic> json) {
statusCode = json['statusCode'];
data = json['data'] != null ? new Data.fromJson(json['data']) : null;
message = json['message'];
success = json['success'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['statusCode'] = this.statusCode;
if (this.data != null) {
data['data'] = this.data!.toJson();
}
data['message'] = this.message;
data['success'] = this.success;
return data;
}
}
class Data {
int? totalItems;
List<Rows>? rows;
int? totalPages;
int? currentPage;
Data({this.totalItems, this.rows, this.totalPages, this.currentPage});
Data.fromJson(Map<String, dynamic> json) {
totalItems = json['totalItems'];
if (json['rows'] != null) {
rows = <Rows>[];
json['rows'].forEach((v) {
rows!.add(new Rows.fromJson(v));
});
}
totalPages = json['totalPages'];
currentPage = json['currentPage'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['totalItems'] = this.totalItems;
if (this.rows != null) {
data['rows'] = this.rows!.map((v) => v.toJson()).toList();
}
data['totalPages'] = this.totalPages;
data['currentPage'] = this.currentPage;
return data;
}
}
class Rows {
int? id;
String? ioId;
int? investmentTypeXid;
int? sponsorXid;
int? ioStatusXid;
String? investmentNameEnglish;
String? investmentNameArabic;
String? descriptionEnglish;
String? descriptionArabic;
String? goalAmount;
String? closingDate;
String? holdingPeriod;
String? expectedReturn;
String? originalValuation;
String? currentValuation;
String? iSIN;
String? investmentDetails;
String? comment;
bool? isInvestedAmount;
String? amountInvested;
bool? isActive;
Null? createdBy;
Null? modifiedBy;
String? createdAt;
String? updatedAt;
Null? deletedAt;
Sponsor? sponsor;
IoStatus? ioStatus;
InvestmentType? investmentType;
List<ArtifactsImage>? artifactsImage;
List<MinInvestmentAmt>? minInvestmentAmt;
Rows(
{this.id,
this.ioId,
this.investmentTypeXid,
this.sponsorXid,
this.ioStatusXid,
this.investmentNameEnglish,
this.investmentNameArabic,
this.descriptionEnglish,
this.descriptionArabic,
this.goalAmount,
this.closingDate,
this.holdingPeriod,
this.expectedReturn,
this.originalValuation,
this.currentValuation,
this.iSIN,
this.investmentDetails,
this.comment,
this.isInvestedAmount,
this.amountInvested,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt,
this.sponsor,
this.ioStatus,
this.investmentType,
this.artifactsImage,
this.minInvestmentAmt});
Rows.fromJson(Map<String, dynamic> json) {
id = json['id'];
ioId = json['io_id'];
investmentTypeXid = json['investmentType_xid'];
sponsorXid = json['sponsor_xid'];
ioStatusXid = json['ioStatus_xid'];
investmentNameEnglish = json['investmentNameEnglish'];
investmentNameArabic = json['investmentNameArabic'];
descriptionEnglish = json['descriptionEnglish'];
descriptionArabic = json['descriptionArabic'];
goalAmount = json['goalAmount'];
closingDate = json['closingDate'];
holdingPeriod = json['holdingPeriod'];
expectedReturn = json['expectedReturn'];
originalValuation = json['originalValuation'];
currentValuation = json['currentValuation'];
iSIN = json['ISIN'];
investmentDetails = json['InvestmentDetails'];
comment = json['comment'];
isInvestedAmount = json['isInvestedAmount'];
amountInvested = json['amountInvested'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
sponsor =
json['sponsor'] != null ? new Sponsor.fromJson(json['sponsor']) : null;
ioStatus = json['ioStatus'] != null
? new IoStatus.fromJson(json['ioStatus'])
: null;
investmentType = json['investmentType'] != null
? new InvestmentType.fromJson(json['investmentType'])
: null;
if (json['artifactsImage'] != null) {
artifactsImage = <ArtifactsImage>[];
json['artifactsImage'].forEach((v) {
artifactsImage!.add(new ArtifactsImage.fromJson(v));
});
}
if (json['minInvestmentAmt'] != null) {
minInvestmentAmt = <MinInvestmentAmt>[];
json['minInvestmentAmt'].forEach((v) {
minInvestmentAmt!.add(new MinInvestmentAmt.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['io_id'] = this.ioId;
data['investmentType_xid'] = this.investmentTypeXid;
data['sponsor_xid'] = this.sponsorXid;
data['ioStatus_xid'] = this.ioStatusXid;
data['investmentNameEnglish'] = this.investmentNameEnglish;
data['investmentNameArabic'] = this.investmentNameArabic;
data['descriptionEnglish'] = this.descriptionEnglish;
data['descriptionArabic'] = this.descriptionArabic;
data['goalAmount'] = this.goalAmount;
data['closingDate'] = this.closingDate;
data['holdingPeriod'] = this.holdingPeriod;
data['expectedReturn'] = this.expectedReturn;
data['originalValuation'] = this.originalValuation;
data['currentValuation'] = this.currentValuation;
data['ISIN'] = this.iSIN;
data['InvestmentDetails'] = this.investmentDetails;
data['comment'] = this.comment;
data['isInvestedAmount'] = this.isInvestedAmount;
data['amountInvested'] = this.amountInvested;
data['isActive'] = this.isActive;
data['createdBy'] = this.createdBy;
data['modifiedBy'] = this.modifiedBy;
data['createdAt'] = this.createdAt;
data['updatedAt'] = this.updatedAt;
data['deletedAt'] = this.deletedAt;
if (this.sponsor != null) {
data['sponsor'] = this.sponsor!.toJson();
}
if (this.ioStatus != null) {
data['ioStatus'] = this.ioStatus!.toJson();
}
if (this.investmentType != null) {
data['investmentType'] = this.investmentType!.toJson();
}
if (this.artifactsImage != null) {
data['artifactsImage'] =
this.artifactsImage!.map((v) => v.toJson()).toList();
}
if (this.minInvestmentAmt != null) {
data['minInvestmentAmt'] =
this.minInvestmentAmt!.map((v) => v.toJson()).toList();
}
return data;
}
}
class ArtifactsImage {
int? id;
int? ioXid;
String? artifactName;
String? artifactPathName;
int? displayOrder;
bool? isActive;
Null? createdBy;
Null? modifiedBy;
String? createdAt;
String? updatedAt;
Null? deletedAt;
ArtifactsImage(
{this.id,
this.ioXid,
this.artifactName,
this.artifactPathName,
this.displayOrder,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
ArtifactsImage.fromJson(Map<String, dynamic> json) {
id = json['id'];
ioXid = json['io_xid'];
artifactName = json['artifactName'];
artifactPathName = json['artifactPathName'];
displayOrder = json['displayOrder'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['io_xid'] = this.ioXid;
data['artifactName'] = this.artifactName;
data['artifactPathName'] = this.artifactPathName;
data['displayOrder'] = this.displayOrder;
data['isActive'] = this.isActive;
data['createdBy'] = this.createdBy;
data['modifiedBy'] = this.modifiedBy;
data['createdAt'] = this.createdAt;
data['updatedAt'] = this.updatedAt;
data['deletedAt'] = this.deletedAt;
return data;
}
}
class Sponsor {
int? id;
String? sponsorName;
String? sponsorNameArabic;
String? email;
Null? profile;
Null? address;
Null? mobileNo;
Null? bankName;
Null? accountNumber;
bool? isActive;
Null? createdBy;
Null? modifiedBy;
String? createdAt;
String? updatedAt;
Null? deletedAt;
Sponsor(
{this.id,
this.sponsorName,
this.sponsorNameArabic,
this.email,
this.profile,
this.address,
this.mobileNo,
this.bankName,
this.accountNumber,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
Sponsor.fromJson(Map<String, dynamic> json) {
id = json['id'];
sponsorName = json['sponsorName'];
sponsorNameArabic = json['sponsorNameArabic'];
email = json['email'];
profile = json['profile'];
address = json['address'];
mobileNo = json['mobileNo'];
bankName = json['bankName'];
accountNumber = json['accountNumber'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['sponsorName'] = this.sponsorName;
data['sponsorNameArabic'] = this.sponsorNameArabic;
data['email'] = this.email;
data['profile'] = this.profile;
data['address'] = this.address;
data['mobileNo'] = this.mobileNo;
data['bankName'] = this.bankName;
data['accountNumber'] = this.accountNumber;
data['isActive'] = this.isActive;
data['createdBy'] = this.createdBy;
data['modifiedBy'] = this.modifiedBy;
data['createdAt'] = this.createdAt;
data['updatedAt'] = this.updatedAt;
data['deletedAt'] = this.deletedAt;
return data;
}
}
class IoStatus {
int? id;
String? statusAdmin;
String? statusInvest;
String? statusPortfolio;
bool? isActive;
Null? createdBy;
Null? modifiedBy;
String? createdAt;
String? updatedAt;
Null? deletedAt;
IoStatus(
{this.id,
this.statusAdmin,
this.statusInvest,
this.statusPortfolio,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
IoStatus.fromJson(Map<String, dynamic> json) {
id = json['id'];
statusAdmin = json['statusAdmin'];
statusInvest = json['statusInvest'];
statusPortfolio = json['statusPortfolio'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['statusAdmin'] = this.statusAdmin;
data['statusInvest'] = this.statusInvest;
data['statusPortfolio'] = this.statusPortfolio;
data['isActive'] = this.isActive;
data['createdBy'] = this.createdBy;
data['modifiedBy'] = this.modifiedBy;
data['createdAt'] = this.createdAt;
data['updatedAt'] = this.updatedAt;
data['deletedAt'] = this.deletedAt;
return data;
}
}
class InvestmentType {
int? id;
String? investmentTypeName;
String? investmentTypeNameArabic;
String? note;
String? noteArabic;
bool? isActive;
Null? createdBy;
Null? modifiedBy;
String? createdAt;
String? updatedAt;
Null? deletedAt;
InvestmentType(
{this.id,
this.investmentTypeName,
this.investmentTypeNameArabic,
this.note,
this.noteArabic,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
InvestmentType.fromJson(Map<String, dynamic> json) {
id = json['id'];
investmentTypeName = json['investmentTypeName'];
investmentTypeNameArabic = json['investmentTypeNameArabic'];
note = json['note'];
noteArabic = json['noteArabic'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['investmentTypeName'] = this.investmentTypeName;
data['investmentTypeNameArabic'] = this.investmentTypeNameArabic;
data['note'] = this.note;
data['noteArabic'] = this.noteArabic;
data['isActive'] = this.isActive;
data['createdBy'] = this.createdBy;
data['modifiedBy'] = this.modifiedBy;
data['createdAt'] = this.createdAt;
data['updatedAt'] = this.updatedAt;
data['deletedAt'] = this.deletedAt;
return data;
}
}
class MinInvestmentAmt {
int? id;
int? ioXid;
int? countryXid;
String? minInvestmentAmt;
String? maxInvestmentAmt;
bool? isActive;
Null? createdBy;
Null? modifiedBy;
String? createdAt;
String? updatedAt;
Null? deletedAt;
MinInvestmentAmt(
{this.id,
this.ioXid,
this.countryXid,
this.minInvestmentAmt,
this.maxInvestmentAmt,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
MinInvestmentAmt.fromJson(Map<String, dynamic> json) {
id = json['id'];
ioXid = json['io_xid'];
countryXid = json['country_xid'];
minInvestmentAmt = json['minInvestmentAmt'];
maxInvestmentAmt = json['maxInvestmentAmt'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['io_xid'] = this.ioXid;
data['country_xid'] = this.countryXid;
data['minInvestmentAmt'] = this.minInvestmentAmt;
data['maxInvestmentAmt'] = this.maxInvestmentAmt;
data['isActive'] = this.isActive;
data['createdBy'] = this.createdBy;
data['modifiedBy'] = this.modifiedBy;
data['createdAt'] = this.createdAt;
data['updatedAt'] = this.updatedAt;
data['deletedAt'] = this.deletedAt;
return data;
}
}

View File

@@ -0,0 +1,760 @@
class DetailIOModel {
int? statusCode;
Data? data;
String? message;
bool? success;
DetailIOModel({this.statusCode, this.data, this.message, this.success});
DetailIOModel.fromJson(Map<String, dynamic> json) {
statusCode = json['statusCode'];
data = json['data'] != null ? Data.fromJson(json['data']) : null;
message = json['message'];
success = json['success'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['statusCode'] = statusCode;
if (this.data != null) {
data['data'] = this.data!.toJson();
}
data['message'] = message;
data['success'] = success;
return data;
}
}
class Data {
int? id;
String? ioId;
int? investmentTypeXid;
int? sponsorXid;
int? ioStatusXid;
String? investmentNameEnglish;
String? investmentNameArabic;
String? descriptionEnglish;
String? descriptionArabic;
String? goalAmount;
String? closingDate;
String? holdingPeriod;
String? expectedReturn;
String? originalValuation;
String? currentValuation;
String? iSIN;
String? investmentDetails;
String? comment;
bool? isInvestedAmount;
String? amountInvested;
bool? isActive;
Null createdBy;
Null modifiedBy;
String? createdAt;
String? updatedAt;
Null deletedAt;
Sponsor? sponsor;
IoStatus? ioStatus;
InvestmentType? investmentType;
List<Documents>? documents;
List<ArtifactsVideo>? artifactsVideo;
List<ArtifactsImage>? artifactsImage;
List<MinInvestmentAmt>? minInvestmentAmt;
List<KeyMerits>? keyMerits;
Data(
{this.id,
this.ioId,
this.investmentTypeXid,
this.sponsorXid,
this.ioStatusXid,
this.investmentNameEnglish,
this.investmentNameArabic,
this.descriptionEnglish,
this.descriptionArabic,
this.goalAmount,
this.closingDate,
this.holdingPeriod,
this.expectedReturn,
this.originalValuation,
this.currentValuation,
this.iSIN,
this.investmentDetails,
this.comment,
this.isInvestedAmount,
this.amountInvested,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt,
this.sponsor,
this.ioStatus,
this.investmentType,
this.documents,
this.artifactsVideo,
this.artifactsImage,
this.minInvestmentAmt,
this.keyMerits});
Data.fromJson(Map<String, dynamic> json) {
id = json['id'];
ioId = json['io_id'];
investmentTypeXid = json['investmentType_xid'];
sponsorXid = json['sponsor_xid'];
ioStatusXid = json['ioStatus_xid'];
investmentNameEnglish = json['investmentNameEnglish'];
investmentNameArabic = json['investmentNameArabic'];
descriptionEnglish = json['descriptionEnglish'];
descriptionArabic = json['descriptionArabic'];
goalAmount = json['goalAmount'];
closingDate = json['closingDate'];
holdingPeriod = json['holdingPeriod'];
expectedReturn = json['expectedReturn'];
originalValuation = json['originalValuation'];
currentValuation = json['currentValuation'];
iSIN = json['ISIN'];
investmentDetails = json['InvestmentDetails'];
comment = json['comment'];
isInvestedAmount = json['isInvestedAmount'];
amountInvested = json['amountInvested'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
sponsor =
json['sponsor'] != null ? Sponsor.fromJson(json['sponsor']) : null;
ioStatus =
json['ioStatus'] != null ? IoStatus.fromJson(json['ioStatus']) : null;
investmentType = json['investmentType'] != null
? InvestmentType.fromJson(json['investmentType'])
: null;
if (json['documents'] != null) {
documents = <Documents>[];
json['documents'].forEach((v) {
documents!.add(Documents.fromJson(v));
});
}
if (json['artifactsVideo'] != null) {
artifactsVideo = <ArtifactsVideo>[];
json['artifactsVideo'].forEach((v) {
artifactsVideo!.add(ArtifactsVideo.fromJson(v));
});
}
if (json['artifactsImage'] != null) {
artifactsImage = <ArtifactsImage>[];
json['artifactsImage'].forEach((v) {
artifactsImage!.add(ArtifactsImage.fromJson(v));
});
}
if (json['minInvestmentAmt'] != null) {
minInvestmentAmt = <MinInvestmentAmt>[];
json['minInvestmentAmt'].forEach((v) {
minInvestmentAmt!.add(MinInvestmentAmt.fromJson(v));
});
}
if (json['keyMerits'] != null) {
keyMerits = <KeyMerits>[];
json['keyMerits'].forEach((v) {
keyMerits!.add(KeyMerits.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['io_id'] = ioId;
data['investmentType_xid'] = investmentTypeXid;
data['sponsor_xid'] = sponsorXid;
data['ioStatus_xid'] = ioStatusXid;
data['investmentNameEnglish'] = investmentNameEnglish;
data['investmentNameArabic'] = investmentNameArabic;
data['descriptionEnglish'] = descriptionEnglish;
data['descriptionArabic'] = descriptionArabic;
data['goalAmount'] = goalAmount;
data['closingDate'] = closingDate;
data['holdingPeriod'] = holdingPeriod;
data['expectedReturn'] = expectedReturn;
data['originalValuation'] = originalValuation;
data['currentValuation'] = currentValuation;
data['ISIN'] = iSIN;
data['InvestmentDetails'] = investmentDetails;
data['comment'] = comment;
data['isInvestedAmount'] = isInvestedAmount;
data['amountInvested'] = amountInvested;
data['isActive'] = isActive;
data['createdBy'] = createdBy;
data['modifiedBy'] = modifiedBy;
data['createdAt'] = createdAt;
data['updatedAt'] = updatedAt;
data['deletedAt'] = deletedAt;
if (sponsor != null) {
data['sponsor'] = sponsor!.toJson();
}
if (ioStatus != null) {
data['ioStatus'] = ioStatus!.toJson();
}
if (investmentType != null) {
data['investmentType'] = investmentType!.toJson();
}
if (documents != null) {
data['documents'] = documents!.map((v) => v.toJson()).toList();
}
if (artifactsVideo != null) {
data['artifactsVideo'] = artifactsVideo!.map((v) => v.toJson()).toList();
}
if (artifactsImage != null) {
data['artifactsImage'] = artifactsImage!.map((v) => v.toJson()).toList();
}
if (minInvestmentAmt != null) {
data['minInvestmentAmt'] =
minInvestmentAmt!.map((v) => v.toJson()).toList();
}
if (keyMerits != null) {
data['keyMerits'] = keyMerits!.map((v) => v.toJson()).toList();
}
return data;
}
}
class Sponsor {
int? id;
String? sponsorName;
String? sponsorNameArabic;
String? email;
Null profile;
Null address;
Null mobileNo;
Null bankName;
Null accountNumber;
bool? isActive;
Null createdBy;
Null modifiedBy;
String? createdAt;
String? updatedAt;
Null deletedAt;
Sponsor(
{this.id,
this.sponsorName,
this.sponsorNameArabic,
this.email,
this.profile,
this.address,
this.mobileNo,
this.bankName,
this.accountNumber,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
Sponsor.fromJson(Map<String, dynamic> json) {
id = json['id'];
sponsorName = json['sponsorName'];
sponsorNameArabic = json['sponsorNameArabic'];
email = json['email'];
profile = json['profile'];
address = json['address'];
mobileNo = json['mobileNo'];
bankName = json['bankName'];
accountNumber = json['accountNumber'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['sponsorName'] = sponsorName;
data['sponsorNameArabic'] = sponsorNameArabic;
data['email'] = email;
data['profile'] = profile;
data['address'] = address;
data['mobileNo'] = mobileNo;
data['bankName'] = bankName;
data['accountNumber'] = accountNumber;
data['isActive'] = isActive;
data['createdBy'] = createdBy;
data['modifiedBy'] = modifiedBy;
data['createdAt'] = createdAt;
data['updatedAt'] = updatedAt;
data['deletedAt'] = deletedAt;
return data;
}
}
class IoStatus {
int? id;
String? statusAdmin;
String? statusInvest;
String? statusPortfolio;
bool? isActive;
Null createdBy;
Null modifiedBy;
String? createdAt;
String? updatedAt;
Null deletedAt;
IoStatus(
{this.id,
this.statusAdmin,
this.statusInvest,
this.statusPortfolio,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
IoStatus.fromJson(Map<String, dynamic> json) {
id = json['id'];
statusAdmin = json['statusAdmin'];
statusInvest = json['statusInvest'];
statusPortfolio = json['statusPortfolio'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['statusAdmin'] = statusAdmin;
data['statusInvest'] = statusInvest;
data['statusPortfolio'] = statusPortfolio;
data['isActive'] = isActive;
data['createdBy'] = createdBy;
data['modifiedBy'] = modifiedBy;
data['createdAt'] = createdAt;
data['updatedAt'] = updatedAt;
data['deletedAt'] = deletedAt;
return data;
}
}
class InvestmentType {
int? id;
String? investmentTypeName;
String? investmentTypeNameArabic;
String? note;
String? noteArabic;
bool? isActive;
Null createdBy;
Null modifiedBy;
String? createdAt;
String? updatedAt;
Null deletedAt;
InvestmentType(
{this.id,
this.investmentTypeName,
this.investmentTypeNameArabic,
this.note,
this.noteArabic,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
InvestmentType.fromJson(Map<String, dynamic> json) {
id = json['id'];
investmentTypeName = json['investmentTypeName'];
investmentTypeNameArabic = json['investmentTypeNameArabic'];
note = json['note'];
noteArabic = json['noteArabic'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['investmentTypeName'] = investmentTypeName;
data['investmentTypeNameArabic'] = investmentTypeNameArabic;
data['note'] = note;
data['noteArabic'] = noteArabic;
data['isActive'] = isActive;
data['createdBy'] = createdBy;
data['modifiedBy'] = modifiedBy;
data['createdAt'] = createdAt;
data['updatedAt'] = updatedAt;
data['deletedAt'] = deletedAt;
return data;
}
}
class Documents {
int? id;
int? ioXid;
String? documentType;
String? documentName;
String? documentPath;
int? displayOrder;
bool? isActive;
Null createdBy;
Null modifiedBy;
String? createdAt;
String? updatedAt;
Null deletedAt;
Documents(
{this.id,
this.ioXid,
this.documentType,
this.documentName,
this.documentPath,
this.displayOrder,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
Documents.fromJson(Map<String, dynamic> json) {
id = json['id'];
ioXid = json['io_xid'];
documentType = json['documentType'];
documentName = json['documentName'];
documentPath = json['documentPath'];
displayOrder = json['displayOrder'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['io_xid'] = ioXid;
data['documentType'] = documentType;
data['documentName'] = documentName;
data['documentPath'] = documentPath;
data['displayOrder'] = displayOrder;
data['isActive'] = isActive;
data['createdBy'] = createdBy;
data['modifiedBy'] = modifiedBy;
data['createdAt'] = createdAt;
data['updatedAt'] = updatedAt;
data['deletedAt'] = deletedAt;
return data;
}
}
class ArtifactsVideo {
int? id;
int? ioXid;
String? artifactName;
String? artifactStreamingURL;
int? displayOrder;
bool? isActive;
Null createdBy;
Null modifiedBy;
String? createdAt;
String? updatedAt;
Null deletedAt;
ArtifactsVideo(
{this.id,
this.ioXid,
this.artifactName,
this.artifactStreamingURL,
this.displayOrder,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
ArtifactsVideo.fromJson(Map<String, dynamic> json) {
id = json['id'];
ioXid = json['io_xid'];
artifactName = json['artifactName'];
artifactStreamingURL = json['artifactStreamingURL'];
displayOrder = json['displayOrder'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['io_xid'] = ioXid;
data['artifactName'] = artifactName;
data['artifactStreamingURL'] = artifactStreamingURL;
data['displayOrder'] = displayOrder;
data['isActive'] = isActive;
data['createdBy'] = createdBy;
data['modifiedBy'] = modifiedBy;
data['createdAt'] = createdAt;
data['updatedAt'] = updatedAt;
data['deletedAt'] = deletedAt;
return data;
}
}
class ArtifactsImage {
int? id;
int? ioXid;
String? artifactName;
String? artifactPathName;
int? displayOrder;
bool? isActive;
Null createdBy;
Null modifiedBy;
String? createdAt;
String? updatedAt;
Null deletedAt;
ArtifactsImage(
{this.id,
this.ioXid,
this.artifactName,
this.artifactPathName,
this.displayOrder,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
ArtifactsImage.fromJson(Map<String, dynamic> json) {
id = json['id'];
ioXid = json['io_xid'];
artifactName = json['artifactName'];
artifactPathName = json['artifactPathName'];
displayOrder = json['displayOrder'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['io_xid'] = ioXid;
data['artifactName'] = artifactName;
data['artifactPathName'] = artifactPathName;
data['displayOrder'] = displayOrder;
data['isActive'] = isActive;
data['createdBy'] = createdBy;
data['modifiedBy'] = modifiedBy;
data['createdAt'] = createdAt;
data['updatedAt'] = updatedAt;
data['deletedAt'] = deletedAt;
return data;
}
}
class MinInvestmentAmt {
int? id;
int? ioXid;
int? countryXid;
String? minInvestmentAmt;
String? maxInvestmentAmt;
bool? isActive;
Null createdBy;
Null modifiedBy;
String? createdAt;
String? updatedAt;
Null deletedAt;
MinInvestmentAmt(
{this.id,
this.ioXid,
this.countryXid,
this.minInvestmentAmt,
this.maxInvestmentAmt,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
MinInvestmentAmt.fromJson(Map<String, dynamic> json) {
id = json['id'];
ioXid = json['io_xid'];
countryXid = json['country_xid'];
minInvestmentAmt = json['minInvestmentAmt'];
maxInvestmentAmt = json['maxInvestmentAmt'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['io_xid'] = ioXid;
data['country_xid'] = countryXid;
data['minInvestmentAmt'] = minInvestmentAmt;
data['maxInvestmentAmt'] = maxInvestmentAmt;
data['isActive'] = isActive;
data['createdBy'] = createdBy;
data['modifiedBy'] = modifiedBy;
data['createdAt'] = createdAt;
data['updatedAt'] = updatedAt;
data['deletedAt'] = deletedAt;
return data;
}
}
class KeyMerits {
int? id;
int? ioXid;
int? iconXid;
String? meritsHeader;
String? meritsHeaderArabic;
String? meritsDescription;
String? meritsDescriptionArabic;
int? displayOrder;
bool? isActive;
Null createdBy;
Null modifiedBy;
String? createdAt;
String? updatedAt;
Null deletedAt;
Icon? icon;
KeyMerits(
{this.id,
this.ioXid,
this.iconXid,
this.meritsHeader,
this.meritsHeaderArabic,
this.meritsDescription,
this.meritsDescriptionArabic,
this.displayOrder,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt,
this.icon});
KeyMerits.fromJson(Map<String, dynamic> json) {
id = json['id'];
ioXid = json['io_xid'];
iconXid = json['icon_xid'];
meritsHeader = json['meritsHeader'];
meritsHeaderArabic = json['meritsHeaderArabic'];
meritsDescription = json['meritsDescription'];
meritsDescriptionArabic = json['meritsDescriptionArabic'];
displayOrder = json['displayOrder'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
icon = json['icon'] != null ? Icon.fromJson(json['icon']) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['io_xid'] = ioXid;
data['icon_xid'] = iconXid;
data['meritsHeader'] = meritsHeader;
data['meritsHeaderArabic'] = meritsHeaderArabic;
data['meritsDescription'] = meritsDescription;
data['meritsDescriptionArabic'] = meritsDescriptionArabic;
data['displayOrder'] = displayOrder;
data['isActive'] = isActive;
data['createdBy'] = createdBy;
data['modifiedBy'] = modifiedBy;
data['createdAt'] = createdAt;
data['updatedAt'] = updatedAt;
data['deletedAt'] = deletedAt;
if (icon != null) {
data['icon'] = icon!.toJson();
}
return data;
}
}
class Icon {
int? id;
String? iconName;
String? iconFilePath;
bool? isActive;
Null createdBy;
Null modifiedBy;
String? createdAt;
String? updatedAt;
Null deletedAt;
Icon(
{this.id,
this.iconName,
this.iconFilePath,
this.isActive,
this.createdBy,
this.modifiedBy,
this.createdAt,
this.updatedAt,
this.deletedAt});
Icon.fromJson(Map<String, dynamic> json) {
id = json['id'];
iconName = json['iconName'];
iconFilePath = json['iconFilePath'];
isActive = json['isActive'];
createdBy = json['createdBy'];
modifiedBy = json['modifiedBy'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
deletedAt = json['deletedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['iconName'] = iconName;
data['iconFilePath'] = iconFilePath;
data['isActive'] = isActive;
data['createdBy'] = createdBy;
data['modifiedBy'] = modifiedBy;
data['createdAt'] = createdAt;
data['updatedAt'] = updatedAt;
data['deletedAt'] = deletedAt;
return data;
}
}

View File

@@ -0,0 +1,23 @@
import '../../../../../Api_Helper/base_manager.dart';
import '../../../../../shared/api/api_endpoints.dart';
import '../../../../../shared/api/network_api_services.dart';
class IOApi {
Future<ResponseData> availableIOAPI() async {
String url = ApiEndpoints.availableIOApi;
final response = await NetworkApiService().get(url);
return response;
}
Future<ResponseData> closedIOAPI() async {
String url = ApiEndpoints.closedIOApi;
final response = await NetworkApiService().get(url);
return response;
}
Future<ResponseData> iODetailsAPI(int id) async {
String url = "${ApiEndpoints.detailsIOApi}$id";
final response = await NetworkApiService().get(url);
return response;
}
}

View File

@@ -0,0 +1,34 @@
// video_bloc.dart
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:tanami_app/features/MainScreens/Invest/domain/model/detail_io_model.dart';
import 'package:tanami_app/features/MainScreens/Invest/domain/repository/io_api.dart';
import '../../../../../../Api_Helper/base_manager.dart';
import '../../../../../../Globalconst.dart';
import 'io_details_event.dart';
import 'io_details_state.dart';
class IODetailsBloc extends Bloc<IODetailsEvent, IODetailsState> {
final int id;
IODetailsBloc({required this.id}) : super(IODetailsStateInitial()) {
on<IODetailsEvent>(mapEventToState);
}
Future<void> mapEventToState(
IODetailsEvent event, Emitter<IODetailsState> emit) async {
emit(IODetailsStateLoading());
try {
ResponseData response = await IOApi().iODetailsAPI(id);
if (response.status == ResponseStatus.SUCCESS) {
DetailIOModel detailIOModel = DetailIOModel.fromJson(response.data);
emit(IODetailsStateLoaded(detailIOModel));
}
} catch (e) {
emit(IODetailsError(Globalconst.languageSelected == "en"
? 'Oops Something went wrong'
: "تبا شيء ما حدث بشكل خاطئ"));
}
}
}

View File

@@ -0,0 +1,16 @@
// video_event.dart
import 'package:equatable/equatable.dart';
abstract class IODetailsEvent extends Equatable {
const IODetailsEvent();
@override
List<Object> get props => [];
}
class FetchIODetailsData extends IODetailsEvent {
const FetchIODetailsData();
@override
List<Object> get props => [];
}

View File

@@ -0,0 +1,32 @@
// video_state.dart
import 'package:equatable/equatable.dart';
import 'package:tanami_app/features/MainScreens/Invest/domain/model/detail_io_model.dart';
abstract class IODetailsState extends Equatable {
const IODetailsState();
@override
List<Object> get props => [];
}
class IODetailsStateInitial extends IODetailsState {}
class IODetailsStateLoading extends IODetailsState {}
class IODetailsStateLoaded extends IODetailsState {
final DetailIOModel detailIOModel;
const IODetailsStateLoaded(this.detailIOModel);
@override
List<Object> get props => [detailIOModel];
}
class IODetailsError extends IODetailsState {
final String message;
const IODetailsError(this.message);
@override
List<Object> get props => [message];
}

View File

@@ -12,9 +12,11 @@ class InvestPaymentBloc extends Bloc<InvestPaymentEvent, InvestPaymentState> {
return formKey;
}
InvestPaymentBloc() : super(const InvestPaymentState(isFormValid: false)) {
InvestPaymentBloc()
: super(const InvestPaymentState(isFormValid: false, amount: 0)) {
on<FormTextChanged>((event, emit) {
emit(state.copyWith(isFormValid: event.text.isNotEmpty));
final amount = double.tryParse(event.text.replaceAll(',', '')) ?? 0;
emit(state.copyWith(isFormValid: event.text.isNotEmpty, amount: amount));
});
}

View File

@@ -2,15 +2,23 @@ import 'package:equatable/equatable.dart';
class InvestPaymentState extends Equatable {
final bool isFormValid;
final double amount;
const InvestPaymentState({required this.isFormValid});
const InvestPaymentState({
required this.isFormValid,
required this.amount,
});
InvestPaymentState copyWith({bool? isFormValid}) {
InvestPaymentState copyWith({
bool? isFormValid,
double? amount,
}) {
return InvestPaymentState(
isFormValid: isFormValid ?? this.isFormValid,
amount: amount ?? this.amount,
);
}
@override
List<Object> get props => [isFormValid];
List<Object> get props => [isFormValid, amount];
}

View File

@@ -1,25 +1,52 @@
import 'package:bloc/bloc.dart';
import 'dart:developer';
import 'package:bloc/bloc.dart';
import 'package:tanami_app/features/MainScreens/Invest/domain/model/available_io_model.dart';
import 'package:tanami_app/features/MainScreens/Invest/domain/model/closed_io_model.dart';
import '../../../../../Api_Helper/base_manager.dart';
import '../../domain/repository/io_api.dart';
import 'tab_event.dart';
import 'tab_state.dart';
class TabBloc extends Bloc<TabEvent, TabState> {
TabBloc() : super(const TabState()) {
TabBloc() : super(TabState(AvailableIOModel(), ClosedIOModel(), false, '')) {
on<LoadAvailableItems>(_onLoadAvailableItems);
on<LoadClosedItems>(_onLoadClosedItems);
}
void _onLoadAvailableItems(LoadAvailableItems event, Emitter<TabState> emit) {
// Simulate fetching available items
final availableItems =
List<String>.generate(10, (index) => 'Available Item $index');
emit(state.copyWith(availableItems: availableItems));
Future<void> _onLoadAvailableItems(
LoadAvailableItems event, Emitter<TabState> emit) async {
emit(state.copyWith(loading: true));
try {
ResponseData response = await IOApi().availableIOAPI();
log(response.data.toString());
if (response.status == ResponseStatus.SUCCESS) {
AvailableIOModel availableIOModel =
AvailableIOModel.fromJson(response.data);
emit(state.copyWith(availableItems: availableIOModel, loading: false));
} else {
emit(state.copyWith(errorMessage: response.message, loading: false));
}
} catch (e) {
emit(state.copyWith(
errorMessage: 'Failed to fetch available items: $e', loading: false));
}
}
void _onLoadClosedItems(LoadClosedItems event, Emitter<TabState> emit) {
// Simulate fetching closed items
final closedItems =
List<String>.generate(10, (index) => 'Closed Item $index');
emit(state.copyWith(closedItems: closedItems));
void _onLoadClosedItems(LoadClosedItems event, Emitter<TabState> emit) async {
emit(state.copyWith(loading: true));
try {
ResponseData response = await IOApi().closedIOAPI();
if (response.status == ResponseStatus.SUCCESS) {
ClosedIOModel closedIOModel = ClosedIOModel.fromJson(response.data);
emit(state.copyWith(closedItems: closedIOModel, loading: false));
} else {
emit(state.copyWith(errorMessage: response.message, loading: false));
}
} catch (e) {
emit(state.copyWith(
errorMessage: 'Failed to fetch available items: $e', loading: false));
}
}
}

View File

@@ -1,24 +1,36 @@
import 'package:equatable/equatable.dart';
class TabState extends Equatable {
final List<String> availableItems;
final List<String> closedItems;
import '../../domain/model/available_io_model.dart';
import '../../domain/model/closed_io_model.dart';
const TabState({
this.availableItems = const [],
this.closedItems = const [],
});
class TabState extends Equatable {
final AvailableIOModel availableItems;
final ClosedIOModel closedItems;
final bool loading;
final String errorMessage;
const TabState(
this.availableItems,
this.closedItems,
this.loading,
this.errorMessage,
);
TabState copyWith({
List<String>? availableItems,
List<String>? closedItems,
AvailableIOModel? availableItems,
ClosedIOModel? closedItems,
bool? loading,
String? errorMessage,
}) {
return TabState(
availableItems: availableItems ?? this.availableItems,
closedItems: closedItems ?? this.closedItems,
availableItems ?? this.availableItems,
closedItems ?? this.closedItems,
loading ?? this.loading,
errorMessage ?? this.errorMessage,
);
}
@override
List<Object> get props => [availableItems, closedItems];
List<Object> get props =>
[availableItems, closedItems, loading, errorMessage];
}

View File

@@ -1,9 +1,12 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:gap/gap.dart';
import 'package:tanami_app/core/styles/app_color.dart';
import 'package:tanami_app/features/MainScreens/Invest/presentation/pages/invest_video_section.dart';
import 'package:tanami_app/features/MainScreens/Invest/presentation/bloc/io_invest/io_details_state.dart';
import 'package:tanami_app/features/MainScreens/Invest/presentation/widgets/invest_video_section.dart';
import '../bloc/io_invest/io_details_bloc.dart';
import '../widgets/invest_detail_details_section.dart';
import '../widgets/invest_detail_image_carousel.dart';
import '../widgets/invest_included_documents_section.dart';
@@ -17,49 +20,71 @@ class InvestDetailsLayout extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColor.plainWhite,
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 20.0),
child: Column(
children: [
Container(
decoration: BoxDecoration(
color: AppColor.plainWhite,
borderRadius: const BorderRadius.all(Radius.circular(20.0)),
boxShadow: [
BoxShadow(
color: AppColor.plainBlack.withOpacity(0.15),
spreadRadius: 2,
blurRadius: 10,
offset: const Offset(0, 3),
body:
BlocBuilder<IODetailsBloc, IODetailsState>(builder: (context, state) {
if (state is IODetailsStateLoading) {
return const Center(child: CircularProgressIndicator());
} else if (state is IODetailsStateLoaded) {
return SingleChildScrollView(
child: Padding(
padding:
const EdgeInsets.symmetric(horizontal: 16.0, vertical: 20.0),
child: Column(
children: [
Container(
decoration: BoxDecoration(
color: AppColor.plainWhite,
borderRadius:
const BorderRadius.all(Radius.circular(20.0)),
boxShadow: [
BoxShadow(
color: AppColor.plainBlack.withOpacity(0.15),
spreadRadius: 2,
blurRadius: 10,
offset: const Offset(0, 3),
),
],
),
],
),
child: Column(
children: [
InvestDetailCarouselView(),
InvestDetailDetailsSection(
type: type,
child: Column(
children: [
InvestDetailCarouselView(
type: type,
detailIOModel: state.detailIOModel,
),
InvestDetailDetailsSection(
type: type,
detailIOModel: state.detailIOModel,
),
],
),
],
),
),
Gap(
20.h,
),
KeyInvestmentSection(
keyMerits: state.detailIOModel.data!.keyMerits!,
),
type == "closed" ? const SizedBox() : Gap(20.h),
type == "closed"
? const SizedBox()
: InvestIncludedDocumentsSection(
documentsList: state.detailIOModel.data!.documents!,
),
type == "closed" ? const SizedBox() : Gap(20.h),
type == "closed"
? const SizedBox()
: InvestVideoSection(
artifactsVideoList:
state.detailIOModel.data!.artifactsVideo!,
),
],
),
Gap(
20.h,
),
const KeyInvestmentSection(),
Gap(
20.h,
),
const InvestIncludedDocumentsSection(),
Gap(
20.h,
),
const InvestVideoSection(),
],
),
),
),
),
);
} else {
return const Center(child: Text('Something went wrong!'));
}
}),
);
}
}

View File

@@ -5,18 +5,27 @@ import 'package:tanami_app/core/routes/route_name.dart';
import 'package:tanami_app/core/routes/routes.dart';
import 'package:tanami_app/core/styles/app_color.dart';
import 'package:tanami_app/core/styles/app_text.dart';
import 'package:tanami_app/features/MainScreens/Invest/presentation/bloc/io_invest/io_details_bloc.dart';
import 'package:tanami_app/features/MainScreens/Invest/presentation/bloc/io_invest/io_details_event.dart';
import 'package:tanami_app/shared/components/button_widget.dart';
import '../../../../../core/utils/language/localizations_delegate.dart';
import '../../../../../shared/components/appbar_widget.dart';
import '../../../Portfolio/presentation/bloc/carousel/carousel_bloc.dart';
import 'invest_details_layout.dart';
class InvestDetailsScreen extends StatelessWidget {
final String type;
const InvestDetailsScreen({super.key, required this.type});
final String id;
const InvestDetailsScreen({
super.key,
required this.type,
required this.id,
});
@override
Widget build(BuildContext context) {
var localizations = AppLocalizations.of(context);
return Scaffold(
backgroundColor: AppColor.plainWhite,
bottomNavigationBar: type == "closed"
@@ -26,7 +35,7 @@ class InvestDetailsScreen extends StatelessWidget {
width: 1.sw,
height: 65.h,
child: ButtonWidget().elevatedBtn(
text: AppText.investText,
text: localizations.translate(AppText.investText),
clr: AppColor.primaryColor2,
function: () {
goRouter.pushNamed(RouteName.investPaymentScreen);
@@ -43,6 +52,10 @@ class InvestDetailsScreen extends StatelessWidget {
// Create an instance of the OnboardingBloc
create: (context) => CarouselBloc(),
),
BlocProvider(
create: (context) => IODetailsBloc(id: int.parse(id))
..add(const FetchIODetailsData()),
)
],
child: InvestDetailsLayout(
type: type,

View File

@@ -5,12 +5,19 @@ import 'package:tanami_app/core/routes/route_name.dart';
import 'package:tanami_app/core/routes/routes.dart';
import 'package:tanami_app/core/styles/app_color.dart';
import 'package:tanami_app/core/styles/app_text.dart';
import 'package:tanami_app/features/MainScreens/Invest/domain/model/closed_io_model.dart';
import 'package:tanami_app/features/MainScreens/Invest/presentation/widgets/kyc_card.dart';
import 'package:tanami_app/shared/components/text_widget.dart';
import '../../../../../Api_Helper/base_manager.dart';
import '../../../../../core/utils/language/localizations_delegate.dart';
import '../../domain/model/available_io_model.dart';
import '../../domain/repository/io_api.dart';
import '../bloc/tab_bloc.dart';
import '../bloc/tab_event.dart';
import '../bloc/tab_state.dart';
import '../widgets/invest_closed_details_section.dart';
import '../widgets/invest_closed_image_carousel.dart';
import '../widgets/invest_details_section.dart';
import '../widgets/invest_image_carousel.dart';
@@ -19,6 +26,7 @@ class InvestLayout extends StatelessWidget {
@override
Widget build(BuildContext context) {
var localizations = AppLocalizations.of(context);
return DefaultTabController(
length: 2,
child: Scaffold(
@@ -26,9 +34,9 @@ class InvestLayout extends StatelessWidget {
body: Column(
children: [
TabBar(
tabs: const [
Tab(text: AppText.availableText),
Tab(text: AppText.closedText),
tabs: [
Tab(text: localizations.translate(AppText.availableText)),
Tab(text: localizations.translate(AppText.closedText)),
],
labelStyle: GoogleFonts.dmSans(
fontWeight: FontWeight.bold,
@@ -61,121 +69,203 @@ class InvestLayout extends StatelessWidget {
}
}
class AvailableItemsScreen extends StatelessWidget {
class AvailableItemsScreen extends StatefulWidget {
const AvailableItemsScreen({super.key});
@override
State<AvailableItemsScreen> createState() => _AvailableItemsScreenState();
}
class _AvailableItemsScreenState extends State<AvailableItemsScreen> {
bool isLoading = true;
AvailableIOModel availableIOModel = AvailableIOModel();
@override
void initState() {
apiCalls();
super.initState();
}
Future<void> apiCalls() async {
try {
ResponseData response = await IOApi().availableIOAPI();
if (response.status == ResponseStatus.SUCCESS) {
availableIOModel = AvailableIOModel.fromJson(response.data);
setState(() {
isLoading = false;
});
} else {
setState(() {
isLoading = false;
});
}
} catch (e) {}
}
@override
Widget build(BuildContext context) {
var localizations = AppLocalizations.of(context);
context.read<TabBloc>().add(LoadAvailableItems());
return BlocBuilder<TabBloc, TabState>(
builder: (context, state) {
if (state.availableItems.isEmpty) {
if (isLoading) {
return const Center(child: CircularProgressIndicator());
}
return ListView.builder(
itemCount: state.availableItems.length,
itemBuilder: (context, index) {
return index == 0
? Container(
margin: const EdgeInsets.symmetric(
horizontal: 16,
vertical: 18,
),
child: kycCard())
: GestureDetector(
onTap: () {
goRouter.pushNamed(RouteName.investDetailScreen,
pathParameters: {"type": "available"});
},
child: Container(
} else if (availableIOModel.data!.rows!.isEmpty) {
return Center(
child: TextWidget().text15W700(
localizations.translate(AppText.noDataAvailable),
clr: AppColor.plainBlack));
} else {
return ListView.builder(
itemCount: availableIOModel.data!.rows!.length + 1,
itemBuilder: (context, index) {
return index == 0
? Container(
margin: const EdgeInsets.symmetric(
horizontal: 16,
vertical: 18,
),
decoration: BoxDecoration(
color: AppColor.plainWhite,
borderRadius:
const BorderRadius.all(Radius.circular(20.0)),
boxShadow: [
BoxShadow(
color: AppColor.plainBlack.withOpacity(0.15),
spreadRadius: 2,
blurRadius: 10,
offset: const Offset(0, 3),
),
],
child: kycCard(context))
: GestureDetector(
onTap: () {
goRouter.pushNamed(RouteName.investDetailScreen,
pathParameters: {
"type": "available",
"id": availableIOModel.data!.rows![index - 1].id!
.toString()
});
},
child: Container(
margin: const EdgeInsets.symmetric(
horizontal: 16,
vertical: 18,
),
decoration: BoxDecoration(
color: AppColor.plainWhite,
borderRadius:
const BorderRadius.all(Radius.circular(20.0)),
boxShadow: [
BoxShadow(
color: AppColor.plainBlack.withOpacity(0.15),
spreadRadius: 2,
blurRadius: 10,
offset: const Offset(0, 3),
),
],
),
child: Column(
children: [
InvestCarouselView(
rows: availableIOModel.data!.rows![index - 1],
),
InvestDetailsSection(
availableIOModel:
availableIOModel.data!.rows![index - 1],
),
],
),
),
child: Column(
children: [
InvestCarouselView(),
const InvestDetailsSection(),
],
),
),
);
},
);
);
},
);
}
},
);
}
}
class ClosedItemsScreen extends StatelessWidget {
class ClosedItemsScreen extends StatefulWidget {
const ClosedItemsScreen({super.key});
@override
State<ClosedItemsScreen> createState() => _ClosedItemsScreenState();
}
class _ClosedItemsScreenState extends State<ClosedItemsScreen> {
bool isLoading = true;
ClosedIOModel closedIOModel = ClosedIOModel();
@override
void initState() {
apiCalls();
super.initState();
}
Future<void> apiCalls() async {
try {
ResponseData response = await IOApi().closedIOAPI();
if (response.status == ResponseStatus.SUCCESS) {
closedIOModel = ClosedIOModel.fromJson(response.data);
setState(() {
isLoading = false;
});
} else {
setState(() {
isLoading = false;
});
}
} catch (e) {}
}
@override
Widget build(BuildContext context) {
var localizations = AppLocalizations.of(context);
context.read<TabBloc>().add(LoadClosedItems());
return BlocBuilder<TabBloc, TabState>(
builder: (context, state) {
if (state.closedItems.isEmpty) {
if (isLoading) {
return const Center(child: CircularProgressIndicator());
} else if (closedIOModel.data!.rows!.isEmpty) {
return Center(
child: TextWidget().text15W700(
localizations.translate(AppText.noDataAvailable),
clr: AppColor.plainBlack));
} else {
return ListView.builder(
itemCount: closedIOModel.data!.rows!.length,
itemBuilder: (context, index) {
return GestureDetector(
onTap: () {
goRouter.pushNamed(RouteName.investDetailScreen,
pathParameters: {
"type": "closed",
"id": closedIOModel.data!.rows![index].id!.toString()
});
},
child: Container(
margin: const EdgeInsets.symmetric(
horizontal: 16,
vertical: 18,
),
decoration: BoxDecoration(
color: AppColor.plainWhite,
borderRadius: const BorderRadius.all(Radius.circular(20.0)),
boxShadow: [
BoxShadow(
color: AppColor.plainBlack.withOpacity(0.15),
spreadRadius: 2,
blurRadius: 10,
offset: const Offset(0, 3),
),
],
),
child: Column(
children: [
InvestClosedCarouselView(
rows: closedIOModel.data!.rows![index],
),
InvestClosedDetailsSection(
closedIoModel: closedIOModel.data!.rows![index],
),
],
),
),
);
},
);
}
return ListView.builder(
itemCount: state.closedItems.length,
itemBuilder: (context, index) {
return index == 0
? Container(
margin: const EdgeInsets.symmetric(
horizontal: 16,
vertical: 18,
),
child: kycCard())
: GestureDetector(
onTap: () {
goRouter.pushNamed(RouteName.investDetailScreen,
pathParameters: {"type": "closed"});
},
child: Container(
margin: const EdgeInsets.symmetric(
horizontal: 16,
vertical: 18,
),
decoration: BoxDecoration(
color: AppColor.plainWhite,
borderRadius:
const BorderRadius.all(Radius.circular(20.0)),
boxShadow: [
BoxShadow(
color: AppColor.plainBlack.withOpacity(0.15),
spreadRadius: 2,
blurRadius: 10,
offset: const Offset(0, 3),
),
],
),
child: Column(
children: [
InvestCarouselView(),
const InvestClosedDetailsSection(),
],
),
),
);
},
);
},
);
}

View File

@@ -5,7 +5,9 @@ import 'package:tanami_app/features/MainScreens/Portfolio/presentation/bloc/caro
import '../../../../../core/styles/app_color.dart';
import '../../../../../core/styles/app_text.dart';
import '../../../../../core/utils/language/localizations_delegate.dart';
import '../../../../../shared/components/text_widget.dart';
import '../bloc/tab_event.dart';
import 'invest_layout.dart';
class InvestScreen extends StatefulWidget {
@@ -18,6 +20,7 @@ class InvestScreen extends StatefulWidget {
class _InvestScreenState extends State<InvestScreen> {
@override
Widget build(BuildContext context) {
var localizations = AppLocalizations.of(context);
return Scaffold(
backgroundColor: AppColor.plainWhite,
appBar: AppBar(
@@ -27,7 +30,7 @@ class _InvestScreenState extends State<InvestScreen> {
scrolledUnderElevation: 0,
automaticallyImplyLeading: false,
title: TextWidget().text22W700(
AppText.investText,
localizations.translate(AppText.investText),
clr: AppColor.charcoalColor,
),
titleSpacing: 16,
@@ -35,9 +38,8 @@ class _InvestScreenState extends State<InvestScreen> {
body: MultiBlocProvider(
providers: [
BlocProvider(
// Create an instance of the OnboardingBloc
create: (context) => TabBloc(),
),
// Create an instance of the OnboardingBloc
create: (context) => TabBloc()),
BlocProvider(
// Create an instance of the OnboardingBloc
create: (context) => CarouselBloc(),

View File

@@ -1,89 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:tanami_app/core/styles/app_images.dart';
import '../../../../../core/styles/app_text.dart';
class InvestVideoSection extends StatelessWidget {
const InvestVideoSection({super.key});
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: const BorderRadius.all(Radius.circular(20.0)),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.15),
spreadRadius: 2,
blurRadius: 10,
offset: const Offset(0, 3), // changes position of shadow
),
],
),
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 20.0, horizontal: 16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
AppText.videosTitle,
style: GoogleFonts.dmSans(
color: Colors.black,
fontSize: 15.sp,
fontWeight: FontWeight.w700,
),
),
SizedBox(
height: 12.h,
),
ListView.builder(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: videos.length,
itemBuilder: (context, index) {
return Padding(
padding: const EdgeInsets.only(bottom: 18.0),
child: ClipRRect(
borderRadius: const BorderRadius.all(
Radius.circular(18.0),
),
child: Stack(
children: [
Image.asset(
videos[index],
fit: BoxFit.cover,
height: 160.h,
width: 1.sw,
),
Positioned(
bottom: 0.0,
child: Image.asset(
AppImages.academyCardOverlay,
),
),
Positioned.fill(
child: Image.asset(
AppImages.videoPlayIcon,
),
)
],
),
),
);
},
)
],
),
),
);
}
}
List videos = [
'assets/images/academy_screen/vd_bg.jpg',
'assets/images/academy_screen/vd_bg.jpg',
'assets/images/academy_screen/vd_bg.jpg'
];

View File

@@ -27,7 +27,7 @@ class ConfirmInvestmentScreen extends StatelessWidget {
),
),
),
body: ConfirmInvestmentLayout(),
body: const ConfirmInvestmentLayout(),
);
}
}

Some files were not shown because too many files have changed in this diff Show More