commit 2590cc885a71e9712b5638d7dbabfb0bfc176740 Author: digiovine Date: Tue Mar 7 16:46:40 2023 +0100 first commit diff --git a/.flutter-plugins b/.flutter-plugins new file mode 100644 index 0000000..cece6e6 --- /dev/null +++ b/.flutter-plugins @@ -0,0 +1,18 @@ +# This is a generated file; do not edit or check into version control. +connectivity_plus=/home/micbook/.pub-cache/hosted/pub.dev/connectivity_plus-2.3.9/ +connectivity_plus_linux=/home/micbook/.pub-cache/hosted/pub.dev/connectivity_plus_linux-1.3.1/ +connectivity_plus_macos=/home/micbook/.pub-cache/hosted/pub.dev/connectivity_plus_macos-1.2.6/ +connectivity_plus_web=/home/micbook/.pub-cache/hosted/pub.dev/connectivity_plus_web-1.2.5/ +connectivity_plus_windows=/home/micbook/.pub-cache/hosted/pub.dev/connectivity_plus_windows-1.2.2/ +path_provider=/home/micbook/.pub-cache/hosted/pub.dev/path_provider-2.0.13/ +path_provider_android=/home/micbook/.pub-cache/hosted/pub.dev/path_provider_android-2.0.23/ +path_provider_foundation=/home/micbook/.pub-cache/hosted/pub.dev/path_provider_foundation-2.1.2/ +path_provider_linux=/home/micbook/.pub-cache/hosted/pub.dev/path_provider_linux-2.1.9/ +path_provider_windows=/home/micbook/.pub-cache/hosted/pub.dev/path_provider_windows-2.1.4/ +shared_preferences=/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences-2.0.18/ +shared_preferences_android=/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences_android-2.0.16/ +shared_preferences_foundation=/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.1.4/ +shared_preferences_linux=/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.1.4/ +shared_preferences_web=/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences_web-2.0.5/ +shared_preferences_windows=/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.1.4/ +sqflite=/home/micbook/.pub-cache/hosted/pub.dev/sqflite-2.2.5/ diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies new file mode 100644 index 0000000..1408f69 --- /dev/null +++ b/.flutter-plugins-dependencies @@ -0,0 +1 @@ +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"connectivity_plus","path":"/home/micbook/.pub-cache/hosted/pub.dev/connectivity_plus-2.3.9/","native_build":true,"dependencies":[]},{"name":"path_provider_foundation","path":"/home/micbook/.pub-cache/hosted/pub.dev/path_provider_foundation-2.1.2/","native_build":true,"dependencies":[]},{"name":"shared_preferences_foundation","path":"/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.1.4/","native_build":true,"dependencies":[]},{"name":"sqflite","path":"/home/micbook/.pub-cache/hosted/pub.dev/sqflite-2.2.5/","native_build":true,"dependencies":[]}],"android":[{"name":"connectivity_plus","path":"/home/micbook/.pub-cache/hosted/pub.dev/connectivity_plus-2.3.9/","native_build":true,"dependencies":[]},{"name":"path_provider_android","path":"/home/micbook/.pub-cache/hosted/pub.dev/path_provider_android-2.0.23/","native_build":true,"dependencies":[]},{"name":"shared_preferences_android","path":"/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences_android-2.0.16/","native_build":true,"dependencies":[]},{"name":"sqflite","path":"/home/micbook/.pub-cache/hosted/pub.dev/sqflite-2.2.5/","native_build":true,"dependencies":[]}],"macos":[{"name":"connectivity_plus_macos","path":"/home/micbook/.pub-cache/hosted/pub.dev/connectivity_plus_macos-1.2.6/","native_build":true,"dependencies":[]},{"name":"path_provider_foundation","path":"/home/micbook/.pub-cache/hosted/pub.dev/path_provider_foundation-2.1.2/","native_build":true,"dependencies":[]},{"name":"shared_preferences_foundation","path":"/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.1.4/","native_build":true,"dependencies":[]},{"name":"sqflite","path":"/home/micbook/.pub-cache/hosted/pub.dev/sqflite-2.2.5/","native_build":true,"dependencies":[]}],"linux":[{"name":"connectivity_plus_linux","path":"/home/micbook/.pub-cache/hosted/pub.dev/connectivity_plus_linux-1.3.1/","native_build":false,"dependencies":[]},{"name":"path_provider_linux","path":"/home/micbook/.pub-cache/hosted/pub.dev/path_provider_linux-2.1.9/","native_build":false,"dependencies":[]},{"name":"shared_preferences_linux","path":"/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.1.4/","native_build":false,"dependencies":["path_provider_linux"]}],"windows":[{"name":"connectivity_plus_windows","path":"/home/micbook/.pub-cache/hosted/pub.dev/connectivity_plus_windows-1.2.2/","native_build":true,"dependencies":[]},{"name":"path_provider_windows","path":"/home/micbook/.pub-cache/hosted/pub.dev/path_provider_windows-2.1.4/","native_build":false,"dependencies":[]},{"name":"shared_preferences_windows","path":"/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.1.4/","native_build":false,"dependencies":["path_provider_windows"]}],"web":[{"name":"connectivity_plus_web","path":"/home/micbook/.pub-cache/hosted/pub.dev/connectivity_plus_web-1.2.5/","dependencies":[]},{"name":"shared_preferences_web","path":"/home/micbook/.pub-cache/hosted/pub.dev/shared_preferences_web-2.0.5/","dependencies":[]}]},"dependencyGraph":[{"name":"connectivity_plus","dependencies":["connectivity_plus_linux","connectivity_plus_macos","connectivity_plus_web","connectivity_plus_windows"]},{"name":"connectivity_plus_linux","dependencies":[]},{"name":"connectivity_plus_macos","dependencies":[]},{"name":"connectivity_plus_web","dependencies":[]},{"name":"connectivity_plus_windows","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_android","shared_preferences_foundation","shared_preferences_linux","shared_preferences_web","shared_preferences_windows"]},{"name":"shared_preferences_android","dependencies":[]},{"name":"shared_preferences_foundation","dependencies":[]},{"name":"shared_preferences_linux","dependencies":["path_provider_linux"]},{"name":"shared_preferences_web","dependencies":[]},{"name":"shared_preferences_windows","dependencies":["path_provider_windows"]},{"name":"sqflite","dependencies":[]}],"date_created":"2023-03-07 15:37:57.534826","version":"3.7.6"} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..39ebb3c --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +/.dart_tool/ +/.idea/ +/build/ +/.vscode/ +!/pubspec.lock +!/.packages +!/.flutter-plugins-dependencies +!/.flutter-plugins diff --git a/README.md b/README.md new file mode 100644 index 0000000..931c09d --- /dev/null +++ b/README.md @@ -0,0 +1,94 @@ + +# michele_s_application8 + +
+

Getting Started with Flutter 🚀

+ + Generated with ❤️ from DhiWise + +

+ This is the documentation of Flutter Applications. + It contains all the information you need to get started with + and make changes to your App +

+
+ + +### Table of Contents +- [System Requirements](#system-requirements) +- [Figma design guidelines for better accuracy](#figma-design-guideline-for-better-accuracy) +- [App Navigations](#app-navigations) +- [Project Structure](#project-structure) +- [How you can do code formatting?](#how-you-can-do-code-formatting) +- [How you can improve the readability of code?](#how-you-can-improve-the-readability-of-code) +- [Libraries and tools used](#libraries-and-tools-used) +- [Support](#support) + +### System Requirements + +Dart SDK Version 2.18.0 or greater. +Flutter SDK Version 3.3.0 or greater. + +### Figma design guidelines for better accuracy + +Read our guidelines to increase the accuracy of design conversion to code by optimizing Figma designs. +https://docs.dhiwise.com/docs/Designguidelines/intro + +### App Navigations + +Check your app's UI from the AppNavigation screen of your app. + +### Project Structure + +After successful build, your application structure should look like this: + +``` +. +├── android - contains files and folders required for running the application on an Android operating system. +├── assets - contains all images and fonts of your application. +├── ios - contains files required by the application to run the dart code on iOS platforms. +├── lib - Most important folder in the project, used to write most of the Dart code. + ├── main.dart - starting point of the application + ├── core + │ ├── app_export.dart - contains commonly used file imports + │ ├── constants - contains all constants classes + │ ├── errors - contains error handling classes + │ ├── network - contains network related classes + │ └── utils - contains common files and utilities of project + ├── data + │ ├── apiClient - contains API calling methods + │ ├── models - contains request/response models + │ └── repository - network repository + ├── localization - contains localization classes + ├── presentation - contains all screens and screen controllers + │ └── screens - contains all screens + ├── routes - contains all the routes of application + └── theme - contains app theme and decoration classes + └── widgets - contains all custom widget classes +``` + +### How you can do code formatting? + +- if your code is not formatted then run following command in your terminal to format code + ``` + dart format . + ``` + +### How you can improve the readability of code? + +Resolve the errors and warnings that are shown in the application. + +### Libraries and tools used + +- get - State management + https://pub.dev/packages/get +- connectivity_plus - For status of network connectivity + https://pub.dev/packages/connectivity_plus +- shared_preferences - Provide persistent storage for simple data + https://pub.dev/packages/shared_preferences +- cached_network_image - For storing internet image into cache + https://pub.dev/packages/cached_network_image + +### Support + +If you have problems or questions go to our Discord channel, we will then try to help you as quickly as possible: https://discord.com/invite/rFMnCG5MZ7 diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..0a741cb --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,11 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..2810ff9 --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,67 @@ +plugins{ + id 'com.android.application' + id 'kotlin-android' +} +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion 33 + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.michelesapplication.app" + minSdkVersion 21 + targetSdkVersion 33 + multiDexEnabled true + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation "androidx.multidex:multidex:2.0.1" +} diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..39852f7 --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..0df59f2 --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/kotlin/com/michelesapplication/app/MainActivity.kt b/android/app/src/main/kotlin/com/michelesapplication/app/MainActivity.kt new file mode 100644 index 0000000..9e396d5 --- /dev/null +++ b/android/app/src/main/kotlin/com/michelesapplication/app/MainActivity.kt @@ -0,0 +1,6 @@ +package com.michelesapplication.app + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..6214ec4 Binary files /dev/null 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 new file mode 100644 index 0000000..543bdef Binary files /dev/null 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 new file mode 100644 index 0000000..07b56e9 Binary files /dev/null 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 new file mode 100644 index 0000000..b40ab98 Binary files /dev/null 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 new file mode 100644 index 0000000..f6786b1 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..43b0bf2 --- /dev/null +++ b/android/app/src/main/res/values/strings.xml @@ -0,0 +1,5 @@ + + + michele_s_application8 + + \ No newline at end of file diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..1f83a33 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..39852f7 --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/base_project_android.iml b/android/base_project_android.iml new file mode 100644 index 0000000..1899969 --- /dev/null +++ b/android/base_project_android.iml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..9cb9fa6 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.7.20' + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.1.2' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/android/flutterarch_android.iml b/android/flutterarch_android.iml new file mode 100644 index 0000000..1899969 --- /dev/null +++ b/android/flutterarch_android.iml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..94adc3a --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..cc5527d --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jun 23 08:50:38 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..44e62bc --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/assets/fonts/RobotoRomanLight.ttf b/assets/fonts/RobotoRomanLight.ttf new file mode 100644 index 0000000..e7307e7 Binary files /dev/null and b/assets/fonts/RobotoRomanLight.ttf differ diff --git a/assets/fonts/RobotoRomanMedium.ttf b/assets/fonts/RobotoRomanMedium.ttf new file mode 100644 index 0000000..ac0f908 Binary files /dev/null and b/assets/fonts/RobotoRomanMedium.ttf differ diff --git a/assets/fonts/RobotoRomanRegular.ttf b/assets/fonts/RobotoRomanRegular.ttf new file mode 100644 index 0000000..ddf4bfa Binary files /dev/null and b/assets/fonts/RobotoRomanRegular.ttf differ diff --git a/assets/images/image_not_found.png b/assets/images/image_not_found.png new file mode 100644 index 0000000..840d828 Binary files /dev/null and b/assets/images/image_not_found.png differ diff --git a/assets/images/img_eye.svg b/assets/images/img_eye.svg new file mode 100644 index 0000000..a961e91 --- /dev/null +++ b/assets/images/img_eye.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/assets/images/img_image1.png b/assets/images/img_image1.png new file mode 100644 index 0000000..064484f Binary files /dev/null and b/assets/images/img_image1.png differ diff --git a/assets/images/img_rectangle286.png b/assets/images/img_rectangle286.png new file mode 100644 index 0000000..3299288 Binary files /dev/null and b/assets/images/img_rectangle286.png differ diff --git a/assets/images/logo_a_fa.png b/assets/images/logo_a_fa.png new file mode 100644 index 0000000..7c8b00d Binary files /dev/null and b/assets/images/logo_a_fa.png differ diff --git a/ios/.gitignore b/ios/.gitignore new file mode 100644 index 0000000..e96ef60 --- /dev/null +++ b/ios/.gitignore @@ -0,0 +1,32 @@ +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..f2872cf --- /dev/null +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 9.0 + + diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..b5615be --- /dev/null +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,495 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1020; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.michelesapplication.app; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.michelesapplication.app; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.michelesapplication.app; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..a28140c --- /dev/null +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..c43ad6c --- /dev/null +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "58x58", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "87x87", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "80x80", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "120x120", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "", + "scale" : "3x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "152x152", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "167x167", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ipad", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "ios_icon_set" + } +} 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 new file mode 100644 index 0000000..10d0fb3 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png 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 new file mode 100644 index 0000000..4a63a71 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png 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 new file mode 100644 index 0000000..60e16ac Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png 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 new file mode 100644 index 0000000..30cca02 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png 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 new file mode 100644 index 0000000..cc5b402 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png 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 new file mode 100644 index 0000000..0ee9299 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png 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 new file mode 100644 index 0000000..5633cba Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png 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 new file mode 100644 index 0000000..60e16ac Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png 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 new file mode 100644 index 0000000..9cb12db Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png 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 new file mode 100644 index 0000000..c5cdaff Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png 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 new file mode 100644 index 0000000..5d4bbf5 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png 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 new file mode 100644 index 0000000..277324b Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png 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 new file mode 100644 index 0000000..56d4757 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png 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 new file mode 100644 index 0000000..ce5225d Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png 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 new file mode 100644 index 0000000..c5cdaff Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png 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 new file mode 100644 index 0000000..4bdda62 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png 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 new file mode 100644 index 0000000..6214ec4 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png 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 new file mode 100644 index 0000000..b40ab98 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png 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 new file mode 100644 index 0000000..ec5503e Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png 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 new file mode 100644 index 0000000..e94578e Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png 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 new file mode 100644 index 0000000..42de909 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..0bedcf2 --- /dev/null +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "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 new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# 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/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist new file mode 100644 index 0000000..f6ad664 --- /dev/null +++ b/ios/Runner/Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + michele_s_application8 + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/lib/core/app_export.dart b/lib/core/app_export.dart new file mode 100644 index 0000000..2ac2008 --- /dev/null +++ b/lib/core/app_export.dart @@ -0,0 +1,18 @@ +export 'package:get/get.dart'; +export 'package:michele_s_application8/localization/app_localization.dart'; +export 'package:michele_s_application8/core/constants/constants.dart'; +export 'package:michele_s_application8/core/utils/image_constant.dart'; +export 'package:michele_s_application8/core/utils/color_constant.dart'; +export 'package:michele_s_application8/core/utils/size_utils.dart'; +export 'package:michele_s_application8/core/utils/pref_utils.dart'; +export 'package:michele_s_application8/core/utils/initial_bindings.dart'; +export 'package:michele_s_application8/theme/app_style.dart'; +export 'package:michele_s_application8/theme/app_decoration.dart'; +export 'package:connectivity_plus/connectivity_plus.dart'; +export 'package:michele_s_application8/routes/app_routes.dart'; +export 'package:michele_s_application8/data/models/selectionPopupModel/selection_popup_model.dart'; +export 'package:michele_s_application8/widgets/custom_image_view.dart'; +export 'package:michele_s_application8/core/errors/exceptions.dart'; +export 'package:michele_s_application8/core/network/network_info.dart'; +export 'package:michele_s_application8/core/utils/logger.dart'; +export 'package:michele_s_application8/core/utils/date_time_utils.dart'; diff --git a/lib/core/constants/constants.dart b/lib/core/constants/constants.dart new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/lib/core/constants/constants.dart @@ -0,0 +1 @@ + diff --git a/lib/core/errors/exceptions.dart b/lib/core/errors/exceptions.dart new file mode 100644 index 0000000..6eafce9 --- /dev/null +++ b/lib/core/errors/exceptions.dart @@ -0,0 +1,19 @@ +class ServerException implements Exception {} + +class CacheException implements Exception {} + +class NetworkException implements Exception {} + +///can be used for throwing [NoInternetException] +class NoInternetException implements Exception { + late String _message; + + NoInternetException([String message = 'NoInternetException Occurred']) { + this._message = message; + } + + @override + String toString() { + return _message; + } +} diff --git a/lib/core/errors/failures.dart b/lib/core/errors/failures.dart new file mode 100644 index 0000000..a96b786 --- /dev/null +++ b/lib/core/errors/failures.dart @@ -0,0 +1,8 @@ +abstract class Failure {} + +// General failures +class ServerFailure extends Failure {} + +class CacheFailure extends Failure {} + +class NetworkFailure extends Failure {} diff --git a/lib/core/network/network_info.dart b/lib/core/network/network_info.dart new file mode 100644 index 0000000..31af689 --- /dev/null +++ b/lib/core/network/network_info.dart @@ -0,0 +1,41 @@ +import 'package:connectivity_plus/connectivity_plus.dart'; + +// For checking internet connectivity +abstract class NetworkInfoI { + Future isConnected(); + + Future get connectivityResult; + + Stream get onConnectivityChanged; +} + +class NetworkInfo implements NetworkInfoI { + Connectivity connectivity; + + NetworkInfo(this.connectivity) { + connectivity = this.connectivity; + } + + ///checks internet is connected or not + ///returns [true] if internet is connected + ///else it will return [false] + @override + Future isConnected() async { + final result = await connectivity.checkConnectivity(); + if (result != ConnectivityResult.none) { + return true; + } + return false; + } + + // to check type of internet connectivity + @override + Future get connectivityResult async { + return connectivity.checkConnectivity(); + } + + //check the type on internet connection on changed of internet connection + @override + Stream get onConnectivityChanged => + connectivity.onConnectivityChanged; +} diff --git a/lib/core/utils/color_constant.dart b/lib/core/utils/color_constant.dart new file mode 100644 index 0000000..c9b11e3 --- /dev/null +++ b/lib/core/utils/color_constant.dart @@ -0,0 +1,57 @@ +import 'dart:ui'; +import 'package:flutter/material.dart'; + +class ColorConstant { + static Color black9000a = fromHex('#0a000000'); + + static Color gray5008e = fromHex('#8ea9a9a9'); + + static Color gray500 = fromHex('#a1a1a1'); + + static Color blueGray400 = fromHex('#878787'); + + static Color lime600 = fromHex('#b6c23a'); + + static Color blueGray50 = fromHex('#f1f1f1'); + + static Color blueA400 = fromHex('#217aff'); + + static Color lightBlueA400 = fromHex('#00b2fe'); + + static Color gray900 = fromHex('#222222'); + + static Color redA700Af = fromHex('#afff0000'); + + static Color black9003f = fromHex('#3f000000'); + + static Color gray200 = fromHex('#ededed'); + + static Color gray300 = fromHex('#e4e4e4'); + + static Color redA7008e = fromHex('#8eff0000'); + + static Color teal300 = fromHex('#43ab93'); + + static Color blueGray80005 = fromHex('#05373b4d'); + + static Color indigo100 = fromHex('#c4c6d7'); + + static Color black900 = fromHex('#000000'); + + static Color bluegray400 = fromHex('#888888'); + + static Color blue600E8 = fromHex('#e81e83ee'); + + static Color blueGray400Af = fromHex('#af878787'); + + static Color whiteA700 = fromHex('#ffffff'); + + static Color whiteA7009e = fromHex('#9effffff'); + + static Color fromHex(String hexString) { + final buffer = StringBuffer(); + if (hexString.length == 6 || hexString.length == 7) buffer.write('ff'); + buffer.write(hexString.replaceFirst('#', '')); + return Color(int.parse(buffer.toString(), radix: 16)); + } +} diff --git a/lib/core/utils/date_time_utils.dart b/lib/core/utils/date_time_utils.dart new file mode 100644 index 0000000..934b4c6 --- /dev/null +++ b/lib/core/utils/date_time_utils.dart @@ -0,0 +1,14 @@ +import 'package:intl/date_symbol_data_local.dart'; +import 'package:intl/intl.dart'; + +const String DD_MM_YYYY = 'dd/MM/yyyy'; + +extension DateTimeExtension on DateTime { + /// Return a string representing [date] formatted according to our locale + String format([String pattern = DD_MM_YYYY, String? locale]) { + if (locale != null && locale.isNotEmpty) { + initializeDateFormatting(locale); + } + return DateFormat(pattern, locale).format(this); + } +} diff --git a/lib/core/utils/image_constant.dart b/lib/core/utils/image_constant.dart new file mode 100644 index 0000000..6f33327 --- /dev/null +++ b/lib/core/utils/image_constant.dart @@ -0,0 +1,9 @@ +class ImageConstant { + static String imgRectangle286 = 'assets/images/img_rectangle286.png'; + + static String imgImage1 = 'assets/images/img_image1.png'; + + static String imgEye = 'assets/images/img_eye.svg'; + + static String imageNotFound = 'assets/images/image_not_found.png'; +} diff --git a/lib/core/utils/initial_bindings.dart b/lib/core/utils/initial_bindings.dart new file mode 100644 index 0000000..228f486 --- /dev/null +++ b/lib/core/utils/initial_bindings.dart @@ -0,0 +1,12 @@ +import 'package:michele_s_application8/core/app_export.dart'; +import 'package:michele_s_application8/data/apiClient/api_client.dart'; + +class InitialBindings extends Bindings { + @override + void dependencies() { + Get.put(PrefUtils()); + Get.put(ApiClient()); + Connectivity connectivity = Connectivity(); + Get.put(NetworkInfo(connectivity)); + } +} diff --git a/lib/core/utils/logger.dart b/lib/core/utils/logger.dart new file mode 100644 index 0000000..dab50c2 --- /dev/null +++ b/lib/core/utils/logger.dart @@ -0,0 +1,15 @@ +class Logger { + static LogMode _logMode = LogMode.debug; + + static void init(LogMode mode) { + Logger._logMode = mode; + } + + static void log(dynamic data, {StackTrace? stackTrace}) { + if (_logMode == LogMode.debug) { + print("Error: $data$stackTrace"); + } + } +} + +enum LogMode { debug, live } diff --git a/lib/core/utils/pref_utils.dart b/lib/core/utils/pref_utils.dart new file mode 100644 index 0000000..0c53a7b --- /dev/null +++ b/lib/core/utils/pref_utils.dart @@ -0,0 +1,23 @@ +//ignore: unused_import +import 'dart:convert'; +import 'package:shared_preferences/shared_preferences.dart'; + +class PrefUtils { + static SharedPreferences? _sharedPreferences; + + PrefUtils() { + SharedPreferences.getInstance().then((value) { + _sharedPreferences = value; + }); + } + + Future init() async { + _sharedPreferences ??= await SharedPreferences.getInstance(); + print('SharedPreference Initialized'); + } + + ///will clear all the data stored in preference + void clearPreferencesData() async { + _sharedPreferences!.clear(); + } +} diff --git a/lib/core/utils/progress_dialog_utils.dart b/lib/core/utils/progress_dialog_utils.dart new file mode 100644 index 0000000..4431d75 --- /dev/null +++ b/lib/core/utils/progress_dialog_utils.dart @@ -0,0 +1,30 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +class ProgressDialogUtils { + static bool isProgressVisible = false; + + ///common method for showing progress dialog + static void showProgressDialog({isCancellable = false}) async { + if (!isProgressVisible) { + Get.dialog( + Center( + child: CircularProgressIndicator.adaptive( + strokeWidth: 4, + valueColor: AlwaysStoppedAnimation( + Colors.white, + ), + ), + ), + barrierDismissible: isCancellable, + ); + isProgressVisible = true; + } + } + + ///common method for hiding progress dialog + static void hideProgressDialog() { + if (isProgressVisible) Get.back(); + isProgressVisible = false; + } +} diff --git a/lib/core/utils/size_utils.dart b/lib/core/utils/size_utils.dart new file mode 100644 index 0000000..21cb2f0 --- /dev/null +++ b/lib/core/utils/size_utils.dart @@ -0,0 +1,120 @@ +import 'package:flutter/material.dart'; + +// This is where the magic happens. +// This functions are responsible to make UI responsive across all the mobile devices. + +Size size = WidgetsBinding.instance.window.physicalSize / + WidgetsBinding.instance.window.devicePixelRatio; + +// Caution! If you think these are static values and are used to build a static UI, you mustn’t. +// These are the Viewport values of your Figma Design. +// These are used in the code as a reference to create your UI Responsively. +const num FIGMA_DESIGN_WIDTH = 375; +const num FIGMA_DESIGN_HEIGHT = 812; +const num FIGMA_DESIGN_STATUS_BAR = 0; + +///This method is used to get device viewport width. +get width { + return size.width; +} + +///This method is used to get device viewport height. +get height { + num statusBar = + MediaQueryData.fromWindow(WidgetsBinding.instance.window).viewPadding.top; + num bottomBar = MediaQueryData.fromWindow(WidgetsBinding.instance.window) + .viewPadding + .bottom; + num screenHeight = size.height - statusBar - bottomBar; + return screenHeight; +} + +///This method is used to set padding/margin (for the left and Right side) & width of the screen or widget according to the Viewport width. +double getHorizontalSize(double px) { + return ((px * width) / FIGMA_DESIGN_WIDTH); +} + +///This method is used to set padding/margin (for the top and bottom side) & height of the screen or widget according to the Viewport height. +double getVerticalSize(double px) { + return ((px * height) / (FIGMA_DESIGN_HEIGHT - FIGMA_DESIGN_STATUS_BAR)); +} + +///This method is used to set smallest px in image height and width +double getSize(double px) { + var height = getVerticalSize(px); + var width = getHorizontalSize(px); + if (height < width) { + return height.toInt().toDouble(); + } else { + return width.toInt().toDouble(); + } +} + +///This method is used to set text font size according to Viewport +double getFontSize(double px) { + return getSize(px); +} + +///This method is used to set padding responsively +EdgeInsetsGeometry getPadding({ + double? all, + double? left, + double? top, + double? right, + double? bottom, +}) { + return getMarginOrPadding( + all: all, + left: left, + top: top, + right: right, + bottom: bottom, + ); +} + +///This method is used to set margin responsively +EdgeInsetsGeometry getMargin({ + double? all, + double? left, + double? top, + double? right, + double? bottom, +}) { + return getMarginOrPadding( + all: all, + left: left, + top: top, + right: right, + bottom: bottom, + ); +} + +///This method is used to get padding or margin responsively +EdgeInsetsGeometry getMarginOrPadding({ + double? all, + double? left, + double? top, + double? right, + double? bottom, +}) { + if (all != null) { + left = all; + top = all; + right = all; + bottom = all; + } + return EdgeInsets.only( + left: getHorizontalSize( + left ?? 0, + ), + top: getVerticalSize( + top ?? 0, + ), + right: getHorizontalSize( + right ?? 0, + ), + bottom: getVerticalSize( + bottom ?? 0, + ), + ); +} diff --git a/lib/core/utils/validation_functions.dart b/lib/core/utils/validation_functions.dart new file mode 100644 index 0000000..27f6dae --- /dev/null +++ b/lib/core/utils/validation_functions.dart @@ -0,0 +1,44 @@ +/// Password should have, +/// at least a upper case letter +/// at least a lower case letter +/// at least a digit +/// at least a special character [@#$%^&+=] +/// length of at least 4 +/// no white space allowed +bool isValidPassword(String? inputString, {bool isRequired = false}) { + bool isInputStringValid = false; + + if ((inputString == null ? true : inputString.isEmpty) && !isRequired) { + isInputStringValid = true; + } + + if (inputString != null) { + const pattern = + r'^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$'; + + final regExp = RegExp(pattern); + + isInputStringValid = regExp.hasMatch(inputString); + } + + return isInputStringValid; +} + +/// Checks if string consist only Alphabet. (No Whitespace) +bool isText(String? inputString, {bool isRequired = false}) { + bool isInputStringValid = false; + + if ((inputString == null ? true : inputString.isEmpty) && !isRequired) { + isInputStringValid = true; + } + + if (inputString != null) { + const pattern = r'^[a-zA-Z]+$'; + + final regExp = RegExp(pattern); + + isInputStringValid = regExp.hasMatch(inputString); + } + + return isInputStringValid; +} diff --git a/lib/data/apiClient/api_client.dart b/lib/data/apiClient/api_client.dart new file mode 100644 index 0000000..6db38ea --- /dev/null +++ b/lib/data/apiClient/api_client.dart @@ -0,0 +1,3 @@ +import 'package:michele_s_application8/core/app_export.dart'; + +class ApiClient extends GetConnect {} diff --git a/lib/data/models/selectionPopupModel/selection_popup_model.dart b/lib/data/models/selectionPopupModel/selection_popup_model.dart new file mode 100644 index 0000000..e9aa2c8 --- /dev/null +++ b/lib/data/models/selectionPopupModel/selection_popup_model.dart @@ -0,0 +1,15 @@ +///SelectionPopupModel is common model +///used for setting data into dropdowns +class SelectionPopupModel { + int? id; + String title; + dynamic value; + bool isSelected; + + SelectionPopupModel({ + this.id, + required this.title, + this.value, + this.isSelected = false, + }); +} diff --git a/lib/localization/app_localization.dart b/lib/localization/app_localization.dart new file mode 100644 index 0000000..3d516b2 --- /dev/null +++ b/lib/localization/app_localization.dart @@ -0,0 +1,7 @@ +import 'package:get/get.dart'; +import 'en_us/en_us_translations.dart'; + +class AppLocalization extends Translations { + @override + Map> get keys => {'en_US': enUs}; +} diff --git a/lib/localization/en_us/en_us_translations.dart b/lib/localization/en_us/en_us_translations.dart new file mode 100644 index 0000000..a626248 --- /dev/null +++ b/lib/localization/en_us/en_us_translations.dart @@ -0,0 +1,31 @@ +final Map enUs = { + 'msg_network_err': 'Network Error', + 'msg_something_went_wrong': 'Something Went Wrong!', + "msg_password_dimenticata": "Password dimenticata?", + "msg_abilita_disabilita": "Abilita / Disabilita classe Two", + "msg_gestisci_i_miei": "Gestisci i miei dispositivi", + "lbl_login": "Login", + "msg_inserisci_il_tuo": "Inserisci il tuo username", + "lbl_dante_alighieri": "Dante Alighieri", + "lbl_visori_3d": "Visori 3D", + "lbl_app_navigation": "App Navigation", + "msg_check_your_app_s": + "Check your app's UI from the below demo screens of your app.", + "lbl_powered_by": "Powered by", + "msg_tutti_i_miei_dispositivi": "Tutti i miei dispositivi", + "msg_splash_screen_one": "Splash Screen-One", + "msg_gestisci_i_miei2": "Gestisci i miei gruppi", + "msg_collegamento_ad": "Collegamento ad internet", + "lbl_classe_1_c": "Classe 1° C", + "lbl_classe_2_c": "Classe 2° C", + "msg_abilita_disabilita3": "Abilita / Disabilita classe One", + "lbl_password": "Password", + "msg_lab_di_informatica": "Lab. di informatica", + "lbl_scollega_tutti": "Scollega tutti", + "msg_abilita_disabilita2": "Abilita / Disabilita classe", + "msg_istituto_comprensivo": "Istituto \nComprensivo", + "lbl_username": "Username", + "msg_questo_dispositivo": "Questo dispositivo", + "lbl_indietro": "Indietro", + "msg_inserisci_la_password": "Inserisci la password" +}; diff --git a/lib/main.dart b/lib/main.dart new file mode 100644 index 0000000..91a502e --- /dev/null +++ b/lib/main.dart @@ -0,0 +1,35 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +import 'core/app_export.dart'; + +void main() { + WidgetsFlutterBinding.ensureInitialized(); + SystemChrome.setPreferredOrientations([ + DeviceOrientation.portraitUp, + ]).then((value) { + Logger.init(kReleaseMode ? LogMode.live : LogMode.debug); + runApp(MyApp()); + }); +} + +class MyApp extends StatelessWidget { + // This widget is the root of your application. + @override + Widget build(BuildContext context) { + return GetMaterialApp( + debugShowCheckedModeBanner: false, + theme: ThemeData( + visualDensity: VisualDensity.standard, + ), + translations: AppLocalization(), + locale: Get.deviceLocale, //for setting localization strings + fallbackLocale: Locale('en', 'US'), + title: 'WebON', + initialBinding: InitialBindings(), + initialRoute: AppRoutes.initialRoute, + getPages: AppRoutes.pages, + ); + } +} diff --git a/lib/presentation/abilita_disabilita_classe_one_screen/abilita_disabilita_classe_one_screen.dart b/lib/presentation/abilita_disabilita_classe_one_screen/abilita_disabilita_classe_one_screen.dart new file mode 100644 index 0000000..bc845a6 --- /dev/null +++ b/lib/presentation/abilita_disabilita_classe_one_screen/abilita_disabilita_classe_one_screen.dart @@ -0,0 +1,256 @@ +import 'controller/abilita_disabilita_classe_one_controller.dart'; +import 'package:flutter/material.dart'; +import 'package:michele_s_application8/core/app_export.dart'; +import 'package:michele_s_application8/widgets/custom_button.dart'; +import 'package:michele_s_application8/widgets/custom_switch.dart'; + +class AbilitaDisabilitaClasseOneScreen + extends GetWidget { + @override + Widget build(BuildContext context) { + return SafeArea( + child: Scaffold( + backgroundColor: ColorConstant.gray200, + body: Container( + width: double.maxFinite, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + width: double.maxFinite, + child: Container( + decoration: AppDecoration.fillGray200, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Align( + alignment: Alignment.centerRight, + child: Padding( + padding: getPadding(right: 20, top:10), + child: Text("lbl_powered_by".tr, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtRobotoRomanMedium10))), + CustomImageView( + imagePath: + ImageConstant + .imgImage1, + margin: getMargin(right:20), + height: + getVerticalSize( + 21), + width: + getHorizontalSize( + 103), + alignment: Alignment + .centerRight), + Align( + alignment: Alignment.centerLeft, + child: Row( + mainAxisAlignment: + MainAxisAlignment.center, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + CustomImageView( + imagePath: ImageConstant + .imgRectangle286, + height: + getVerticalSize(133), + width: getHorizontalSize( + 134), + margin: + getMargin(top: 20)), + Padding( + padding: getPadding( + left: 15, bottom: 20, top:25), + child: Column( + crossAxisAlignment: + CrossAxisAlignment + .start, + mainAxisAlignment: + MainAxisAlignment + .start, + children: [ + Container( + width: + getHorizontalSize( + 109), + margin: + getMargin( + top: + 34), + child: Text( + "msg_istituto_comprensivo" + .tr, + maxLines: + null, + textAlign: + TextAlign + .right, + style: AppStyle + .txtRobotoRomanSemiBold19)), + Padding( + padding: + getPadding( + top: 6), + child: Text( + "lbl_dante_alighieri" + .tr, + overflow: + TextOverflow + .ellipsis, + textAlign: + TextAlign + .right, + style: AppStyle + .txtRobotoRomanSemiBold19Lime600)) + ])) + ])), + Padding( + padding: getPadding(top: 25),), + Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: + getPadding(left: 41), + child: Text( + "msg_collegamento_ad".tr, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle + .txtRobotoRomanSemiBold24Black900))), + Container( + margin: getMargin( + left: 16, top: 20, right: 15), + padding: + getPadding(top: 25, bottom: 25), + decoration: AppDecoration.fillWhiteA700 + .copyWith( + borderRadius: BorderRadiusStyle + .roundedBorder8), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: + CrossAxisAlignment.end, + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Padding( + padding: getPadding( + left: 31, right: 13), + child: Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Padding( + padding: getPadding( + top: 5, + bottom: 2), + child: Text( + "Questo dispositivo", + overflow: + TextOverflow + .ellipsis, + textAlign: + TextAlign + .left, + style: AppStyle + .txtRobotoRomanSemiBold24Black900)), + Obx(() => CustomSwitch( + value: controller + .isSelectedSwitch + .value, + onChanged: (value) { + controller + .isSelectedSwitch + .value = value; + })) + ])), + Padding( + padding: getPadding(top: 19), + child: Divider( + color: ColorConstant + .gray200)), + Align( + alignment: Alignment.center, + child: Padding( + padding: getPadding( + left: 28, + top: 18, + right: 16), + child: Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Padding( + padding: + getPadding( + top: 3, + bottom: + 4), + child: Text( + "Tutti i miei dispositivi", + overflow: + TextOverflow + .ellipsis, + textAlign: + TextAlign + .left, + style: AppStyle + .txtRobotoRomanSemiBold24Black900)), + Obx(() => + CustomSwitch( + value: controller + .isSelectedSwitch1 + .value, + onChanged: + (value) { + controller + .isSelectedSwitch1 + .value = value; + })) + ]))), + ])), + ]))) + ])), + bottomNavigationBar: Container( + height: getVerticalSize(145), + width: double.maxFinite, + child: Stack(alignment: Alignment.topCenter, children: [ + Align( + alignment: Alignment.bottomCenter, + child: Container( + height: getVerticalSize(170), + width: double.maxFinite, + decoration: + BoxDecoration(color: ColorConstant.blueGray50))), + Column( + children: [ + CustomButton( + text: "lbl_scollega_tutti".tr, + onTap: () { + controller.isSelectedSwitch.value = false; + controller.isSelectedSwitch1.value = false; + controller.isSelectedSwitch2.value = false; + controller.isSelectedSwitch3.value = false; + }, + margin: getMargin( + left: 16, top: 10, right: 15, bottom:10) + ), + CustomButton( + width: getHorizontalSize(344), + text: "lbl_indietro".tr, + variant: ButtonVariant.GradientGray5008eBluegray400af, + onTap: onBackPressed, + alignment: Alignment.topCenter) + ]) + ])))); + } + + onBackPressed() { + Get.back(); + } +} diff --git a/lib/presentation/abilita_disabilita_classe_one_screen/binding/abilita_disabilita_classe_one_binding.dart b/lib/presentation/abilita_disabilita_classe_one_screen/binding/abilita_disabilita_classe_one_binding.dart new file mode 100644 index 0000000..a0448fb --- /dev/null +++ b/lib/presentation/abilita_disabilita_classe_one_screen/binding/abilita_disabilita_classe_one_binding.dart @@ -0,0 +1,9 @@ +import '../controller/abilita_disabilita_classe_one_controller.dart'; +import 'package:get/get.dart'; + +class AbilitaDisabilitaClasseOneBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => AbilitaDisabilitaClasseOneController()); + } +} diff --git a/lib/presentation/abilita_disabilita_classe_one_screen/controller/abilita_disabilita_classe_one_controller.dart b/lib/presentation/abilita_disabilita_classe_one_screen/controller/abilita_disabilita_classe_one_controller.dart new file mode 100644 index 0000000..72a47dc --- /dev/null +++ b/lib/presentation/abilita_disabilita_classe_one_screen/controller/abilita_disabilita_classe_one_controller.dart @@ -0,0 +1,25 @@ +import 'package:michele_s_application8/core/app_export.dart'; +import 'package:michele_s_application8/presentation/abilita_disabilita_classe_one_screen/models/abilita_disabilita_classe_one_model.dart'; + +class AbilitaDisabilitaClasseOneController extends GetxController { + Rx abilitaDisabilitaClasseOneModelObj = + AbilitaDisabilitaClasseOneModel().obs; + + RxBool isSelectedSwitch = false.obs; + + RxBool isSelectedSwitch1 = false.obs; + + RxBool isSelectedSwitch2 = false.obs; + + RxBool isSelectedSwitch3 = false.obs; + + @override + void onReady() { + super.onReady(); + } + + @override + void onClose() { + super.onClose(); + } +} diff --git a/lib/presentation/abilita_disabilita_classe_one_screen/models/abilita_disabilita_classe_one_model.dart b/lib/presentation/abilita_disabilita_classe_one_screen/models/abilita_disabilita_classe_one_model.dart new file mode 100644 index 0000000..d80f876 --- /dev/null +++ b/lib/presentation/abilita_disabilita_classe_one_screen/models/abilita_disabilita_classe_one_model.dart @@ -0,0 +1 @@ +class AbilitaDisabilitaClasseOneModel {} diff --git a/lib/presentation/abilita_disabilita_classe_screen/abilita_disabilita_classe_screen.dart b/lib/presentation/abilita_disabilita_classe_screen/abilita_disabilita_classe_screen.dart new file mode 100644 index 0000000..9edfde7 --- /dev/null +++ b/lib/presentation/abilita_disabilita_classe_screen/abilita_disabilita_classe_screen.dart @@ -0,0 +1,355 @@ +import 'controller/abilita_disabilita_classe_controller.dart'; +import 'package:flutter/material.dart'; +import 'package:michele_s_application8/core/app_export.dart'; +import 'package:michele_s_application8/widgets/custom_button.dart'; +import 'package:michele_s_application8/widgets/custom_switch.dart'; + +class AbilitaDisabilitaClasseScreen + extends GetWidget { + @override + Widget build(BuildContext context) { + return SafeArea( + child: Scaffold( + backgroundColor: ColorConstant.gray200, + body: Container( + width: double.maxFinite, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + width: double.maxFinite, + child: Container( + decoration: AppDecoration.fillGray200, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Align( + alignment: Alignment.centerRight, + child: Padding( + padding: getPadding(right: 20, top:10), + child: Text("lbl_powered_by".tr, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtRobotoRomanMedium10))), + CustomImageView( + imagePath: + ImageConstant + .imgImage1, + margin: getMargin(right:20), + height: + getVerticalSize( + 21), + width: + getHorizontalSize( + 103), + alignment: Alignment + .centerRight), + Align( + alignment: Alignment.centerLeft, + child: Row( + mainAxisAlignment: + MainAxisAlignment.center, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + CustomImageView( + imagePath: ImageConstant + .imgRectangle286, + height: + getVerticalSize(133), + width: getHorizontalSize( + 134), + margin: + getMargin(top: 20)), + Padding( + padding: getPadding( + left: 15, bottom: 20, top:25), + child: Column( + crossAxisAlignment: + CrossAxisAlignment + .start, + mainAxisAlignment: + MainAxisAlignment + .start, + children: [ + Container( + width: + getHorizontalSize( + 109), + margin: + getMargin( + top: + 34), + child: Text( + "msg_istituto_comprensivo" + .tr, + maxLines: + null, + textAlign: + TextAlign + .right, + style: AppStyle + .txtRobotoRomanSemiBold19)), + Padding( + padding: + getPadding( + top: 6), + child: Text( + "lbl_dante_alighieri" + .tr, + overflow: + TextOverflow + .ellipsis, + textAlign: + TextAlign + .right, + style: AppStyle + .txtRobotoRomanSemiBold19Lime600)) + ])) + ])), + Padding( + padding: getPadding(top: 25),), + Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: + getPadding(left: 41), + child: Text( + "msg_collegamento_ad".tr, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle + .txtRobotoRomanSemiBold24Black900))), + Container( + margin: getMargin( + left: 16, top: 10, right: 15), + padding: + getPadding(top: 25, bottom: 25), + decoration: AppDecoration.fillWhiteA700 + .copyWith( + borderRadius: BorderRadiusStyle + .roundedBorder8), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: + CrossAxisAlignment.end, + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Padding( + padding: getPadding( + left: 31, right: 13), + child: Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Padding( + padding: getPadding( + top: 5, + bottom: 2), + child: Text( + "lbl_classe_1_c" + .tr, + overflow: + TextOverflow + .ellipsis, + textAlign: + TextAlign + .left, + style: AppStyle + .txtRobotoRomanSemiBold24Black900)), + Obx(() => CustomSwitch( + value: controller + .isSelectedSwitch + .value, + onChanged: (value) { + controller + .isSelectedSwitch + .value = value; + })) + ])), + Padding( + padding: getPadding(top: 19), + child: Divider( + color: ColorConstant + .gray200)), + Align( + alignment: Alignment.center, + child: Padding( + padding: getPadding( + left: 28, + top: 18, + right: 16), + child: Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Padding( + padding: + getPadding( + top: 3, + bottom: + 4), + child: Text( + "lbl_classe_2_c" + .tr, + overflow: + TextOverflow + .ellipsis, + textAlign: + TextAlign + .left, + style: AppStyle + .txtRobotoRomanSemiBold24Black900)), + Obx(() => + CustomSwitch( + value: controller + .isSelectedSwitch1 + .value, + onChanged: + (value) { + controller + .isSelectedSwitch1 + .value = value; + })) + ]))), + Padding( + padding: getPadding(top: 19), + child: Divider( + color: ColorConstant + .gray200)), + Align( + alignment: Alignment.center, + child: Padding( + padding: getPadding( + left: 28, + top: 22, + right: 16), + child: Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + crossAxisAlignment: + CrossAxisAlignment + .start, + children: [ + Padding( + padding: + getPadding( + bottom: + 8), + child: Text( + "lbl_visori_3d" + .tr, + overflow: + TextOverflow + .ellipsis, + textAlign: + TextAlign + .left, + style: AppStyle + .txtRobotoRomanSemiBold24Black900)), + Obx(() => + CustomSwitch( + value: controller + .isSelectedSwitch2 + .value, + onChanged: + (value) { + controller + .isSelectedSwitch2 + .value = value; + })) + ]))), + Padding( + padding: getPadding(top: 20), + child: Divider( + color: ColorConstant + .gray200)), + Align( + alignment: Alignment.center, + child: Padding( + padding: getPadding( + left: 27, + top: 17, + right: 15), + child: Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + crossAxisAlignment: + CrossAxisAlignment + .start, + children: [ + Padding( + padding: + getPadding( + top: 2, + bottom: + 5), + child: Text( + "msg_lab_di_informatica" + .tr, + overflow: + TextOverflow + .ellipsis, + textAlign: + TextAlign + .left, + style: AppStyle + .txtRobotoRomanSemiBold24Black900)), + Obx(() => + CustomSwitch( + value: controller + .isSelectedSwitch3 + .value, + onChanged: + (value) { + controller + .isSelectedSwitch3 + .value = value; + })) + ]))) + ])), + ]))) + ])), + bottomNavigationBar: Container( + height: getVerticalSize(145), + width: double.maxFinite, + child: Stack(alignment: Alignment.topCenter, children: [ + Align( + alignment: Alignment.bottomCenter, + child: Container( + height: getVerticalSize(170), + width: double.maxFinite, + decoration: + BoxDecoration(color: ColorConstant.blueGray50))), + Column( + children: [ + CustomButton( + text: "lbl_scollega_tutti".tr, + onTap: () { + controller.isSelectedSwitch.value = false; + controller.isSelectedSwitch1.value = false; + controller.isSelectedSwitch2.value = false; + controller.isSelectedSwitch3.value = false; + }, + margin: getMargin( + left: 16, top: 10, right: 15, bottom:10) + ), + CustomButton( + width: getHorizontalSize(344), + text: "lbl_indietro".tr, + variant: ButtonVariant.GradientGray5008eBluegray400af, + onTap: onBackPressed, + alignment: Alignment.topCenter) + ]) + ])))); + } + + onBackPressed() { + Get.back(); + } +} diff --git a/lib/presentation/abilita_disabilita_classe_screen/binding/abilita_disabilita_classe_binding.dart b/lib/presentation/abilita_disabilita_classe_screen/binding/abilita_disabilita_classe_binding.dart new file mode 100644 index 0000000..8049494 --- /dev/null +++ b/lib/presentation/abilita_disabilita_classe_screen/binding/abilita_disabilita_classe_binding.dart @@ -0,0 +1,9 @@ +import '../controller/abilita_disabilita_classe_controller.dart'; +import 'package:get/get.dart'; + +class AbilitaDisabilitaClasseBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => AbilitaDisabilitaClasseController()); + } +} diff --git a/lib/presentation/abilita_disabilita_classe_screen/controller/abilita_disabilita_classe_controller.dart b/lib/presentation/abilita_disabilita_classe_screen/controller/abilita_disabilita_classe_controller.dart new file mode 100644 index 0000000..9877d5a --- /dev/null +++ b/lib/presentation/abilita_disabilita_classe_screen/controller/abilita_disabilita_classe_controller.dart @@ -0,0 +1,25 @@ +import 'package:michele_s_application8/core/app_export.dart'; +import 'package:michele_s_application8/presentation/abilita_disabilita_classe_screen/models/abilita_disabilita_classe_model.dart'; + +class AbilitaDisabilitaClasseController extends GetxController { + Rx abilitaDisabilitaClasseModelObj = + AbilitaDisabilitaClasseModel().obs; + + RxBool isSelectedSwitch = false.obs; + + RxBool isSelectedSwitch1 = false.obs; + + RxBool isSelectedSwitch2 = false.obs; + + RxBool isSelectedSwitch3 = false.obs; + + @override + void onReady() { + super.onReady(); + } + + @override + void onClose() { + super.onClose(); + } +} diff --git a/lib/presentation/abilita_disabilita_classe_screen/models/abilita_disabilita_classe_model.dart b/lib/presentation/abilita_disabilita_classe_screen/models/abilita_disabilita_classe_model.dart new file mode 100644 index 0000000..5882de5 --- /dev/null +++ b/lib/presentation/abilita_disabilita_classe_screen/models/abilita_disabilita_classe_model.dart @@ -0,0 +1 @@ +class AbilitaDisabilitaClasseModel {} diff --git a/lib/presentation/abilita_disabilita_classe_two_screen/abilita_disabilita_classe_two_screen.dart b/lib/presentation/abilita_disabilita_classe_two_screen/abilita_disabilita_classe_two_screen.dart new file mode 100644 index 0000000..c3e313b --- /dev/null +++ b/lib/presentation/abilita_disabilita_classe_two_screen/abilita_disabilita_classe_two_screen.dart @@ -0,0 +1,165 @@ +import 'controller/abilita_disabilita_classe_two_controller.dart'; +import 'package:flutter/material.dart'; +import 'package:michele_s_application8/core/app_export.dart'; + +class AbilitaDisabilitaClasseTwoScreen + extends GetWidget { + @override + Widget build(BuildContext context) { + return SafeArea( + child: Scaffold( + backgroundColor: ColorConstant.whiteA700, + body: Container( + width: double.maxFinite, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Expanded( + child: Container( + margin: getMargin(bottom: 2), + padding: getPadding( + left: 24, top: 11, right: 24, bottom: 11), + decoration: AppDecoration.fillGray200, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Align( + alignment: Alignment.centerRight, + child: Padding( + padding: getPadding(), + child: Text("lbl_powered_by".tr, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtRobotoRomanMedium10))), + CustomImageView( + imagePath: ImageConstant.imgImage1, + height: getVerticalSize(21), + width: getHorizontalSize(103), + alignment: Alignment.centerRight), + Padding( + padding: getPadding(left: 32, top: 25, right: 30), + child: Row(children: [ + CustomImageView( + imagePath: ImageConstant.imgRectangle286, + height: getVerticalSize(133), + width: getHorizontalSize(134)), + Padding( + padding: getPadding( + left: 10, top: 32, bottom: 20), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.end, + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Container( + width: getHorizontalSize(113), + child: Text( + "msg_istituto_comprensivo".tr, + maxLines: null, + textAlign: TextAlign.right, + style: AppStyle + .txtRobotoRomanSemiBold19)), + Padding( + padding: getPadding(top: 6), + child: Text( + "lbl_dante_alighieri".tr, + overflow: + TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle + .txtRobotoRomanSemiBold19Lime600)) + ])) + ])), + Padding( + padding: getPadding(top: 17), + child: Divider( + color: ColorConstant.whiteA700)), + Spacer(), + GestureDetector( + onTap: () { + navigateToMyDevices(); + }, + child: Container( + margin: + getMargin(left: 5, right: 5), + padding: getPadding( + left: 82, + top: 18, + right: 82, + bottom: 18), + decoration: AppDecoration + .outlineBlack9003f + .copyWith( + borderRadius: + BorderRadiusStyle + .roundedBorder14), + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Container( + width: getHorizontalSize( + 152), + child: Text( + "msg_gestisci_i_miei" + .tr, + maxLines: null, + textAlign: + TextAlign.center, + style: AppStyle + .txtRobotoRomanSemiBold24)) + ]))), + GestureDetector( + onTap: () { + navigateToMyGroups(); + }, + child: Container( + margin: getMargin( + left: 5, + top: 30, + right: 5, + bottom: 200), + padding: getPadding( + left: 82, + top: 17, + right: 82, + bottom: 17), + decoration: AppDecoration + .outlineBlack9003f + .copyWith( + borderRadius: + BorderRadiusStyle + .roundedBorder14), + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + Container( + width: getHorizontalSize( + 152), + margin: getMargin(top: 3), + child: Text( + "msg_gestisci_i_miei2" + .tr, + maxLines: null, + textAlign: + TextAlign.center, + style: AppStyle + .txtRobotoRomanSemiBold24)) + ]))) + ]))) + ])))); + } + + navigateToMyDevices() { + Get.toNamed(AppRoutes.abilitaDisabilitaClasseOneScreen); + } + + navigateToMyGroups() { + Get.toNamed(AppRoutes.abilitaDisabilitaClasseScreen); + } +} diff --git a/lib/presentation/abilita_disabilita_classe_two_screen/binding/abilita_disabilita_classe_two_binding.dart b/lib/presentation/abilita_disabilita_classe_two_screen/binding/abilita_disabilita_classe_two_binding.dart new file mode 100644 index 0000000..645205e --- /dev/null +++ b/lib/presentation/abilita_disabilita_classe_two_screen/binding/abilita_disabilita_classe_two_binding.dart @@ -0,0 +1,9 @@ +import '../controller/abilita_disabilita_classe_two_controller.dart'; +import 'package:get/get.dart'; + +class AbilitaDisabilitaClasseTwoBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => AbilitaDisabilitaClasseTwoController()); + } +} diff --git a/lib/presentation/abilita_disabilita_classe_two_screen/controller/abilita_disabilita_classe_two_controller.dart b/lib/presentation/abilita_disabilita_classe_two_screen/controller/abilita_disabilita_classe_two_controller.dart new file mode 100644 index 0000000..8da7e23 --- /dev/null +++ b/lib/presentation/abilita_disabilita_classe_two_screen/controller/abilita_disabilita_classe_two_controller.dart @@ -0,0 +1,17 @@ +import 'package:michele_s_application8/core/app_export.dart'; +import 'package:michele_s_application8/presentation/abilita_disabilita_classe_two_screen/models/abilita_disabilita_classe_two_model.dart'; + +class AbilitaDisabilitaClasseTwoController extends GetxController { + Rx abilitaDisabilitaClasseTwoModelObj = + AbilitaDisabilitaClasseTwoModel().obs; + + @override + void onReady() { + super.onReady(); + } + + @override + void onClose() { + super.onClose(); + } +} diff --git a/lib/presentation/abilita_disabilita_classe_two_screen/models/abilita_disabilita_classe_two_model.dart b/lib/presentation/abilita_disabilita_classe_two_screen/models/abilita_disabilita_classe_two_model.dart new file mode 100644 index 0000000..52498fe --- /dev/null +++ b/lib/presentation/abilita_disabilita_classe_two_screen/models/abilita_disabilita_classe_two_model.dart @@ -0,0 +1 @@ +class AbilitaDisabilitaClasseTwoModel {} diff --git a/lib/presentation/app_navigation_screen/app_navigation_screen.dart b/lib/presentation/app_navigation_screen/app_navigation_screen.dart new file mode 100644 index 0000000..0d32acc --- /dev/null +++ b/lib/presentation/app_navigation_screen/app_navigation_screen.dart @@ -0,0 +1,279 @@ +import 'controller/app_navigation_controller.dart'; +import 'package:flutter/material.dart'; +import 'package:michele_s_application8/core/app_export.dart'; + +class AppNavigationScreen extends GetWidget { + @override + Widget build(BuildContext context) { + return SafeArea( + child: Scaffold( + backgroundColor: ColorConstant.whiteA700, + body: Container( + width: double.maxFinite, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + decoration: AppDecoration.fillWhiteA700, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: getPadding( + left: 20, + top: 10, + right: 20, + bottom: 10), + child: Text("lbl_app_navigation".tr, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.center, + style: + AppStyle.txtRobotoRegular20))), + Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: getPadding(left: 20), + child: Text("msg_check_your_app_s".tr, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.center, + style: + AppStyle.txtRobotoRegular16))), + Padding( + padding: getPadding(top: 5), + child: + Divider(color: ColorConstant.black900)) + ])), + Expanded( + child: SingleChildScrollView( + child: Container( + decoration: AppDecoration.fillWhiteA700, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + GestureDetector( + onTap: () { + onTapSplashScreenOne(); + }, + child: Container( + decoration: + AppDecoration.fillWhiteA700, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Align( + alignment: Alignment + .centerLeft, + child: Padding( + padding: + getPadding( + left: 20, + top: 10, + right: 20, + bottom: + 10), + child: Text( + "msg_splash_screen_one" + .tr, + overflow: + TextOverflow + .ellipsis, + textAlign: + TextAlign + .center, + style: AppStyle + .txtRobotoRegular20))), + Padding( + padding: getPadding( + top: 5), + child: Divider( + color: ColorConstant + .bluegray400)) + ]))), + GestureDetector( + onTap: () { + onTapLogin(); + }, + child: Container( + decoration: + AppDecoration.fillWhiteA700, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Align( + alignment: Alignment + .centerLeft, + child: Padding( + padding: + getPadding( + left: 20, + top: 10, + right: 20, + bottom: + 10), + child: Text( + "lbl_login" + .tr, + overflow: + TextOverflow + .ellipsis, + textAlign: + TextAlign + .center, + style: AppStyle + .txtRobotoRegular20))), + Padding( + padding: getPadding( + top: 5), + child: Divider( + color: ColorConstant + .bluegray400)) + ]))), + GestureDetector( + onTap: () { + onTapAbilitaDisabilitaclasseTwo(); + }, + child: Container( + decoration: + AppDecoration.fillWhiteA700, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Align( + alignment: Alignment + .centerLeft, + child: Padding( + padding: + getPadding( + left: 20, + top: 10, + right: 20, + bottom: + 10), + child: Text( + "msg_abilita_disabilita" + .tr, + overflow: + TextOverflow + .ellipsis, + textAlign: + TextAlign + .center, + style: AppStyle + .txtRobotoRegular20))), + Padding( + padding: getPadding( + top: 5), + child: Divider( + color: ColorConstant + .bluegray400)) + ]))), + GestureDetector( + onTap: () { + onTapAbilitaDisabilitaclasse(); + }, + child: Container( + decoration: + AppDecoration.fillWhiteA700, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Align( + alignment: Alignment + .centerLeft, + child: Padding( + padding: + getPadding( + left: 20, + top: 10, + right: 20, + bottom: + 10), + child: Text( + "msg_abilita_disabilita2" + .tr, + overflow: + TextOverflow + .ellipsis, + textAlign: + TextAlign + .center, + style: AppStyle + .txtRobotoRegular20))), + Padding( + padding: getPadding( + top: 5), + child: Divider( + color: ColorConstant + .bluegray400)) + ]))), + GestureDetector( + onTap: () { + onTapAbilitaDisabilitaclasseOne(); + }, + child: Container( + decoration: + AppDecoration.fillWhiteA700, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Align( + alignment: Alignment + .centerLeft, + child: Padding( + padding: + getPadding( + left: 20, + top: 10, + right: 20, + bottom: + 10), + child: Text( + "msg_abilita_disabilita3" + .tr, + overflow: + TextOverflow + .ellipsis, + textAlign: + TextAlign + .center, + style: AppStyle + .txtRobotoRegular20))), + Padding( + padding: getPadding( + top: 5), + child: Divider( + color: ColorConstant + .bluegray400)) + ]))) + ])))) + ])))); + } + + onTapSplashScreenOne() { + Get.toNamed(AppRoutes.splashScreenOneScreen); + } + + onTapLogin() { + Get.toNamed(AppRoutes.loginScreen); + } + + onTapAbilitaDisabilitaclasseTwo() { + Get.toNamed(AppRoutes.abilitaDisabilitaClasseTwoScreen); + } + + onTapAbilitaDisabilitaclasse() { + Get.toNamed(AppRoutes.abilitaDisabilitaClasseScreen); + } + + onTapAbilitaDisabilitaclasseOne() { + Get.toNamed(AppRoutes.abilitaDisabilitaClasseOneScreen); + } +} diff --git a/lib/presentation/app_navigation_screen/binding/app_navigation_binding.dart b/lib/presentation/app_navigation_screen/binding/app_navigation_binding.dart new file mode 100644 index 0000000..b7ce65c --- /dev/null +++ b/lib/presentation/app_navigation_screen/binding/app_navigation_binding.dart @@ -0,0 +1,9 @@ +import '../controller/app_navigation_controller.dart'; +import 'package:get/get.dart'; + +class AppNavigationBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => AppNavigationController()); + } +} diff --git a/lib/presentation/app_navigation_screen/controller/app_navigation_controller.dart b/lib/presentation/app_navigation_screen/controller/app_navigation_controller.dart new file mode 100644 index 0000000..d98323a --- /dev/null +++ b/lib/presentation/app_navigation_screen/controller/app_navigation_controller.dart @@ -0,0 +1,16 @@ +import 'package:michele_s_application8/core/app_export.dart'; +import 'package:michele_s_application8/presentation/app_navigation_screen/models/app_navigation_model.dart'; + +class AppNavigationController extends GetxController { + Rx appNavigationModelObj = AppNavigationModel().obs; + + @override + void onReady() { + super.onReady(); + } + + @override + void onClose() { + super.onClose(); + } +} diff --git a/lib/presentation/app_navigation_screen/models/app_navigation_model.dart b/lib/presentation/app_navigation_screen/models/app_navigation_model.dart new file mode 100644 index 0000000..4b0b0ea --- /dev/null +++ b/lib/presentation/app_navigation_screen/models/app_navigation_model.dart @@ -0,0 +1 @@ +class AppNavigationModel {} diff --git a/lib/presentation/login_screen/binding/login_binding.dart b/lib/presentation/login_screen/binding/login_binding.dart new file mode 100644 index 0000000..7abc6d7 --- /dev/null +++ b/lib/presentation/login_screen/binding/login_binding.dart @@ -0,0 +1,9 @@ +import '../controller/login_controller.dart'; +import 'package:get/get.dart'; + +class LoginBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => LoginController()); + } +} diff --git a/lib/presentation/login_screen/controller/login_controller.dart b/lib/presentation/login_screen/controller/login_controller.dart new file mode 100644 index 0000000..a91d6e4 --- /dev/null +++ b/lib/presentation/login_screen/controller/login_controller.dart @@ -0,0 +1,25 @@ +import 'package:michele_s_application8/core/app_export.dart'; +import 'package:michele_s_application8/presentation/login_screen/models/login_model.dart'; +import 'package:flutter/material.dart'; + +class LoginController extends GetxController { + TextEditingController masterfieldController = TextEditingController(); + + TextEditingController masterfieldOneController = TextEditingController(); + + Rx loginModelObj = LoginModel().obs; + + Rx isShowPassword = false.obs; + + @override + void onReady() { + super.onReady(); + } + + @override + void onClose() { + super.onClose(); + masterfieldController.dispose(); + masterfieldOneController.dispose(); + } +} diff --git a/lib/presentation/login_screen/login_screen.dart b/lib/presentation/login_screen/login_screen.dart new file mode 100644 index 0000000..5cc141c --- /dev/null +++ b/lib/presentation/login_screen/login_screen.dart @@ -0,0 +1,166 @@ +import 'controller/login_controller.dart'; +import 'package:flutter/material.dart'; +import 'package:michele_s_application8/core/app_export.dart'; +import 'package:michele_s_application8/core/utils/validation_functions.dart'; +import 'package:michele_s_application8/widgets/custom_button.dart'; +import 'package:michele_s_application8/widgets/custom_text_form_field.dart'; + +// ignore_for_file: must_be_immutable +class LoginScreen extends GetWidget { + GlobalKey _formKey = GlobalKey(); + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Scaffold( + resizeToAvoidBottomInset: false, + backgroundColor: ColorConstant.whiteA700, + body: Form( + key: _formKey, + child: Container( + width: double.maxFinite, + padding: + getPadding(left: 23, top: 11, right: 23, bottom: 11), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Align( + alignment: Alignment.centerRight, + child: Padding( + padding: getPadding(right: 1), + child: Text("lbl_powered_by".tr, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtRobotoRomanMedium10))), + CustomImageView( + imagePath: ImageConstant.imgImage1, + height: getVerticalSize(21), + width: getHorizontalSize(103), + alignment: Alignment.centerRight), + Padding( + padding: getPadding(left: 32, top: 25, right: 30), + child: Row(children: [ + CustomImageView( + imagePath: ImageConstant.imgRectangle286, + height: getVerticalSize(133), + width: getHorizontalSize(134)), + Padding( + padding: getPadding( + left: 10, top: 32, bottom: 20), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.end, + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Container( + width: getHorizontalSize(113), + child: Text( + "msg_istituto_comprensivo".tr, + maxLines: null, + textAlign: TextAlign.right, + style: AppStyle + .txtRobotoRomanSemiBold19)), + Padding( + padding: getPadding(top: 6), + child: Text( + "lbl_dante_alighieri".tr, + overflow: + TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle + .txtRobotoRomanSemiBold19Lime600)) + ])) + ])), + Padding( + padding: getPadding(top: 17), + child: Divider(color: ColorConstant.whiteA700)), + Spacer(), + Padding( + padding: getPadding(left: 5), + child: Text("lbl_login".tr, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle + .txtRobotoRomanSemiBold19Black900)), + Padding( + padding: getPadding(left: 6, top: 43), + child: Text("lbl_username".tr, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtRobotoRomanMedium1324)), + CustomTextFormField( + focusNode: FocusNode(), + controller: controller.masterfieldController, + hintText: "msg_inserisci_il_tuo".tr, + margin: getMargin(left: 5, top: 12, right: 10), + validator: (value) { + if (!isText(value)) { + return "Please enter valid text"; + } + return null; + }), + Padding( + padding: getPadding(left: 6, top: 10), + child: Text("lbl_password".tr, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtRobotoRomanMedium1324)), + Obx(() => CustomTextFormField( + focusNode: FocusNode(), + controller: controller.masterfieldOneController, + hintText: "msg_inserisci_la_password".tr, + margin: getMargin(left: 7, top: 12, right: 8), + padding: TextFormFieldPadding.PaddingT13, + textInputAction: TextInputAction.done, + textInputType: TextInputType.visiblePassword, + suffix: InkWell( + onTap: () { + controller.isShowPassword.value = + !controller.isShowPassword.value; + }, + child: Container( + margin: getMargin( + left: 30, + top: 14, + right: 12, + bottom: 18), + child: CustomImageView( + svgPath: + controller.isShowPassword.value + ? ImageConstant.imgEye + : ImageConstant.imgEye))), + suffixConstraints: BoxConstraints( + maxHeight: getVerticalSize(46)), + validator: (value) { + if (value == null || + (!isValidPassword(value, + isRequired: true))) { + return "Please enter valid password"; + } + return null; + }, + isObscureText: !controller.isShowPassword.value)), + Align( + alignment: Alignment.centerRight, + child: Padding( + padding: getPadding(top: 10, right: 10), + child: Text("msg_password_dimenticata".tr, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtRobotoRomanLight984))), + CustomButton( + text: "lbl_login".tr, + margin: getMargin( + left: 6, top: 26, right: 7, bottom: 175), + variant: ButtonVariant.OutlineBlack9003f, + padding: ButtonPadding.PaddingAll9, + onTap: navigateToHome) + ]))))); + } + + navigateToHome() { + Get.toNamed(AppRoutes.abilitaDisabilitaClasseTwoScreen); + } +} diff --git a/lib/presentation/login_screen/models/login_model.dart b/lib/presentation/login_screen/models/login_model.dart new file mode 100644 index 0000000..ab2096f --- /dev/null +++ b/lib/presentation/login_screen/models/login_model.dart @@ -0,0 +1 @@ +class LoginModel {} diff --git a/lib/presentation/splash_screen_one_screen/binding/splash_screen_one_binding.dart b/lib/presentation/splash_screen_one_screen/binding/splash_screen_one_binding.dart new file mode 100644 index 0000000..8d4ce8f --- /dev/null +++ b/lib/presentation/splash_screen_one_screen/binding/splash_screen_one_binding.dart @@ -0,0 +1,9 @@ +import '../controller/splash_screen_one_controller.dart'; +import 'package:get/get.dart'; + +class SplashScreenOneBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => SplashScreenOneController()); + } +} diff --git a/lib/presentation/splash_screen_one_screen/controller/splash_screen_one_controller.dart b/lib/presentation/splash_screen_one_screen/controller/splash_screen_one_controller.dart new file mode 100644 index 0000000..417c2c8 --- /dev/null +++ b/lib/presentation/splash_screen_one_screen/controller/splash_screen_one_controller.dart @@ -0,0 +1,19 @@ +import 'package:michele_s_application8/core/app_export.dart'; +import 'package:michele_s_application8/presentation/splash_screen_one_screen/models/splash_screen_one_model.dart'; + +class SplashScreenOneController extends GetxController { + Rx splashScreenOneModelObj = SplashScreenOneModel().obs; + + @override + void onReady() { + super.onReady(); + Future.delayed(const Duration(milliseconds: 3000), () { + Get.toNamed(AppRoutes.loginScreen); + }); + } + + @override + void onClose() { + super.onClose(); + } +} diff --git a/lib/presentation/splash_screen_one_screen/models/splash_screen_one_model.dart b/lib/presentation/splash_screen_one_screen/models/splash_screen_one_model.dart new file mode 100644 index 0000000..77529e6 --- /dev/null +++ b/lib/presentation/splash_screen_one_screen/models/splash_screen_one_model.dart @@ -0,0 +1 @@ +class SplashScreenOneModel {} diff --git a/lib/presentation/splash_screen_one_screen/splash_screen_one_screen.dart b/lib/presentation/splash_screen_one_screen/splash_screen_one_screen.dart new file mode 100644 index 0000000..0cbb3f5 --- /dev/null +++ b/lib/presentation/splash_screen_one_screen/splash_screen_one_screen.dart @@ -0,0 +1,90 @@ +import 'controller/splash_screen_one_controller.dart'; +import 'package:flutter/material.dart'; +import 'package:michele_s_application8/core/app_export.dart'; + +class SplashScreenOneScreen extends GetWidget { + @override + Widget build(BuildContext context) { + return SafeArea( + child: Scaffold( + backgroundColor: ColorConstant.whiteA700, + body: Container( + width: double.maxFinite, + padding: getPadding(all: 14), + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Padding( + padding: getPadding(right: 6), + child: Text("lbl_powered_by".tr, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtRobotoRomanMedium10)), + CustomImageView( + imagePath: ImageConstant.imgImage1, + height: getVerticalSize(21), + width: getHorizontalSize(103), + margin: getMargin(right: 6)), + Spacer(), + Container( + height: getVerticalSize(352), + width: getHorizontalSize(345), + margin: getMargin(right: 1, bottom: 215), + child: Stack(alignment: Alignment.center, children: [ + Align( + alignment: Alignment.center, + child: Container( + height: getVerticalSize(352), + width: getHorizontalSize(345), + decoration: BoxDecoration( + color: ColorConstant.whiteA7009e, + borderRadius: BorderRadius.circular( + getHorizontalSize(176))))), + Align( + alignment: Alignment.center, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + CustomImageView( + imagePath: + ImageConstant.imgRectangle286, + height: getVerticalSize(133), + width: getHorizontalSize(134)), + Padding( + padding: getPadding( + left: 6, top: 148, bottom: 20), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.end, + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Container( + width: + getHorizontalSize(113), + child: Text( + "msg_istituto_comprensivo" + .tr, + maxLines: null, + textAlign: + TextAlign.right, + style: AppStyle + .txtRobotoRomanSemiBold19)), + Padding( + padding: getPadding(top: 6), + child: Text( + "lbl_dante_alighieri" + .tr, + overflow: TextOverflow + .ellipsis, + textAlign: + TextAlign.left, + style: AppStyle + .txtRobotoRomanSemiBold19Lime600)) + ])) + ])) + ])) + ])))); + } +} diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart new file mode 100644 index 0000000..bdb3360 --- /dev/null +++ b/lib/routes/app_routes.dart @@ -0,0 +1,84 @@ +import 'package:michele_s_application8/presentation/splash_screen_one_screen/splash_screen_one_screen.dart'; +import 'package:michele_s_application8/presentation/splash_screen_one_screen/binding/splash_screen_one_binding.dart'; +import 'package:michele_s_application8/presentation/login_screen/login_screen.dart'; +import 'package:michele_s_application8/presentation/login_screen/binding/login_binding.dart'; +import 'package:michele_s_application8/presentation/abilita_disabilita_classe_two_screen/abilita_disabilita_classe_two_screen.dart'; +import 'package:michele_s_application8/presentation/abilita_disabilita_classe_two_screen/binding/abilita_disabilita_classe_two_binding.dart'; +import 'package:michele_s_application8/presentation/abilita_disabilita_classe_screen/abilita_disabilita_classe_screen.dart'; +import 'package:michele_s_application8/presentation/abilita_disabilita_classe_screen/binding/abilita_disabilita_classe_binding.dart'; +import 'package:michele_s_application8/presentation/abilita_disabilita_classe_one_screen/abilita_disabilita_classe_one_screen.dart'; +import 'package:michele_s_application8/presentation/abilita_disabilita_classe_one_screen/binding/abilita_disabilita_classe_one_binding.dart'; +import 'package:michele_s_application8/presentation/app_navigation_screen/app_navigation_screen.dart'; +import 'package:michele_s_application8/presentation/app_navigation_screen/binding/app_navigation_binding.dart'; +import 'package:get/get.dart'; + +class AppRoutes { + static const String splashScreenOneScreen = '/splash_screen_one_screen'; + + static const String loginScreen = '/login_screen'; + + static const String abilitaDisabilitaClasseTwoScreen = + '/abilita_disabilita_classe_two_screen'; + + static const String abilitaDisabilitaClasseScreen = + '/abilita_disabilita_classe_screen'; + + static const String abilitaDisabilitaClasseOneScreen = + '/abilita_disabilita_classe_one_screen'; + + static const String appNavigationScreen = '/app_navigation_screen'; + + static String initialRoute = '/initialRoute'; + + static List pages = [ + GetPage( + name: splashScreenOneScreen, + page: () => SplashScreenOneScreen(), + bindings: [ + SplashScreenOneBinding(), + ], + ), + GetPage( + name: loginScreen, + page: () => LoginScreen(), + bindings: [ + LoginBinding(), + ], + ), + GetPage( + name: abilitaDisabilitaClasseTwoScreen, + page: () => AbilitaDisabilitaClasseTwoScreen(), + bindings: [ + AbilitaDisabilitaClasseTwoBinding(), + ], + ), + GetPage( + name: abilitaDisabilitaClasseScreen, + page: () => AbilitaDisabilitaClasseScreen(), + bindings: [ + AbilitaDisabilitaClasseBinding(), + ], + ), + GetPage( + name: abilitaDisabilitaClasseOneScreen, + page: () => AbilitaDisabilitaClasseOneScreen(), + bindings: [ + AbilitaDisabilitaClasseOneBinding(), + ], + ), + GetPage( + name: appNavigationScreen, + page: () => AppNavigationScreen(), + bindings: [ + AppNavigationBinding(), + ], + ), + GetPage( + name: initialRoute, + page: () => SplashScreenOneScreen(), + bindings: [ + SplashScreenOneBinding(), + ], + ) + ]; +} diff --git a/lib/theme/app_decoration.dart b/lib/theme/app_decoration.dart new file mode 100644 index 0000000..4a7fe78 --- /dev/null +++ b/lib/theme/app_decoration.dart @@ -0,0 +1,41 @@ +import 'package:flutter/material.dart'; +import 'package:michele_s_application8/core/app_export.dart'; + +class AppDecoration { + static BoxDecoration get outlineBlack9003f => BoxDecoration( + gradient: LinearGradient( + begin: Alignment( + 0.5, + 0, + ), + end: Alignment( + 0.5, + 1.11, + ), + colors: [ + ColorConstant.blueA400, + ColorConstant.blue600E8, + ], + ), + ); + static BoxDecoration get fillGray200 => BoxDecoration( + color: ColorConstant.gray200, + ); + static BoxDecoration get fillWhiteA700 => BoxDecoration( + color: ColorConstant.whiteA700, + ); +} + +class BorderRadiusStyle { + static BorderRadius roundedBorder8 = BorderRadius.circular( + getHorizontalSize( + 8, + ), + ); + + static BorderRadius roundedBorder14 = BorderRadius.circular( + getHorizontalSize( + 14, + ), + ); +} diff --git a/lib/theme/app_style.dart b/lib/theme/app_style.dart new file mode 100644 index 0000000..20c0a07 --- /dev/null +++ b/lib/theme/app_style.dart @@ -0,0 +1,103 @@ +import 'package:flutter/material.dart'; +import 'package:michele_s_application8/core/app_export.dart'; + +class AppStyle { + static TextStyle txtRobotoRomanLight984 = TextStyle( + color: ColorConstant.black900, + fontSize: getFontSize( + 9.84, + ), + fontFamily: 'Roboto', + fontWeight: FontWeight.w300, + ); + + static TextStyle txtRobotoRomanMedium1324 = TextStyle( + color: ColorConstant.gray900, + fontSize: getFontSize( + 13.24, + ), + fontFamily: 'Roboto', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtRobotoRomanSemiBold24Black900 = TextStyle( + color: ColorConstant.black900, + fontSize: getFontSize( + 24, + ), + fontFamily: 'Roboto', + fontWeight: FontWeight.w600, + ); + + static TextStyle txtRobotoRomanMedium10 = TextStyle( + color: ColorConstant.blueGray400, + fontSize: getFontSize( + 10, + ), + fontFamily: 'Roboto', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtRobotoRomanSemiBold19 = TextStyle( + color: ColorConstant.teal300, + fontSize: getFontSize( + 19, + ), + fontFamily: 'Roboto', + fontWeight: FontWeight.w600, + ); + + static TextStyle txtRobotoRegular16 = TextStyle( + color: ColorConstant.bluegray400, + fontSize: getFontSize( + 16, + ), + fontFamily: 'Roboto', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtRobotoRomanSemiBold24Black9001 = TextStyle( + color: ColorConstant.black900, + fontSize: getFontSize( + 24, + ), + fontFamily: 'Roboto', + fontWeight: FontWeight.w600, + ); + + static TextStyle txtRobotoRomanSemiBold24 = TextStyle( + color: ColorConstant.whiteA700, + fontSize: getFontSize( + 24, + ), + fontFamily: 'Roboto', + fontWeight: FontWeight.w600, + ); + + static TextStyle txtRobotoRomanSemiBold19Black900 = TextStyle( + color: ColorConstant.black900, + fontSize: getFontSize( + 19, + ), + fontFamily: 'Roboto', + fontWeight: FontWeight.w600, + ); + + static TextStyle txtRobotoRegular20 = TextStyle( + color: ColorConstant.black900, + fontSize: getFontSize( + 20, + ), + fontFamily: 'Roboto', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtRobotoRomanSemiBold19Lime600 = TextStyle( + color: ColorConstant.lime600, + fontSize: getFontSize( + 19, + ), + fontFamily: 'Roboto', + fontWeight: FontWeight.w600, + ); +} diff --git a/lib/widgets/custom_button.dart b/lib/widgets/custom_button.dart new file mode 100644 index 0000000..ec56091 --- /dev/null +++ b/lib/widgets/custom_button.dart @@ -0,0 +1,282 @@ +import 'package:flutter/material.dart'; +import 'package:michele_s_application8/core/app_export.dart'; + +class CustomButton extends StatelessWidget { + CustomButton( + {this.shape, + this.padding, + this.variant, + this.fontStyle, + this.alignment, + this.margin, + this.onTap, + this.width, + this.height, + this.text, + this.prefixWidget, + this.suffixWidget}); + + ButtonShape? shape; + + ButtonPadding? padding; + + ButtonVariant? variant; + + ButtonFontStyle? fontStyle; + + Alignment? alignment; + + EdgeInsetsGeometry? margin; + + VoidCallback? onTap; + + double? width; + + double? height; + + String? text; + + Widget? prefixWidget; + + Widget? suffixWidget; + + @override + Widget build(BuildContext context) { + return alignment != null + ? Align( + alignment: alignment!, + child: _buildButtonWidget(), + ) + : _buildButtonWidget(); + } + + _buildButtonWidget() { + return Padding( + padding: margin ?? EdgeInsets.zero, + child: TextButton( + onPressed: onTap, + style: _buildTextButtonStyle(), + child: _buildButtonChildWidget(), + ), + ); + } + + _buildButtonChildWidget() { + if (checkGradient()) { + return Container( + width: width ?? double.maxFinite, + padding: _setPadding(), + decoration: _buildDecoration(), + child: _buildButtonWithOrWithoutIcon(), + ); + } else { + return _buildButtonWithOrWithoutIcon(); + } + } + + _buildButtonWithOrWithoutIcon() { + if (prefixWidget != null || suffixWidget != null) { + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + prefixWidget ?? SizedBox(), + Text( + text ?? "", + textAlign: TextAlign.center, + style: _setFontStyle(), + ), + suffixWidget ?? SizedBox(), + ], + ); + } else { + return Text( + text ?? "", + textAlign: TextAlign.center, + style: _setFontStyle(), + ); + } + } + + _buildDecoration() { + return BoxDecoration( + borderRadius: _setBorderRadius(), + gradient: _setGradient(), + boxShadow: _setBoxShadow(), + ); + } + + _buildTextButtonStyle() { + if (checkGradient()) { + return TextButton.styleFrom( + padding: EdgeInsets.zero, + ); + } else { + return TextButton.styleFrom( + fixedSize: Size( + width ?? double.maxFinite, + height ?? getVerticalSize(40), + ), + padding: _setPadding(), + shadowColor: _setTextButtonShadowColor(), + shape: RoundedRectangleBorder( + borderRadius: _setBorderRadius(), + ), + ); + } + } + + _setPadding() { + switch (padding) { + case ButtonPadding.PaddingAll9: + return getPadding( + all: 9, + ); + default: + return getPadding( + all: 15, + ); + } + } + + _setTextButtonShadowColor() { + switch (variant) { + case ButtonVariant.OutlineBlack9003f: + return ColorConstant.black9003f; + default: + return null; + } + } + + _setBorderRadius() { + switch (shape) { + case ButtonShape.Square: + return BorderRadius.circular(0); + default: + return BorderRadius.circular( + getHorizontalSize( + 14.00, + ), + ); + } + } + + _setFontStyle() { + switch (fontStyle) { + default: + return TextStyle( + color: ColorConstant.whiteA700, + fontSize: getFontSize( + 24, + ), + fontFamily: 'Roboto', + fontWeight: FontWeight.w600, + height: getVerticalSize( + 1.21, + ), + ); + } + } + + checkGradient() { + switch (variant) { + case ButtonVariant.OutlineBlack9003f: + case ButtonVariant.GradientGray5008eBluegray400af: + return true; + default: + return true; + } + } + + _setGradient() { + switch (variant) { + case ButtonVariant.OutlineBlack9003f: + return LinearGradient( + begin: Alignment( + 0.5, + 0, + ), + end: Alignment( + 0.5, + 1.11, + ), + colors: [ + ColorConstant.blueA400, + ColorConstant.blue600E8, + ], + ); + case ButtonVariant.GradientGray5008eBluegray400af: + return LinearGradient( + begin: Alignment( + 0.5, + 0, + ), + end: Alignment( + 0.5, + 1, + ), + colors: [ + ColorConstant.gray5008e, + ColorConstant.blueGray400Af, + ], + ); + default: + return LinearGradient( + begin: Alignment( + 0.5, + 0, + ), + end: Alignment( + 0.5, + 1, + ), + colors: [ + ColorConstant.redA7008e, + ColorConstant.redA700Af, + ], + ); + } + } + + _setBoxShadow() { + switch (variant) { + case ButtonVariant.OutlineBlack9003f: + return [ + BoxShadow( + color: ColorConstant.black9003f, + spreadRadius: getHorizontalSize( + 2.00, + ), + blurRadius: getHorizontalSize( + 2.00, + ), + offset: Offset( + 0, + 2.65, + ), + ) + ]; + default: + return null; + } + } +} + +enum ButtonShape { + Square, + RoundedBorder14, +} + +enum ButtonPadding { + PaddingAll15, + PaddingAll9, +} + +enum ButtonVariant { + GradientRedA7008eRedA700af, + OutlineBlack9003f, + GradientGray5008eBluegray400af, +} + +enum ButtonFontStyle { + RobotoRomanSemiBold24, +} diff --git a/lib/widgets/custom_image_view.dart b/lib/widgets/custom_image_view.dart new file mode 100644 index 0000000..c4d7ee6 --- /dev/null +++ b/lib/widgets/custom_image_view.dart @@ -0,0 +1,153 @@ +// ignore_for_file: must_be_immutable + +import 'dart:io'; + +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class CustomImageView extends StatelessWidget { + ///[url] is required parameter for fetching network image + String? url; + + ///[imagePath] is required parameter for showing png,jpg,etc image + String? imagePath; + + ///[svgPath] is required parameter for showing svg image + String? svgPath; + + ///[file] is required parameter for fetching image file + File? file; + + double? height; + double? width; + Color? color; + BoxFit? fit; + final String placeHolder; + Alignment? alignment; + VoidCallback? onTap; + EdgeInsetsGeometry? margin; + BorderRadius? radius; + BoxBorder? border; + + ///a [CustomImageView] it can be used for showing any type of images + /// it will shows the placeholder image if image is not found on network image + CustomImageView({ + this.url, + this.imagePath, + this.svgPath, + this.file, + this.height, + this.width, + this.color, + this.fit, + this.alignment, + this.onTap, + this.radius, + this.margin, + this.border, + this.placeHolder = 'assets/images/image_not_found.png', + }); + + @override + Widget build(BuildContext context) { + return alignment != null + ? Align( + alignment: alignment!, + child: _buildWidget(), + ) + : _buildWidget(); + } + + Widget _buildWidget() { + return Padding( + padding: margin ?? EdgeInsets.zero, + child: InkWell( + onTap: onTap, + child: _buildCircleImage(), + ), + ); + } + + ///build the image with border radius + _buildCircleImage() { + if (radius != null) { + return ClipRRect( + borderRadius: radius, + child: _buildImageWithBorder(), + ); + } else { + return _buildImageWithBorder(); + } + } + + ///build the image with border and border radius style + _buildImageWithBorder() { + if (border != null) { + return Container( + decoration: BoxDecoration( + border: border, + borderRadius: radius, + ), + child: _buildImageView(), + ); + } else { + return _buildImageView(); + } + } + + Widget _buildImageView() { + if (svgPath != null && svgPath!.isNotEmpty) { + return Container( + height: height, + width: width, + child: SvgPicture.asset( + svgPath!, + height: height, + width: width, + fit: fit ?? BoxFit.contain, + color: color, + ), + ); + } else if (file != null && file!.path.isNotEmpty) { + return Image.file( + file!, + height: height, + width: width, + fit: fit ?? BoxFit.cover, + color: color, + ); + } else if (url != null && url!.isNotEmpty) { + return CachedNetworkImage( + height: height, + width: width, + fit: fit, + imageUrl: url!, + color: color, + placeholder: (context, url) => Container( + height: 30, + width: 30, + child: LinearProgressIndicator( + color: Colors.grey.shade200, + backgroundColor: Colors.grey.shade100, + ), + ), + errorWidget: (context, url, error) => Image.asset( + placeHolder, + height: height, + width: width, + fit: fit ?? BoxFit.cover, + ), + ); + } else if (imagePath != null && imagePath!.isNotEmpty) { + return Image.asset( + imagePath!, + height: height, + width: width, + fit: fit ?? BoxFit.cover, + color: color, + ); + } + return SizedBox(); + } +} diff --git a/lib/widgets/custom_switch.dart b/lib/widgets/custom_switch.dart new file mode 100644 index 0000000..dd855d1 --- /dev/null +++ b/lib/widgets/custom_switch.dart @@ -0,0 +1,47 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_switch/flutter_switch.dart'; +import 'package:michele_s_application8/core/app_export.dart'; + +class CustomSwitch extends StatelessWidget { + CustomSwitch({this.alignment, this.margin, this.value, this.onChanged}); + + Alignment? alignment; + + EdgeInsetsGeometry? margin; + + bool? value; + + Function(bool)? onChanged; + + @override + Widget build(BuildContext context) { + return alignment != null + ? Align( + alignment: alignment ?? Alignment.center, + child: _buildSwitchWidget(), + ) + : _buildSwitchWidget(); + } + + _buildSwitchWidget() { + return Padding( + padding: margin ?? EdgeInsets.zero, + child: FlutterSwitch( + value: value ?? false, + height: getHorizontalSize(37), + width: getHorizontalSize(70), + toggleSize: 27, + borderRadius: getHorizontalSize( + 18.00, + ), + activeColor: ColorConstant.lightBlueA400, + activeToggleColor: ColorConstant.whiteA700, + inactiveColor: ColorConstant.indigo100, + inactiveToggleColor: ColorConstant.whiteA700, + onToggle: (value) { + onChanged!(value); + }, + ), + ); + } +} diff --git a/lib/widgets/custom_text_form_field.dart b/lib/widgets/custom_text_form_field.dart new file mode 100644 index 0000000..6c343f5 --- /dev/null +++ b/lib/widgets/custom_text_form_field.dart @@ -0,0 +1,205 @@ +import 'package:flutter/material.dart'; +import 'package:michele_s_application8/core/app_export.dart'; + +class CustomTextFormField extends StatelessWidget { + CustomTextFormField( + {this.shape, + this.padding, + this.variant, + this.fontStyle, + this.alignment, + this.width, + this.margin, + this.controller, + this.focusNode, + this.isObscureText = false, + this.textInputAction = TextInputAction.next, + this.textInputType = TextInputType.text, + this.maxLines, + this.hintText, + this.prefix, + this.prefixConstraints, + this.suffix, + this.suffixConstraints, + this.validator}); + + TextFormFieldShape? shape; + + TextFormFieldPadding? padding; + + TextFormFieldVariant? variant; + + TextFormFieldFontStyle? fontStyle; + + Alignment? alignment; + + double? width; + + EdgeInsetsGeometry? margin; + + TextEditingController? controller; + + FocusNode? focusNode; + + bool? isObscureText; + + TextInputAction? textInputAction; + + TextInputType? textInputType; + + int? maxLines; + + String? hintText; + + Widget? prefix; + + BoxConstraints? prefixConstraints; + + Widget? suffix; + + BoxConstraints? suffixConstraints; + + FormFieldValidator? validator; + + @override + Widget build(BuildContext context) { + return alignment != null + ? Align( + alignment: alignment ?? Alignment.center, + child: _buildTextFormFieldWidget(), + ) + : _buildTextFormFieldWidget(); + } + + _buildTextFormFieldWidget() { + return Container( + width: width ?? double.maxFinite, + margin: margin, + child: TextFormField( + controller: controller, + focusNode: focusNode, + style: _setFontStyle(), + obscureText: isObscureText!, + textInputAction: textInputAction, + keyboardType: textInputType, + maxLines: maxLines ?? 1, + decoration: _buildDecoration(), + validator: validator, + ), + ); + } + + _buildDecoration() { + return InputDecoration( + hintText: hintText ?? "", + hintStyle: _setFontStyle(), + border: _setBorderStyle(), + enabledBorder: _setBorderStyle(), + focusedBorder: _setBorderStyle(), + disabledBorder: _setBorderStyle(), + prefixIcon: prefix, + prefixIconConstraints: prefixConstraints, + suffixIcon: suffix, + suffixIconConstraints: suffixConstraints, + fillColor: _setFillColor(), + filled: _setFilled(), + isDense: true, + contentPadding: _setPadding(), + ); + } + + _setFontStyle() { + switch (fontStyle) { + default: + return TextStyle( + color: ColorConstant.gray500, + fontSize: getFontSize( + 13.24, + ), + fontFamily: 'Roboto', + fontWeight: FontWeight.w400, + height: getVerticalSize( + 1.21, + ), + ); + } + } + + _setOutlineBorderRadius() { + switch (shape) { + default: + return BorderRadius.circular( + getHorizontalSize( + 20.00, + ), + ); + } + } + + _setBorderStyle() { + switch (variant) { + case TextFormFieldVariant.None: + return InputBorder.none; + default: + return OutlineInputBorder( + borderRadius: _setOutlineBorderRadius(), + borderSide: BorderSide( + color: ColorConstant.gray300, + width: 1, + ), + ); + } + } + + _setFillColor() { + switch (variant) { + default: + return ColorConstant.whiteA700; + } + } + + _setFilled() { + switch (variant) { + case TextFormFieldVariant.None: + return false; + default: + return true; + } + } + + _setPadding() { + switch (padding) { + case TextFormFieldPadding.PaddingT13: + return getPadding( + left: 13, + top: 13, + bottom: 13, + ); + default: + return getPadding( + left: 12, + top: 14, + right: 12, + bottom: 14, + ); + } + } +} + +enum TextFormFieldShape { + RoundedBorder20, +} + +enum TextFormFieldPadding { + PaddingT14, + PaddingT13, +} + +enum TextFormFieldVariant { + None, + OutlineGray300, +} + +enum TextFormFieldFontStyle { + RobotoRomanRegular1324, +} diff --git a/logs/errors.log b/logs/errors.log new file mode 100644 index 0000000..e69de29 diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..daed4d5 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,666 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + archive: + dependency: transitive + description: + name: archive + sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d + url: "https://pub.dev" + source: hosted + version: "3.3.6" + args: + dependency: transitive + description: + name: args + sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + async: + dependency: transitive + description: + name: async + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" + source: hosted + version: "2.10.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + cached_network_image: + dependency: "direct main" + description: + name: cached_network_image + sha256: fd3d0dc1d451f9a252b32d95d3f0c3c487bc41a75eba2e6097cb0b9c71491b15 + url: "https://pub.dev" + source: hosted + version: "3.2.3" + cached_network_image_platform_interface: + dependency: transitive + description: + name: cached_network_image_platform_interface + sha256: bb2b8403b4ccdc60ef5f25c70dead1f3d32d24b9d6117cfc087f496b178594a7 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + cached_network_image_web: + dependency: transitive + description: + name: cached_network_image_web + sha256: b8eb814ebfcb4dea049680f8c1ffb2df399e4d03bf7a352c775e26fa06e02fa0 + url: "https://pub.dev" + source: hosted + version: "1.0.2" + characters: + dependency: transitive + description: + name: characters + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" + source: hosted + version: "1.2.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c" + url: "https://pub.dev" + source: hosted + version: "0.3.5" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" + source: hosted + version: "1.17.0" + connectivity_plus: + dependency: "direct main" + description: + name: connectivity_plus + sha256: "3f8fe4e504c2d33696dac671a54909743bc6a902a9bb0902306f7a2aed7e528e" + url: "https://pub.dev" + source: hosted + version: "2.3.9" + connectivity_plus_linux: + dependency: transitive + description: + name: connectivity_plus_linux + sha256: "3caf859d001f10407b8e48134c761483e4495ae38094ffcca97193f6c271f5e2" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + connectivity_plus_macos: + dependency: transitive + description: + name: connectivity_plus_macos + sha256: "488d2de1e47e1224ad486e501b20b088686ba1f4ee9c4420ecbc3b9824f0b920" + url: "https://pub.dev" + source: hosted + version: "1.2.6" + connectivity_plus_platform_interface: + dependency: transitive + description: + name: connectivity_plus_platform_interface + sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a + url: "https://pub.dev" + source: hosted + version: "1.2.4" + connectivity_plus_web: + dependency: transitive + description: + name: connectivity_plus_web + sha256: "81332be1b4baf8898fed17bb4fdef27abb7c6fd990bf98c54fd978478adf2f1a" + url: "https://pub.dev" + source: hosted + version: "1.2.5" + connectivity_plus_windows: + dependency: transitive + description: + name: connectivity_plus_windows + sha256: "535b0404b4d5605c4dd8453d67e5d6d2ea0dd36e3b477f50f31af51b0aeab9dd" + url: "https://pub.dev" + source: hosted + version: "1.2.2" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + dbus: + dependency: transitive + description: + name: dbus + sha256: "6f07cba3f7b3448d42d015bfd3d53fe12e5b36da2423f23838efc1d5fb31a263" + url: "https://pub.dev" + source: hosted + version: "0.7.8" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + file: + dependency: "direct main" + description: + name: file + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" + source: hosted + version: "6.1.4" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_blurhash: + dependency: transitive + description: + name: flutter_blurhash + sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6" + url: "https://pub.dev" + source: hosted + version: "0.7.0" + flutter_cache_manager: + dependency: transitive + description: + name: flutter_cache_manager + sha256: "32cd900555219333326a2d0653aaaf8671264c29befa65bbd9856d204a4c9fb3" + url: "https://pub.dev" + source: hosted + version: "3.3.0" + flutter_launcher_icons: + dependency: "direct dev" + description: + name: flutter_launcher_icons + sha256: "02dcaf49d405f652b7160e882bacfc02cb497041bb2eab2a49b1c393cf9aac12" + url: "https://pub.dev" + source: hosted + version: "0.12.0" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + sha256: "6ff9fa12892ae074092de2fa6a9938fb21dbabfdaa2ff57dc697ff912fc8d4b2" + url: "https://pub.dev" + source: hosted + version: "1.1.6" + flutter_switch: + dependency: "direct main" + description: + name: flutter_switch + sha256: b91477f926bba135d2d203d7b24367492662d8d9c3aa6adb960b14c1087d3c41 + url: "https://pub.dev" + source: hosted + version: "0.3.2" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + get: + dependency: "direct main" + description: + name: get + sha256: "2ba20a47c8f1f233bed775ba2dd0d3ac97b4cf32fc17731b3dfc672b06b0e92a" + url: "https://pub.dev" + source: hosted + version: "4.6.5" + http: + dependency: transitive + description: + name: http + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + url: "https://pub.dev" + source: hosted + version: "0.13.5" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + image: + dependency: transitive + description: + name: image + sha256: "483a389d6ccb292b570c31b3a193779b1b0178e7eb571986d9a49904b6861227" + url: "https://pub.dev" + source: hosted + version: "4.0.15" + intl: + dependency: "direct main" + description: + name: intl + sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + url: "https://pub.dev" + source: hosted + version: "0.17.0" + js: + dependency: transitive + description: + name: js + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" + source: hosted + version: "0.6.5" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 + url: "https://pub.dev" + source: hosted + version: "4.8.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" + source: hosted + version: "0.12.13" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" + source: hosted + version: "0.2.0" + meta: + dependency: transitive + description: + name: meta + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" + source: hosted + version: "1.8.0" + nm: + dependency: transitive + description: + name: nm + sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + octo_image: + dependency: transitive + description: + name: octo_image + sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + path: + dependency: transitive + description: + name: path + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" + source: hosted + version: "1.8.2" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_provider: + dependency: transitive + description: + name: path_provider + sha256: "04890b994ee89bfa80bf3080bfec40d5a92c5c7a785ebb02c13084a099d2b6f9" + url: "https://pub.dev" + source: hosted + version: "2.0.13" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: "7623b7d4be0f0f7d9a8b5ee6879fc13e4522d4c875ab86801dee4af32b54b83e" + url: "https://pub.dev" + source: hosted + version: "2.0.23" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: eec003594f19fe2456ea965ae36b3fc967bc5005f508890aafe31fa75e41d972 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: "525ad5e07622d19447ad740b1ed5070031f7a5437f44355ae915ff56e986429a" + url: "https://pub.dev" + source: hosted + version: "2.1.9" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec" + url: "https://pub.dev" + source: hosted + version: "2.0.6" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: "642ddf65fde5404f83267e8459ddb4556316d3ee6d511ed193357e25caa3632d" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + pedantic: + dependency: transitive + description: + name: pedantic + sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" + url: "https://pub.dev" + source: hosted + version: "5.1.0" + platform: + dependency: transitive + description: + name: platform + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + pointycastle: + dependency: transitive + description: + name: pointycastle + sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 + url: "https://pub.dev" + source: hosted + version: "3.6.2" + process: + dependency: transitive + description: + name: process + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + rxdart: + dependency: transitive + description: + name: rxdart + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + url: "https://pub.dev" + source: hosted + version: "0.27.7" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + sha256: ee6257848f822b8481691f20c3e6d2bfee2e9eccb2a3d249907fcfb198c55b41 + url: "https://pub.dev" + source: hosted + version: "2.0.18" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: a51a4f9375097f94df1c6e0a49c0374440d31ab026b59d58a7e7660675879db4 + url: "https://pub.dev" + source: hosted + version: "2.0.16" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "6b84fdf06b32bb336f972d373cd38b63734f3461ba56ac2ba01b56d052796259" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: d7fb71e6e20cd3dfffcc823a28da3539b392e53ed5fc5c2b90b55fdaa8a7e8fa + url: "https://pub.dev" + source: hosted + version: "2.1.4" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + sha256: "824bfd02713e37603b2bdade0842e47d56e7db32b1dcdd1cae533fb88e2913fc" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + sha256: "6737b757e49ba93de2a233df229d0b6a87728cea1684da828cbc718b65dcf9d7" + url: "https://pub.dev" + source: hosted + version: "2.0.5" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: bd014168e8484837c39ef21065b78f305810ceabc1d4f90be6e3b392ce81b46d + url: "https://pub.dev" + source: hosted + version: "2.1.4" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" + source: hosted + version: "1.9.1" + sqflite: + dependency: transitive + description: + name: sqflite + sha256: "851d5040552cf911f4cabda08d003eca76b27da3ed0002978272e27c8fbf8ecc" + url: "https://pub.dev" + source: hosted + version: "2.2.5" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + sha256: bfd6973aaeeb93475bc0d875ac9aefddf7965ef22ce09790eb963992ffc5183f + url: "https://pub.dev" + source: hosted + version: "2.4.2+2" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" + source: hosted + version: "1.11.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "33b31b6beb98100bf9add464a36a8dd03eb10c7a8cf15aeec535e9b054aaf04b" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" + source: hosted + version: "0.4.16" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + uuid: + dependency: transitive + description: + name: uuid + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + url: "https://pub.dev" + source: hosted + version: "3.0.7" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + win32: + dependency: transitive + description: + name: win32 + sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46 + url: "https://pub.dev" + source: hosted + version: "3.1.3" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + xml: + dependency: transitive + description: + name: xml + sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5" + url: "https://pub.dev" + source: hosted + version: "6.2.2" + yaml: + dependency: transitive + description: + name: yaml + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + url: "https://pub.dev" + source: hosted + version: "3.1.1" +sdks: + dart: ">=2.18.0 <3.0.0" + flutter: ">=3.3.0" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..97335f8 --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,39 @@ +name: michele_s_application8 +description: A new Flutter project. +version: 1.0.0+1 +environment: + sdk: '>=2.12.0 <3.0.0' +dependencies: + flutter: + sdk: flutter + get: ^4.6.5 + connectivity_plus: ^2.3.6 + shared_preferences: ^2.0.15 + cached_network_image: ^3.2.1 + flutter_svg: ^1.1.6 + flutter_switch: ^0.3.2 + intl: ^0.17.0 + file: ^6.1.4 +dev_dependencies: + flutter_test: + sdk: flutter + flutter_launcher_icons: "^0.12.0" +flutter: + uses-material-design: true + assets: + - assets/ + - assets/images/ + fonts: + - family: Roboto + fonts: + - asset: assets/fonts/RobotoRomanMedium.ttf + weight: 500 + - asset: assets/fonts/RobotoRomanRegular.ttf + weight: 400 + - asset: assets/fonts/RobotoRomanLight.ttf + weight: 300 +flutter_icons: + android: true + ios: true + image_path: "assets/images/logo_a_fa.png" + diff --git a/test/widget_test.dart b/test/widget_test.dart new file mode 100644 index 0000000..ddaaa8c --- /dev/null +++ b/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility that Flutter provides. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:michele_s_application8/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(MyApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +}