diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index 76cb33b..8045766 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 99d6ad9..a087955 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 212214d..f111811 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 380c485..8ed9de1 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index f7583bf..5ef510c 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/assets/fonts/Font.ttf b/assets/fonts/Font.ttf index 5ef760d..42c6a36 100644 Binary files a/assets/fonts/Font.ttf and b/assets/fonts/Font.ttf differ diff --git a/assets/images/001.jpg b/assets/images/001.jpg deleted file mode 100644 index 7a18b5c..0000000 Binary files a/assets/images/001.jpg and /dev/null differ diff --git a/assets/images/001.png b/assets/images/001.png new file mode 100644 index 0000000..f229777 Binary files /dev/null and b/assets/images/001.png differ diff --git a/assets/images/D2.png b/assets/images/D2.png new file mode 100644 index 0000000..28be6da Binary files /dev/null and b/assets/images/D2.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png new file mode 100644 index 0000000..061eee8 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png new file mode 100644 index 0000000..9a2a24c Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png new file mode 100644 index 0000000..2d45fe2 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png new file mode 100644 index 0000000..bdc7a1e Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png new file mode 100644 index 0000000..7556101 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png new file mode 100644 index 0000000..ea43b52 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png new file mode 100644 index 0000000..5306655 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png new file mode 100644 index 0000000..3f84464 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png new file mode 100644 index 0000000..eacdb94 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png new file mode 100644 index 0000000..7950dd8 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png new file mode 100644 index 0000000..2d01c22 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png new file mode 100644 index 0000000..fb54179 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png new file mode 100644 index 0000000..ea8e3d1 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png new file mode 100644 index 0000000..2793e3c Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png new file mode 100644 index 0000000..c622889 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png new file mode 100644 index 0000000..c372432 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png new file mode 100644 index 0000000..07b14cb Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png new file mode 100644 index 0000000..967f552 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png new file mode 100644 index 0000000..755eb2a Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d0d98aa..65b74d7 100644 --- a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1 +1 @@ -{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file +{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"}]} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index f8b9b58..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index dd80590..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 0fac958..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index 4627622..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 44e42a3..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index 6b7a443..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index d9458af..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 0fac958..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index fa01861..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index f705788..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png deleted file mode 100644 index d64b250..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png deleted file mode 100644 index 3f4c93d..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png deleted file mode 100644 index 4231d6b..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png deleted file mode 100644 index 0f1d81d..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index f705788..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 40eefa2..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png deleted file mode 100644 index b2a45fd..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png deleted file mode 100644 index 0ee5779..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index e21499d..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 5f2d5ec..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index 7566b7a..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json deleted file mode 100644 index 0bedcf2..0000000 --- a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "LaunchImage.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png deleted file mode 100644 index 9da19ea..0000000 Binary files a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19ea..0000000 Binary files a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19ea..0000000 Binary files a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725..0000000 --- a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/lib/drawer_navigation_bar.dart b/lib/drawer_navigation_bar.dart index 5a6a9b8..a01469e 100644 --- a/lib/drawer_navigation_bar.dart +++ b/lib/drawer_navigation_bar.dart @@ -8,6 +8,7 @@ import 'package:provider/provider.dart'; import 'package:qadirneyriz/config/config.dart'; import 'package:qadirneyriz/screens/aboutUs/screen.dart'; import 'package:qadirneyriz/screens/auth/state/state.dart'; +import 'package:qadirneyriz/screens/change_pass/screen.dart'; import 'package:qadirneyriz/screens/home/screen.dart'; import 'package:qadirneyriz/screens/home/state.dart'; import 'package:qadirneyriz/screens/meeting/screen.dart'; @@ -45,6 +46,7 @@ class _CustomDrawerNavigationState extends State { const MeetingsScreen(), const PrivateMeetingsScreen(), const ReportScreen(), + const ChangePassScreen(), const AboutUsScreen() // Add more screens here ]; @@ -66,49 +68,56 @@ class _CustomDrawerNavigationState extends State { builder: (context, value, child) { return Drawer( backgroundColor: config.ui.backGroundColor, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(left: 16.0, top: 40), - child: Image.asset( - 'assets/images/iconinappbar.png', // مسیر لوگوی شما - height: 60, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.symmetric( + horizontal: 10, vertical: 35), + child: Image.asset( + 'assets/images/D2.png', // مسیر لوگوی شما + height: 60, + ), ), - ), - if (userRole == 0 || userRole == 2) - Row( - children: [ - Expanded( - child: Consumer( - builder: (context, value, child) { - return NewSessionButton( - title: AppLocalizations.of(context)!.newmeeting, - icon: Icons.person_outlined, - onPressed: () async { - await context.pushNamed('meetingadd'); - value.getTodayMeetings(); + if (userRole == 0 || userRole == 2) + Padding( + padding: const EdgeInsets.symmetric(horizontal: 5), + child: Row( + children: [ + Expanded( + child: Consumer( + builder: (context, value, child) { + return NewSessionButton( + title: + AppLocalizations.of(context)!.newmeeting, + icon: Icons.person_outlined, + onPressed: () async { + await context.pushNamed('meetingadd'); + value.getTodayMeetings(); + }, + ); }, - ); - }, - ), - ), - Expanded( - child: NewSessionButton( - title: - AppLocalizations.of(context)!.newprivatemeeting, - icon: Icons.people_outlined, - onPressed: () { - context.pushNamed('privatemeetingadd'); - }, - ), + ), + ), + Expanded( + child: NewSessionButton( + title: AppLocalizations.of(context)! + .newprivatemeeting, + icon: Icons.people_outlined, + onPressed: () { + context.pushNamed('privatemeetingadd'); + }, + ), + ), + ], ), - ], - ), - Expanded( - child: Padding( + ), + Padding( padding: const EdgeInsets.symmetric(vertical: 50), child: ListView( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), padding: EdgeInsets.zero, children: [ _buildDrawerItem( @@ -131,40 +140,44 @@ class _CustomDrawerNavigationState extends State { text: AppLocalizations.of(context)!.reports, index: 3, ), + _buildDrawerItem( + icon: FontAwesomeIcons.person, + text: AppLocalizations.of(context)!.profile, + index: 4, + ), _buildDrawerItem( icon: FontAwesomeIcons.info, text: AppLocalizations.of(context)!.aboutus, - index: 4, + index: 5, ), ], ), ), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Container( - decoration: BoxDecoration( - color: config.ui.secendGreen.withOpacity(.1), - borderRadius: BorderRadius.circular(10), - ), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - _buildLanguageButton('fa', 'فارسی', () { - value.setLocale('fa'); - }), - _buildLanguageButton('en', 'English', () { - value.setLocale('en'); - }), - ], + Padding( + padding: const EdgeInsets.all(8.0), + child: Container( + decoration: BoxDecoration( + color: config.ui.secendGreen.withOpacity(.1), + borderRadius: BorderRadius.circular(10), + ), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + _buildLanguageButton('fa', 'فارسی', () { + value.setLocale('fa'); + }), + _buildLanguageButton('en', 'English', () { + value.setLocale('en'); + }), + ], + ), ), ), ), - ), - const Divider(), - ], + ], + ), ), ); }, diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index d7d1987..658e303 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -20,7 +20,6 @@ "meetings": "Meetings", "events": "Appointments", "exit": "Exit", - "appname": "Foolad Ghadir Neyriz", "nomeetingfortoday": "No meeting is scheduled for today.", "todaymeetings": "Today's Meetings", "empty": "No data available.", @@ -118,5 +117,9 @@ "files":"Files", "acceptoperetion":"Accept Operetion", "areusuretodeletfile": "Are you sure you want to delete this file?", +"changepass":"Change Password", +"profile":"User Account", "doyouredit":"You must make at least one change", +"changename":"Change Username", +"newpass":"Your New Password", "textaboutus":"The Mizban meeting and appointment management software has been designed and developed with the aim of facilitating and optimizing the processes of organizing organizational and personal meetings under the leadership of Dr. Mohsen Mostafapour. This innovative and user-centric software serves as an efficient tool to enhance coordination and realize the motto **The Codeword of Empathy** within the esteemed **Foulad Ghadir Neyriz** organization. The Mizban project was initiated and launched with the invaluable support and backing of the esteemed CEO, Dr. Mohsen Mostafapour, representing a significant step forward in the organization's path toward growth and excellence." } diff --git a/lib/l10n/app_fa.arb b/lib/l10n/app_fa.arb index 7a42487..503ac39 100644 --- a/lib/l10n/app_fa.arb +++ b/lib/l10n/app_fa.arb @@ -20,7 +20,6 @@ "meetings":"جلسات", "events":"ملاقات ها", "exit":"خروج", - "appname":"فولاد غدیر نی ریز", "nomeetingfortoday":"برای امروز جلسه ایی تعریف نشده است.", "todaymeetings":"جلسه های امروز", "empty":"داده ایی وجود ندارد.", @@ -115,6 +114,11 @@ "accepted":"تایید شده", "files":"فایل ها", "acceptoperetion":"تایید عملیات", + "changepass":"تغییر رمزعبور", + "profile":"حساب کاربری", + "doyouredit":"باید حداقل یکی از تغییرات را انجام دهید!", + "changename":"تغییر نام کاربری", + "newpass":"رمزعبور جدید شما", "areusuretodeletfile":"آیا اطمینان دارید که میخواهید این فایل را حذف کنید؟", "textaboutus":"نرم‌افزار مدیریت جلسات و ملاقات‌های “میزبان” با هدف تسهیل و بهینه‌سازی فرآیندهای برگزاری جلسات سازمانی و شخصی جناب آقای دکتر محسن مصطفی پور طراحی و توسعه یافته تا ابزاری کارآمد و نوآورانه برای تحقق بیشتر اسم رمز همدلی در مجموعه معظم فولاد غدیر نی ریز باشد . این نرم افزار با حمایت ، همت و پشتیبانی بی‌دریغ مدیریت محترم عامل ( دکتر محسن مصطفی پور ) ایجاد ، توسعه و راه اندازی شده است." } \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index dcc5fc2..2e39c4b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -84,8 +84,8 @@ class _MyAppState extends State { ], locale: Locale(value.language), supportedLocales: const [ - Locale('fa'), // Persian Locale('en'), // English + Locale('fa'), // Persian ], ); }, diff --git a/lib/models/home/home_models.dart b/lib/models/home/home_models.dart index c2c88f2..d28843a 100644 --- a/lib/models/home/home_models.dart +++ b/lib/models/home/home_models.dart @@ -1,79 +1,105 @@ import 'dart:convert'; class TodayMeetingModel { - List? meetings; - String? note; - - TodayMeetingModel({ - this.meetings, - this.note, - }); - - factory TodayMeetingModel.fromRawJson(String str) => TodayMeetingModel.fromJson(json.decode(str)); - - String toRawJson() => json.encode(toJson()); - - factory TodayMeetingModel.fromJson(Map json) => TodayMeetingModel( - meetings: json["meetings"] == null ? [] : List.from(json["meetings"]!.map((x) => Meeting.fromJson(x))), + List? meetings; + List? privateMeetings; + String? note; + + TodayMeetingModel({ + this.meetings, + this.privateMeetings, + this.note, + }); + + factory TodayMeetingModel.fromRawJson(String str) => + TodayMeetingModel.fromJson(json.decode(str)); + + String toRawJson() => json.encode(toJson()); + + factory TodayMeetingModel.fromJson(Map json) => + TodayMeetingModel( + meetings: json["meetings"] == null + ? [] + : List.from( + json["meetings"]!.map((x) => Meeting.fromJson(x))), + privateMeetings: json["private_meetings"] == null + ? [] + : List.from( + json["private_meetings"]!.map((x) => Meeting.fromJson(x))), note: json["note"], - ); - - Map toJson() => { - "meetings": meetings == null ? [] : List.from(meetings!.map((x) => x.toJson())), + ); + + Map toJson() => { + "meetings": meetings == null + ? [] + : List.from(meetings!.map((x) => x.toJson())), + "private_meetings": privateMeetings == null + ? [] + : List.from(privateMeetings!.map((x) => x.toJson())), "note": note, - }; + }; } class Meeting { - int? id; - int? locationsId; - int? subjectId; - int? managerId; - int? ownerId; - String? azHour; - String? taHour; - dynamic description; - int? status; - int? accepted; - DateTime? dateMeeting; - DateTime? endDate; - DateTime? createdAt; - DateTime? updatedAt; - String? dateJalali; - String? statusTxt; - String? az; - String? ta; - Location? location; - Subject? subject; - - Meeting({ - this.id, - this.locationsId, - this.subjectId, - this.managerId, - this.ownerId, - this.azHour, - this.taHour, - this.description, - this.status, - this.accepted, - this.dateMeeting, - this.endDate, - this.createdAt, - this.updatedAt, - this.dateJalali, - this.statusTxt, - this.az, - this.ta, - this.location, - this.subject, - }); - - factory Meeting.fromRawJson(String str) => Meeting.fromJson(json.decode(str)); - - String toRawJson() => json.encode(toJson()); - - factory Meeting.fromJson(Map json) => Meeting( + int? id; + int? locationsId; + int? subjectId; + int? managerId; + int? ownerId; + String? azHour; + String? taHour; + dynamic description; + int? status; + int? accepted; + DateTime? dateMeeting; + DateTime? endDate; + DateTime? createdAt; + DateTime? updatedAt; + String? dateJalali; + String? statusTxt; + String? az; + String? ta; + List? minutes; + Location? location; + Subject? subject; + String? visitName; + String? visitMobile; + String? visitRole; + String? visitCompany; + + Meeting({ + this.id, + this.locationsId, + this.subjectId, + this.managerId, + this.ownerId, + this.azHour, + this.taHour, + this.description, + this.status, + this.accepted, + this.dateMeeting, + this.endDate, + this.createdAt, + this.updatedAt, + this.dateJalali, + this.statusTxt, + this.az, + this.ta, + this.minutes, + this.location, + this.subject, + this.visitName, + this.visitMobile, + this.visitRole, + this.visitCompany, + }); + + factory Meeting.fromRawJson(String str) => Meeting.fromJson(json.decode(str)); + + String toRawJson() => json.encode(toJson()); + + factory Meeting.fromJson(Map json) => Meeting( id: json["id"], locationsId: json["locations_id"], subjectId: json["subject_id"], @@ -84,19 +110,36 @@ class Meeting { description: json["description"], status: json["status"], accepted: json["accepted"], - dateMeeting: json["date_meeting"] == null ? null : DateTime.parse(json["date_meeting"]), - endDate: json["end_date"] == null ? null : DateTime.parse(json["end_date"]), - createdAt: json["created_at"] == null ? null : DateTime.parse(json["created_at"]), - updatedAt: json["updated_at"] == null ? null : DateTime.parse(json["updated_at"]), + dateMeeting: json["date_meeting"] == null + ? null + : DateTime.parse(json["date_meeting"]), + endDate: + json["end_date"] == null ? null : DateTime.parse(json["end_date"]), + createdAt: json["created_at"] == null + ? null + : DateTime.parse(json["created_at"]), + updatedAt: json["updated_at"] == null + ? null + : DateTime.parse(json["updated_at"]), dateJalali: json["date_jalali"], statusTxt: json["status_txt"], az: json["az"], ta: json["ta"], - location: json["location"] == null ? null : Location.fromJson(json["location"]), - subject: json["subject"] == null ? null : Subject.fromJson(json["subject"]), - ); - - Map toJson() => { + minutes: json["minutes"] == null + ? [] + : List.from(json["minutes"]!.map((x) => x)), + location: json["location"] == null + ? null + : Location.fromJson(json["location"]), + subject: + json["subject"] == null ? null : Subject.fromJson(json["subject"]), + visitName: json["visit_name"], + visitMobile: json["visit_mobile"], + visitRole: json["visit_role"], + visitCompany: json["visit_company"], + ); + + Map toJson() => { "id": id, "locations_id": locationsId, "subject_id": subjectId, @@ -115,79 +158,94 @@ class Meeting { "status_txt": statusTxt, "az": az, "ta": ta, + "minutes": + minutes == null ? [] : List.from(minutes!.map((x) => x)), "location": location?.toJson(), "subject": subject?.toJson(), - }; + "visit_name": visitName, + "visit_mobile": visitMobile, + "visit_role": visitRole, + "visit_company": visitCompany, + }; } class Location { - int? id; - String? address; - String? addressEn; - DateTime? createdAt; - DateTime? updatedAt; - - Location({ - this.id, - this.address, - this.addressEn, - this.createdAt, - this.updatedAt, - }); - - factory Location.fromRawJson(String str) => Location.fromJson(json.decode(str)); - - String toRawJson() => json.encode(toJson()); - - factory Location.fromJson(Map json) => Location( + int? id; + String? address; + String? addressEn; + DateTime? createdAt; + DateTime? updatedAt; + + Location({ + this.id, + this.address, + this.addressEn, + this.createdAt, + this.updatedAt, + }); + + factory Location.fromRawJson(String str) => + Location.fromJson(json.decode(str)); + + String toRawJson() => json.encode(toJson()); + + factory Location.fromJson(Map json) => Location( id: json["id"], address: json["address"], addressEn: json["address_en"], - createdAt: json["created_at"] == null ? null : DateTime.parse(json["created_at"]), - updatedAt: json["updated_at"] == null ? null : DateTime.parse(json["updated_at"]), - ); - - Map toJson() => { + createdAt: json["created_at"] == null + ? null + : DateTime.parse(json["created_at"]), + updatedAt: json["updated_at"] == null + ? null + : DateTime.parse(json["updated_at"]), + ); + + Map toJson() => { "id": id, "address": address, "address_en": addressEn, "created_at": createdAt?.toIso8601String(), "updated_at": updatedAt?.toIso8601String(), - }; + }; } class Subject { - int? id; - dynamic subject; - dynamic subjectEn; - DateTime? createdAt; - DateTime? updatedAt; + int? id; + String? subject; + dynamic subjectEn; + DateTime? createdAt; + DateTime? updatedAt; - Subject({ - this.id, - this.subject, - this.subjectEn, - this.createdAt, - this.updatedAt, - }); + Subject({ + this.id, + this.subject, + this.subjectEn, + this.createdAt, + this.updatedAt, + }); - factory Subject.fromRawJson(String str) => Subject.fromJson(json.decode(str)); + factory Subject.fromRawJson(String str) => Subject.fromJson(json.decode(str)); - String toRawJson() => json.encode(toJson()); + String toRawJson() => json.encode(toJson()); - factory Subject.fromJson(Map json) => Subject( + factory Subject.fromJson(Map json) => Subject( id: json["id"], subject: json["subject"], subjectEn: json["subject_en"], - createdAt: json["created_at"] == null ? null : DateTime.parse(json["created_at"]), - updatedAt: json["updated_at"] == null ? null : DateTime.parse(json["updated_at"]), - ); - - Map toJson() => { + createdAt: json["created_at"] == null + ? null + : DateTime.parse(json["created_at"]), + updatedAt: json["updated_at"] == null + ? null + : DateTime.parse(json["updated_at"]), + ); + + Map toJson() => { "id": id, "subject": subject, "subject_en": subjectEn, "created_at": createdAt?.toIso8601String(), "updated_at": updatedAt?.toIso8601String(), - }; + }; } diff --git a/lib/screens/aboutUs/screen.dart b/lib/screens/aboutUs/screen.dart index 4b5f423..e4099f8 100644 --- a/lib/screens/aboutUs/screen.dart +++ b/lib/screens/aboutUs/screen.dart @@ -29,14 +29,20 @@ class AboutUsScreen extends StatelessWidget { Column( children: [ Image.asset( - 'assets/images/logoaboutus.png', - width: 100, - height: 100, + 'assets/images/D2.png', + width: 80, + height: 80, + ), + SizedBox( + height: 8, ), Text( 'نسخه 1.0.0', style: TextStyle(fontSize: 12), ), + SizedBox( + height: 10, + ) ], ) ], diff --git a/lib/screens/change_pass/screen.dart b/lib/screens/change_pass/screen.dart new file mode 100644 index 0000000..926ec58 --- /dev/null +++ b/lib/screens/change_pass/screen.dart @@ -0,0 +1,165 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:qadirneyriz/config/config.dart'; +import 'package:qadirneyriz/screens/home/state.dart'; +import 'package:qadirneyriz/setting/setting.dart'; +import 'package:qadirneyriz/utils/enums/status.dart'; +import 'package:qadirneyriz/utils/tools/tools.dart'; +import 'package:qadirneyriz/widgets/custom_appbar.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:qadirneyriz/widgets/custom_button.dart'; +import 'package:qadirneyriz/widgets/custom_textfield.dart'; + +class ChangePassScreen extends StatefulWidget { + const ChangePassScreen({super.key}); + + @override + State createState() => _ChangePassScreenState(); +} + +class _ChangePassScreenState extends State { + TextEditingController nameController = TextEditingController(); + TextEditingController passController = TextEditingController(); + @override + Widget build(BuildContext context) { + final phone = setting.userLocalDb.getUser().mobile ?? ''; + final name = setting.userLocalDb.getUser().name ?? ''; + return Consumer( + builder: (context, value, child) { + return CustomScrollView( + slivers: [ + CustomAppbar( + title: AppLocalizations.of(context)!.profile, + ), + SliverToBoxAdapter( + child: Container( + decoration: BoxDecoration( + color: config.ui.secendGreen, + boxShadow: [ + BoxShadow( + color: config.ui.mainGray.withOpacity(.2), + spreadRadius: 10, + offset: const Offset(0, 5), + blurRadius: 8) + ], + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(50), + bottomRight: Radius.circular(50))), + child: Padding( + padding: const EdgeInsets.all(30.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + decoration: BoxDecoration( + color: Colors.white.withOpacity(.2), + shape: BoxShape.circle), + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Icon( + Icons.person, + size: 50, + color: Colors.white, + ), + ), + ), + SizedBox( + height: 10, + ), + Text( + name, + style: TextStyle( + fontSize: 16, + color: Colors.white, + fontWeight: FontWeight.bold), + ), + SizedBox( + height: 2, + ), + Text( + phone, + style: TextStyle( + fontSize: 16, + color: Colors.white, + fontWeight: FontWeight.bold), + ), + ], + ), + ), + ), + ), + SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 70), + child: Column( + children: [ + CustomTextField( + label: AppLocalizations.of(context)!.changename, + hintText: name, + textEditingController: nameController, + textInputType: TextInputType.visiblePassword), + CustomTextField( + label: AppLocalizations.of(context)!.changepass, + hintText: AppLocalizations.of(context)!.newpass, + isPass: true, + textEditingController: passController, + textInputType: TextInputType.visiblePassword), + SizedBox( + height: 60, + ), + chnagePassMethod(value) + ], + ), + ), + ) + ], + ); + }, + ); + } + + Widget chnagePassMethod(HomeState state) { + switch (state.statusEditProfile) { + case Status.loading: + return CustomButton( + hieght: 50, text: AppLocalizations.of(context)!.loading); + + default: + return CustomButton( + hieght: 50, + text: AppLocalizations.of(context)!.submit, + onPressed: () async { + if (nameController.text == '' && passController.text == '') { + Tools.showCustomSnackBar( + text: AppLocalizations.of(context)!.doyouredit, + isError: true, + context, + ); + } else { + final status = await state.editProfile( + name: nameController.text, pass: passController.text); + + if (status == Status.ready) { + Tools.showCustomSnackBar( + text: AppLocalizations.of(context)!.editdone, + isError: false, + context, + ); + setState(() {}); + } else { + Tools.showCustomSnackBar( + text: state.errorsEditProfile == null + ? state.messageEditProfile ?? + AppLocalizations.of(context)!.haserror + : Tools.combineErrorMessages( + state.errorsEditProfile ?? {}), + isError: true, + context, + ); + } + } + }, + ); + } + } +} diff --git a/lib/screens/home/screen.dart b/lib/screens/home/screen.dart index 4d45a0a..a17a3b5 100644 --- a/lib/screens/home/screen.dart +++ b/lib/screens/home/screen.dart @@ -38,9 +38,10 @@ class _HomeScreenState extends State { @override Widget build(BuildContext context) { DateTime now = DateTime.now(); - String dateMiladi = DateFormat('yyyy-MM-dd').format(now); - String dateJalali = - '${setting.timeNow.day} ${Tools.getMonthName(setting.timeNow.month)} ${setting.timeNow.year}'; // فرمت کردن تاریخ + String dateMiladi = + Tools.convertToPersianDigits(DateFormat('yyyy-MM-dd').format(now)); + String dateJalali = Tools.convertToPersianDigits( + '${setting.timeNow.day} ${Tools.getMonthName(setting.timeNow.month)} ${setting.timeNow.year}'); return Consumer( builder: (context, value, child) { @@ -102,31 +103,118 @@ class _HomeScreenState extends State { SliverToBoxAdapter( child: SizedBox( height: 170, - child: value.todayMeetingsModel!.meetings!.isNotEmpty + child: value.todayMeetingsModel!.meetings!.isNotEmpty || + value.todayMeetingsModel!.privateMeetings! + .isNotEmpty ? ListView.builder( scrollDirection: Axis.horizontal, + shrinkWrap: true, itemCount: - value.todayMeetingsModel!.meetings!.length, + value.todayMeetingsModel!.meetings!.length + + value.todayMeetingsModel!.privateMeetings! + .length, itemBuilder: (BuildContext context, int index) { - final items = - value.todayMeetingsModel!.meetings![index]; - return Padding( - padding: - const EdgeInsets.only(right: 5, left: 1), - child: CustomCardMeeting( - status: items.accepted ?? 0, - titel: items.subject != null - ? items.subject!.subject ?? '' - : '', - fromTime: items.azHour ?? '', - toTime: items.taHour ?? "", - location: items.location != null - ? items.location!.address ?? '' - : '', - date: items.dateJalali ?? '', - cardId: items.id ?? 0, - ), - ); + // ترکیب دو لیست + final meetingsLength = + value.todayMeetingsModel!.meetings!.length; + + if (index < meetingsLength) { + // آیتم از لیست `meetings` + final meeting = value + .todayMeetingsModel!.meetings![index]; + return Padding( + padding: const EdgeInsets.only( + right: 5, left: 1), + child: Stack( + children: [ + CustomCardMeeting( + status: meeting.accepted ?? 0, + titel: meeting.subject != null + ? meeting.subject!.subject ?? '' + : '', + fromTime: meeting.azHour ?? '', + toTime: meeting.taHour ?? "", + location: meeting.location != null + ? meeting.location!.address ?? '' + : '', + date: meeting.dateJalali ?? '', + cardId: meeting.id ?? 0, + ), + Positioned( + child: Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.circular(10), + color: Colors.green), + child: Padding( + padding: + const EdgeInsets.all(5.0), + child: Text( + AppLocalizations.of(context)! + .meetings, + style: TextStyle( + fontSize: 12, + color: Colors.white), + ), + )), + left: 30, + top: 20, + ), + ], + ), + ); + } else { + // آیتم از لیست `privateMeetings` + final privateMeeting = value + .todayMeetingsModel! + .privateMeetings![index - meetingsLength]; + return Padding( + padding: const EdgeInsets.only( + right: 5, left: 1), + child: Stack( + children: [ + CustomCardMeeting( + cardId: privateMeeting.id ?? -1, + titel: privateMeeting.subject != null + ? privateMeeting + .subject!.subject ?? + '' + : '', + location: + privateMeeting.location != null + ? privateMeeting + .location!.address ?? + '' + : '', + status: privateMeeting.accepted ?? 0, + fromTime: "${privateMeeting.azHour}", + date: privateMeeting.dateJalali ?? '', + toTime: privateMeeting.taHour ?? '', + ), + Positioned( + child: Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.circular(10), + color: Colors.green), + child: Padding( + padding: + const EdgeInsets.all(5.0), + child: Text( + AppLocalizations.of(context)! + .privatemeeting, + style: TextStyle( + fontSize: 12, + color: Colors.white), + ), + )), + left: 30, + top: 20, + ), + ], + ), + ); + } }, ) : Center( diff --git a/lib/screens/home/state.dart b/lib/screens/home/state.dart index 2645a29..a2d5299 100644 --- a/lib/screens/home/state.dart +++ b/lib/screens/home/state.dart @@ -46,7 +46,6 @@ class HomeState extends ChangeNotifier { return todayMettingsStatus; } -// log out // log out Status statusLogOut = Status.empty; String? messageLogOut; @@ -80,4 +79,38 @@ class HomeState extends ChangeNotifier { // print(statusLogOut); return statusLogOut; } + +// edit profile + Status statusEditProfile = Status.empty; + String? messageEditProfile; + Map? errorsEditProfile; + + Future editProfile({String? name, String? pass}) async { + statusEditProfile = Status.loading; + notifyListeners(); + try { + final result = await homeApi.editProfile(name: name, password: pass); + if (result == null) { + statusEditProfile = Status.error; + } else { + if (result.isOk) { + statusEditProfile = Status.ready; + messageEditProfile = result.message; + } else if (result.isOk == false) { + errorsEditProfile = result.errors; + messageEditProfile = result.message; + statusEditProfile = Status.error; + } else { + statusEditProfile = Status.error; + } + } + notifyListeners(); + } catch (e) { + statusEditProfile = Status.error; + // print(e); + } + notifyListeners(); + print(statusEditProfile); + return statusEditProfile; + } } diff --git a/lib/screens/meeting/screen.dart b/lib/screens/meeting/screen.dart index 39d8a8a..46df7ba 100644 --- a/lib/screens/meeting/screen.dart +++ b/lib/screens/meeting/screen.dart @@ -67,9 +67,11 @@ class _MeetingsScreenState extends State { @override Widget build(BuildContext context) { DateTime now = DateTime.now(); - String dateMiladi = DateFormat('yyyy-MM-dd').format(now); - String dateJalali = - '${setting.timeNow.day} ${Tools.getMonthName(setting.timeNow.month)} ${setting.timeNow.year}'; // فرمت کردن تاریخ + String dateMiladi = + Tools.convertToPersianDigits(DateFormat('yyyy-MM-dd').format(now)); + String dateJalali = Tools.convertToPersianDigits( + '${setting.timeNow.day} ${Tools.getMonthName(setting.timeNow.month)} ${setting.timeNow.year}'); +// فرمت کردن تاریخ return Consumer( builder: (context, value, child) { return RefreshIndicator( diff --git a/lib/screens/meeting_summary/screen.dart b/lib/screens/meeting_summary/screen.dart index 126449c..799c75d 100644 --- a/lib/screens/meeting_summary/screen.dart +++ b/lib/screens/meeting_summary/screen.dart @@ -298,14 +298,16 @@ class _MeetingSummaryScreenState extends State { isError: true, context, ); - } else if (state.selectedFiles == null) { - // call add new subject - Tools.showCustomSnackBar( - text: AppLocalizations.of(context)!.enterfile, - isError: true, - context, - ); - } else { + } + // else if (state.selectedFiles == null) { + // // call add new subject + // Tools.showCustomSnackBar( + // text: AppLocalizations.of(context)!.enterfile, + // isError: true, + // context, + // ); + // } + else { final status = await state.addMinuteMeeting( id: widget.meetingItem.id ?? -1, description: _textControllerDescription.text, diff --git a/lib/screens/private_meeting/screen.dart b/lib/screens/private_meeting/screen.dart index 03cb3cc..1c44a0e 100644 --- a/lib/screens/private_meeting/screen.dart +++ b/lib/screens/private_meeting/screen.dart @@ -64,9 +64,11 @@ class _PrivateMeetingsScreenState extends State { @override Widget build(BuildContext context) { DateTime now = DateTime.now(); - String dateMiladi = DateFormat('yyyy-MM-dd').format(now); - String dateJalali = - '${setting.timeNow.day} ${Tools.getMonthName(setting.timeNow.month)} ${setting.timeNow.year}'; + String dateMiladi = + Tools.convertToPersianDigits(DateFormat('yyyy-MM-dd').format(now)); + String dateJalali = Tools.convertToPersianDigits( + '${setting.timeNow.day} ${Tools.getMonthName(setting.timeNow.month)} ${setting.timeNow.year}'); + return Consumer( builder: (context, value, child) { return RefreshIndicator( @@ -286,147 +288,154 @@ class PrivateMeetingWidget extends StatelessWidget { final String subject; final String location; final int status; - + final bool hasMoreButton; final void Function()? onAcceptButton; final void Function()? onCancelButton; final void Function(String)? onSelectedMoreButton; final List> Function(BuildContext)? itemBuilderMoreButton; - const PrivateMeetingWidget({ - Key? key, - required this.date, - required this.time, - required this.subject, - required this.location, - required this.status, - this.onAcceptButton, - this.onCancelButton, - this.onSelectedMoreButton, - this.itemBuilderMoreButton, - }) : super(key: key); + const PrivateMeetingWidget( + {Key? key, + required this.date, + required this.time, + required this.subject, + required this.location, + required this.status, + this.hasMoreButton = true, + this.onAcceptButton, + this.onCancelButton, + this.onSelectedMoreButton, + this.itemBuilderMoreButton, + th}) + : super(key: key); @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 15), - child: Column( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 10), - child: Text( - this.date, - style: TextStyle(fontSize: 12), + child: Container( + width: 500, + height: 190, + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 10), + child: Text( + this.date, + style: TextStyle(fontSize: 12), + ), ), - ), - Divider(), - SizedBox( - height: 5, - ), - Container( - decoration: BoxDecoration( - boxShadow: [ - BoxShadow( - color: config.ui.mainGray.withOpacity(.1), - spreadRadius: .1, - offset: const Offset(0, 2), - blurRadius: 6) - ], - color: const Color(0xffF4F9F6), - borderRadius: BorderRadius.circular(10)), - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 10), - child: Column( - children: [ - Row( - children: [ - Text(this.time), - SizedBox( - width: 15, - ), - Container( - width: 3, - height: 45, - decoration: BoxDecoration( - color: Colors.green, + Divider(), + SizedBox( + height: 5, + ), + Container( + decoration: BoxDecoration( + boxShadow: [ + BoxShadow( + color: config.ui.mainGray.withOpacity(.1), + spreadRadius: .1, + offset: const Offset(0, 2), + blurRadius: 6) + ], + color: const Color(0xffF4F9F6), + borderRadius: BorderRadius.circular(10)), + child: Padding( + padding: + const EdgeInsets.symmetric(horizontal: 15, vertical: 10), + child: Column( + children: [ + Row( + children: [ + Text(this.time), + SizedBox( + width: 15, ), - ), - SizedBox( - width: 5, - ), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, + Container( + width: 3, + height: 45, + decoration: BoxDecoration( + color: Colors.green, + ), + ), + SizedBox( + width: 5, + ), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + this.subject, + ), + SizedBox( + height: 5, + ), + Text( + this.location, + style: TextStyle( + fontSize: 12, color: Color(0xff9AA8C7)), + ), + ], + ), + ), + if (hasMoreButton) _moreButton(context) + ], + ), + if (this.status == 0) + Padding( + padding: const EdgeInsets.only(top: 15), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, children: [ - Text( - this.subject, + CustomButton( + hieght: 30, + text: AppLocalizations.of(context)!.accept, + borderRadius: 5, + color: Color(0xff00A848), + fontSize: 12, + onPressed: this.onAcceptButton, ), SizedBox( - height: 5, + width: 7, + ), + CustomButton( + hieght: 30, + text: AppLocalizations.of(context)!.cancel, + color: Colors.red, + textColor: Colors.white, + fontSize: 12, + borderRadius: 5, + onPressed: this.onCancelButton, ), - Text( - this.location, - style: TextStyle( - fontSize: 12, color: Color(0xff9AA8C7)), + SizedBox( + width: 90, ), ], ), ), - _moreButton(context) - ], - ), - if (this.status == 0) - Padding( - padding: const EdgeInsets.only(top: 15), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - CustomButton( - hieght: 30, - text: AppLocalizations.of(context)!.accept, - borderRadius: 5, - color: Color(0xff00A848), - fontSize: 12, - onPressed: this.onAcceptButton, - ), - SizedBox( - width: 7, - ), - CustomButton( - hieght: 30, - text: AppLocalizations.of(context)!.cancel, - color: Colors.red, - textColor: Colors.white, - fontSize: 12, - borderRadius: 5, - onPressed: this.onCancelButton, - ), - SizedBox( - width: 90, - ), - ], - ), - ), - if (this.status == 1 || this.status == 2) - Padding( - padding: const EdgeInsets.only(top: 10), - child: Row( - children: [ - SizedBox( - width: 60, - ), - PrivateMeetingLabel( - status: this.status, - ), - ], - ), - ) - ], + if (this.status == 1 || this.status == 2) + Padding( + padding: const EdgeInsets.only(top: 10), + child: Row( + children: [ + SizedBox( + width: 60, + ), + PrivateMeetingLabel( + status: this.status, + ), + ], + ), + ) + ], + ), ), - ), - ) - ], + ) + ], + ), ), ); } diff --git a/lib/screens/private_meeting_summary/screen.dart b/lib/screens/private_meeting_summary/screen.dart index 4969feb..1c0f669 100644 --- a/lib/screens/private_meeting_summary/screen.dart +++ b/lib/screens/private_meeting_summary/screen.dart @@ -310,14 +310,16 @@ class _PrivateMeetingSummaryScreenState isError: true, context, ); - } else if (state.selectedFiles == null) { - // call add new subject - Tools.showCustomSnackBar( - text: AppLocalizations.of(context)!.enterfile, - isError: true, - context, - ); - } else { + } + // else if (state.selectedFiles == null) { + // // call add new subject + // Tools.showCustomSnackBar( + // text: AppLocalizations.of(context)!.enterfile, + // isError: true, + // context, + // ); + // } + else { final status = await state.addMinuteMeeting( id: widget.itemInPrivateMeeting.id ?? -1, description: _textControllerDescription.text, diff --git a/lib/screens/report/screen.dart b/lib/screens/report/screen.dart index 0be0cba..abe886b 100644 --- a/lib/screens/report/screen.dart +++ b/lib/screens/report/screen.dart @@ -30,9 +30,11 @@ class _ReportScreenState extends State { @override Widget build(BuildContext context) { DateTime now = DateTime.now(); - String dateMiladi = DateFormat('yyyy-MM-dd').format(now); - String dateJalali = - '${setting.timeNow.day} ${Tools.getMonthName(setting.timeNow.month)} ${setting.timeNow.year}'; // فرمت کردن تاریخ + String dateMiladi = + Tools.convertToPersianDigits(DateFormat('yyyy-MM-dd').format(now)); + String dateJalali = Tools.convertToPersianDigits( + '${setting.timeNow.day} ${Tools.getMonthName(setting.timeNow.month)} ${setting.timeNow.year}'); + // فرمت کردن تاریخ return CustomScrollView( slivers: [ const CustomAppbar(), @@ -271,7 +273,7 @@ class _FiltersItemInReportState extends State { Divider(), if (setting.userLocalDb.getUser().role != 1) SizedBox( - height: 250, + height: 300, child: ListView.builder( physics: NeverScrollableScrollPhysics(), shrinkWrap: true, diff --git a/lib/services/home/home.dart b/lib/services/home/home.dart index af98c1f..19352e9 100644 --- a/lib/services/home/home.dart +++ b/lib/services/home/home.dart @@ -52,4 +52,38 @@ class HomeApi { } return const Result(isOk: false); } + +// edit profile + + Future editProfile({String? name, String? password}) async { + try { + Map headers = {"Accept": "application/json"}; + + String dataToken = setting.userLocalDb.getUser().token!; + if (dataToken != '') { + headers['Authorization'] = "Bearer $dataToken"; + } + + final res = await Dio().post("${config.network.baseUrl}edit-profile", + options: Options( + headers: headers, + ), + queryParameters: {'name': name, 'password': password}); + + if (res.statusCode == 200 || res.statusCode == 201) { + if (name != null) { + setting.userLocalDb.saveUserField('name', name); + } + return const Result(isOk: true); + } + } on DioException catch (e) { + // print(e); + // print(e.response!.data); + return Result( + isOk: false, + errors: e.response!.data['errors'], + message: e.response!.data['message']); + } + return const Result(isOk: false); + } } diff --git a/lib/utils/hive/local_user.dart b/lib/utils/hive/local_user.dart index 1d4bfac..3334bf8 100644 --- a/lib/utils/hive/local_user.dart +++ b/lib/utils/hive/local_user.dart @@ -14,5 +14,5 @@ class LocalUser { this.mobile, this.access, this.role, - this.language = 'fa'}); + this.language = 'en'}); } diff --git a/lib/utils/hive/user_local_db.dart b/lib/utils/hive/user_local_db.dart index 9914f26..f6d411f 100644 --- a/lib/utils/hive/user_local_db.dart +++ b/lib/utils/hive/user_local_db.dart @@ -39,7 +39,7 @@ class UserLocalDb { String mobile = box!.get('mobile', defaultValue: ''); int role = box!.get('role', defaultValue: 0); List access = box!.get('access', defaultValue: []); - String language = box!.get('language', defaultValue: 'fa'); + String language = box!.get('language', defaultValue: 'en'); return LocalUser( name: name, diff --git a/lib/utils/tools/tools.dart b/lib/utils/tools/tools.dart index c24516f..c92c162 100644 --- a/lib/utils/tools/tools.dart +++ b/lib/utils/tools/tools.dart @@ -117,4 +117,15 @@ class Tools { String formattedMinute = minute < 10 ? '0$minute' : '$minute'; return '$formattedHour:$formattedMinute'; } + + static String convertToPersianDigits(String input) { + const englishDigits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; + const persianDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']; + + for (int i = 0; i < englishDigits.length; i++) { + input = input.replaceAll(englishDigits[i], persianDigits[i]); + } + + return input; + } } diff --git a/lib/widgets/card_meeting.dart b/lib/widgets/card_meeting.dart index d28fe9a..5187e14 100644 --- a/lib/widgets/card_meeting.dart +++ b/lib/widgets/card_meeting.dart @@ -73,7 +73,7 @@ class CustomCardMeeting extends StatelessWidget { child: Text( titel, maxLines: 1, - style: const TextStyle(fontSize: 14), + style: const TextStyle(fontSize: 13), overflow: TextOverflow.ellipsis, ), ) @@ -96,7 +96,7 @@ class CustomCardMeeting extends StatelessWidget { child: Text( location, maxLines: 1, - style: const TextStyle(fontSize: 14), + style: const TextStyle(fontSize: 13), overflow: TextOverflow.ellipsis, ), ), @@ -119,7 +119,7 @@ class CustomCardMeeting extends StatelessWidget { child: Text( date, maxLines: 1, - style: const TextStyle(fontSize: 14), + style: const TextStyle(fontSize: 13), overflow: TextOverflow.ellipsis, ), ), @@ -143,7 +143,7 @@ class CustomCardMeeting extends StatelessWidget { Text( '$fromTime ${AppLocalizations.of(context)!.to} $toTime', maxLines: 1, - style: const TextStyle(fontSize: 14), + style: const TextStyle(fontSize: 13), overflow: TextOverflow.ellipsis, ), ], diff --git a/lib/widgets/custom_appbar.dart b/lib/widgets/custom_appbar.dart index 1969bfc..cba1e65 100644 --- a/lib/widgets/custom_appbar.dart +++ b/lib/widgets/custom_appbar.dart @@ -14,17 +14,15 @@ class CustomAppbar extends StatelessWidget { children: [ const SizedBox(), Text( - this.title == null - ? AppLocalizations.of(context)!.appname - : this.title ?? '', + this.title == null ? '' : this.title ?? '', style: const TextStyle( fontSize: 12, color: Colors.black, ), ), Image.asset( - 'assets/images/iconinappbar.png', // مسیر لوگو رو اینجا قرار بده - height: 60, + 'assets/images/D2.png', // مسیر لوگو رو اینجا قرار بده + height: 40, ), ], ), diff --git a/lib/widgets/custom_background.dart b/lib/widgets/custom_background.dart index 2649329..187fe1c 100644 --- a/lib/widgets/custom_background.dart +++ b/lib/widgets/custom_background.dart @@ -12,7 +12,7 @@ class CustomBackground extends StatelessWidget { height: double.infinity, decoration: BoxDecoration( image: DecorationImage( - image: AssetImage('assets/images/001.jpg'), // اصلاح شده + image: AssetImage('assets/images/001.png'), // اصلاح شده fit: BoxFit.cover, // تصویر را به صورت تمام صفحه تطبیق می‌دهد colorFilter: opacity != null ? ColorFilter.mode(