From dca7377e73156234d023d84db72f840d86c05ba4 Mon Sep 17 00:00:00 2001 From: jordyhers Date: Tue, 30 May 2023 14:55:05 +0200 Subject: [PATCH] #23 fix: add android files to project --- .gitignore | 3 +- android/.gitignore | 12 + android/app/build.gradle | 75 ++++ android/app/google-services.json | 108 +++++ android/app/local.properties | 8 + android/app/src/debug/AndroidManifest.xml | 7 + android/app/src/main/AndroidManifest.xml | 90 ++++ .../src/main/ic_parent_control-playstore.png | Bin 0 -> 18291 bytes .../hershel/parental_control/MainActivity.kt | 6 + .../main/res/drawable/launch_background.xml | 13 + .../src/main/res/drawable/parental_launch.png | Bin 0 -> 4033 bytes .../mipmap-anydpi-v26/ic_parent_control.xml | 5 + .../ic_parent_control_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../res/mipmap-hdpi/ic_parent_control.png | Bin 0 -> 2268 bytes .../ic_parent_control_foreground.png | Bin 0 -> 2507 bytes .../mipmap-hdpi/ic_parent_control_round.png | Bin 0 -> 4343 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../res/mipmap-mdpi/ic_parent_control.png | Bin 0 -> 1484 bytes .../ic_parent_control_foreground.png | Bin 0 -> 1512 bytes .../mipmap-mdpi/ic_parent_control_round.png | Bin 0 -> 2725 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../res/mipmap-xhdpi/ic_parent_control.png | Bin 0 -> 2747 bytes .../ic_parent_control_foreground.png | Bin 0 -> 3325 bytes .../mipmap-xhdpi/ic_parent_control_round.png | Bin 0 -> 5751 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../res/mipmap-xxhdpi/ic_parent_control.png | Bin 0 -> 4489 bytes .../ic_parent_control_foreground.png | Bin 0 -> 5313 bytes .../mipmap-xxhdpi/ic_parent_control_round.png | Bin 0 -> 8967 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../res/mipmap-xxxhdpi/ic_parent_control.png | Bin 0 -> 6547 bytes .../ic_parent_control_foreground.png | Bin 0 -> 7160 bytes .../ic_parent_control_round.png | Bin 0 -> 13609 bytes android/app/src/main/res/values/colors.xml | 4 + .../values/ic_parent_control_background.xml | 4 + android/app/src/main/res/values/strings.xml | 6 + android/app/src/main/res/values/styles.xml | 18 + android/app/src/profile/AndroidManifest.xml | 7 + android/build.gradle | 32 ++ android/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.properties | 6 + android/settings.gradle | 11 + android/settings_aar.gradle | 1 + lib/app/config/geo_location.dart | 36 +- lib/app/pages/notification_page.dart | 3 +- lib/app/pages/parent_page.dart | 384 ++++++++---------- lib/app/pages/setting_page.dart | 17 +- lib/app/splash/splash_content.dart | 30 +- lib/app/splash/splash_screen.dart | 3 +- lib/common_widgets/autosize_text.dart | 23 ++ lib/common_widgets/child_horizontal_view.dart | 12 +- lib/common_widgets/feature_widget.dart | 55 +++ lib/common_widgets/form_submit_button.dart | 8 +- lib/common_widgets/loading_map.dart | 15 + lib/main.dart | 3 +- .../email_sign_in_form_bloc_based.dart | 5 +- lib/sign_in/sign_in_button.dart | 3 +- lib/sign_in/sign_in_page.dart | 3 +- lib/theme/theme.dart | 137 +++++-- pubspec.lock | 8 + pubspec.yaml | 1 + 61 files changed, 847 insertions(+), 324 deletions(-) create mode 100644 android/.gitignore create mode 100644 android/app/build.gradle create mode 100644 android/app/google-services.json create mode 100644 android/app/local.properties create mode 100644 android/app/src/debug/AndroidManifest.xml create mode 100644 android/app/src/main/AndroidManifest.xml create mode 100644 android/app/src/main/ic_parent_control-playstore.png create mode 100644 android/app/src/main/kotlin/com/hershel/parental_control/MainActivity.kt create mode 100644 android/app/src/main/res/drawable/launch_background.xml create mode 100644 android/app/src/main/res/drawable/parental_launch.png create mode 100644 android/app/src/main/res/mipmap-anydpi-v26/ic_parent_control.xml create mode 100644 android/app/src/main/res/mipmap-anydpi-v26/ic_parent_control_round.xml create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_parent_control.png create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_parent_control_foreground.png create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_parent_control_round.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_parent_control.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_parent_control_foreground.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_parent_control_round.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_parent_control.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_parent_control_foreground.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_parent_control_round.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_parent_control.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_parent_control_foreground.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_parent_control_round.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_parent_control.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_parent_control_foreground.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_parent_control_round.png create mode 100644 android/app/src/main/res/values/colors.xml create mode 100644 android/app/src/main/res/values/ic_parent_control_background.xml create mode 100644 android/app/src/main/res/values/strings.xml create mode 100644 android/app/src/main/res/values/styles.xml create mode 100644 android/app/src/profile/AndroidManifest.xml create mode 100644 android/build.gradle create mode 100644 android/gradle.properties create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100644 android/settings.gradle create mode 100644 android/settings_aar.gradle create mode 100644 lib/common_widgets/autosize_text.dart create mode 100644 lib/common_widgets/feature_widget.dart create mode 100644 lib/common_widgets/loading_map.dart diff --git a/.gitignore b/.gitignore index d70ff3a..82f9a8e 100755 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ *.iws .idea/ + # The .vscode folder contains launch configuration and tasks you configure in # VS Code which you may wish to be included in version control, so this line # is commented out by default. @@ -31,7 +32,6 @@ .pub-cache/ .pub/ /build/ - # Web related lib/generated_plugin_registrant.dart @@ -40,3 +40,4 @@ app.*.symbols # Obfuscation related app.*.map.json +google-services.json diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..f4d8934 --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,12 @@ +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 +google-services.json \ No newline at end of file diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..74ef2d1 --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,75 @@ +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') +def GOOGLE_MAPS_API_KEY = localProperties.getProperty('GOOGLE_MAPS_API_KEY') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'com.google.gms.google-services' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + + +android { + compileSdkVersion 33 + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + // Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.hershel.parental_control" + minSdkVersion 29 + targetSdkVersion 33 + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + multiDexEnabled true + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + manifestPlaceholders = [GOOGLE_MAPS_API_KEY: GOOGLE_MAPS_API_KEY] + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + buildTypes { + release { + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation platform('com.google.firebase:firebase-bom:26.6.0') + implementation 'androidx.window:window:1.0.0' + implementation 'androidx.window:window-java:1.0.0' + +} diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 0000000..d2d26f6 --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,108 @@ +{ + "project_info": { + "project_number": "737237983254", + "project_id": "parental-control-100c8", + "storage_bucket": "parental-control-100c8.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:737237983254:android:55a33cd72d9eb27c0b5537", + "android_client_info": { + "package_name": "com.hershel.parental_admin_child" + } + }, + "oauth_client": [ + { + "client_id": "737237983254-v5rmcfvnaqg3j96uldvqjs5h41ts6vo1.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.hershel.parental_admin_child", + "certificate_hash": "749f39333bd4a3da6b47014840379d9efa283393" + } + }, + { + "client_id": "737237983254-n94tmj88u9rprss8dkshdbbpp1vok9u5.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDfXK1FiSSGZAC-HwReX4fEqrvbBEwAQeU" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "737237983254-n94tmj88u9rprss8dkshdbbpp1vok9u5.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:737237983254:android:5d81d3ade492188a0b5537", + "android_client_info": { + "package_name": "com.hershel.parental_control" + } + }, + "oauth_client": [ + { + "client_id": "737237983254-683he00o55lqf7dfit86cc0ei68nsg1k.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.hershel.parental_control", + "certificate_hash": "709516926153479881057f30a3cdf5577f5883d4" + } + }, + { + "client_id": "737237983254-fskmhe8j4fer38j5m69m0a7fafc7grmm.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.hershel.parental_control", + "certificate_hash": "f397cf064cbfc1cc234a79c0cffe2ffee4b08ff5" + } + }, + { + "client_id": "737237983254-gao9r1ftj3gueve68usl15ao7chm0im6.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.hershel.parental_control", + "certificate_hash": "684020f33706172c249d021dfa363897dca000ca" + } + }, + { + "client_id": "737237983254-kn2dt82baios4pdaekn7uvu8t442r0vn.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.hershel.parental_control", + "certificate_hash": "749f39333bd4a3da6b47014840379d9efa283393" + } + }, + { + "client_id": "737237983254-n94tmj88u9rprss8dkshdbbpp1vok9u5.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDfXK1FiSSGZAC-HwReX4fEqrvbBEwAQeU" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "737237983254-n94tmj88u9rprss8dkshdbbpp1vok9u5.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/local.properties b/android/app/local.properties new file mode 100644 index 0000000..3a0e592 --- /dev/null +++ b/android/app/local.properties @@ -0,0 +1,8 @@ +## This file must *NOT* be checked into Version Control Systems, +# as it contains information specific to your local configuration. +# +# Location of the SDK. This is only used by Gradle. +# For customization when using a Version Control System, please read the +# header note. +#Wed Mar 10 15:11:59 EET 2021 +sdk.dir=C\:\\Users\\jordy\\AppData\\Local\\Android\\Sdk diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..2d35de1 --- /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..0749612 --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/ic_parent_control-playstore.png b/android/app/src/main/ic_parent_control-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..c68f9e1607ab9e0f093884f2a8ec765e9e197635 GIT binary patch literal 18291 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≦{ZFhX_nK09Gzc42hnjc@rh@Z4hqcTM*$7IiI^8|Kd>*g^8%;&bv= zEZ^bVZnh3OVq)^`aoi=qJYyLV6}0Nw2h$q6h{&Q9X8P4n9Ax6c7tEYB;X7(zVJbK9gOi(&M)88Qhh? zfO^FRaDLO(Ul=%Owa=qWGP5Q1nx#`e1@Aw~4JHMKt`TEpIh8b`hIbi&1@V#3@-c#g zmr|K@ViAX1{*vXCr1k@?hlv5DW&xqLf({DzN4Gy$l)_{>B4E8NldlTzbPVSv>vtY6 zrzYz+);SM7cTR1rbUdGMm@{{-QRtz6DnL0d-&j&r?ndx0?KT^p?h~KYty_D2-&(B3 z*<&$6->Gpg@)3|q_CNpO)dJ2+IYuqz|(&IeO5+%2sX?%v{m5y z3D9Q43z&Ry>d~scwy}#lg_ruvhv$=hcY8F@WhYOYH&re~9Zg@koI+fpqX@}+wfI3t zPuou^yBx8iFsalmt7<`fczELUd42To)Q)Cd*n3mOw~|ROrsdf7slvEU0u%q~Y8u#z z9bTPBUF!T$sZ@N4-kE~--NO%*GlHG6Wfs1;*eIDb=SnyE@wlXau00B#sFenZb-iQY z>=6yxxK}VU@y8&W)K`e4eS54|ys(lk3~{ehNKH%JThk_b^8_1M-L~X;?ga7MDr$DA z!}ataQFTkgetGn(`2IsR%{s(;L&Y-jq+4uqSj365J-BERCI3YKuIbtE4$~=GL zX{7eb)62VBixwd|^)hBECy~`5WXED`M(T9q__v4RacDYiJ0{dEYVAh#llHbBGBnk! z0u~UVCg<~}nkQ5yO22LS?`Qhw&E(+fw7(TDv~0Op_J5GB*}Gev3XEXwaHte-K{ zd=9?QMXr#d?taftgJgWNT>IYiI=z8|-TO?9IaSf>y%#3B zAp-V)i>R=@_a)49R!gh*kd_))HOZN7(@Ml~EV;i0rcz(6(|V~pDPXU5^2I10r=RD9W+s24s*vw~qx+(5uw>)Aw2{qbtDj`AGKog>b+p~#X9Vl} zRprXB&ABG#;58z`>EiPoIZwB%FOoyqC?Jgz4TgMzCl)5BB|E{4h{#Wp1k<{2= zskK=aK{bLkku&KIksRUh!+R~Y{Ul|n%QeoCH{2-uqemf~G?zmwr7rvGBz_QX)OHNb zfACIm4UIi0B%t*Wjc&JghJZm*ZJ;3+=fszoEa}sW!MvJ*uK@00`r=W1LhXp98 zA%yMj-J%daOoQQJLXjz;-){(1Y8|A5;OoFN@I)Cj4^XxQCDRm)lLGm{4#@oC6BT#JqkRRPC9^|c^4=sW}Y_%!sHR8 z5Fx#;UIStGEZ&jWU7>(FRV=+qU!R_?yGm=?D=(ZB{+X)yce#-GF%TTUW* zB-i|0_4l(*CMJmp7+CQpMnlR`cShKJjjY1|+ZE{Go5`7JU}&LsKw zlp~Mr?=>&{RF*+{t_J?(*SF+KoDf?W<~!Z9c@APLKLqDOsW?5V<&~Q-;@17I(t8Hw zqb4+80!zbMkh`BQPCUZqE>J%Rc__Rfl1#3(Y~8dXF_Fi0cJ`Y zLMk-|?Fya9wqq`(G8sLa(Xtyf9K1TVUQR2#C8K(Bza*{P?RMV0#g#B}z1ar|@s#~n z{RP!wxzWRDNO6cuv9uUCq$Lo7X#d1wx(h~)>3V<3Fku`*hsHz@mB`?9b&VTBIcok_ z8~TyiYE~ zEPLx_N=Q?&1uyT0^2rj5`c<-VD80HWJ|R0Z%CUc4g0S2I#bAD5ZvaO5!P~Dd%`4Zr zQt+b}(JR*?l15hyCa>DuC&tO0+iN!R+MZdcwPx*4hmzlHVMQRSru!}As<yx7lh?3MOs1XH0@gz_i3d+KLzlRE0ytZGd-URei73PTn` z&WiZAMS=xfbqdq(Sx^7Iwx0jkm@JZ$z1IF#MP)5uBI)xHR2bAoq)lNR)Mk-qF-;76 z3e~CTwhwb=3Jh8}W6?scV2`?w(sq9HK0H1Vi9kjMz6cw7!z%nc?~1Jq+8c$I2W zk}w_m)o~)Vz|>iD3Dqhe7`FCkgW+!O3HH}YTH0r=}p}-R={3{PF(z`40&2Q}!k5s}k%{dHHsYx%+ zQT!zfVBiL&iKcfx4M-sTYBP)*8PtcSl^ugp-p^-KJOe*;SccuJLtgRRb>7vC1K+n(gtBo=-#w2Uc+HUR6KI$G zXsH6BMB~f7%=0?2;<@bfK7m>p*8BLthw%S|W7I1=bF8HsItP*0&NSSFRQlNGJv9iZ zgIF3+r2wQ{z-T`d|5qVQao(@@m!C>~(^XURl~Ii6d1@Fb$F-3eSwPGn^2_}@CJSf{_b^GiF{CJYij0_!nM&N?6 zFe(IPp>LWWOV#3ecOX_#fdAXw1kYOyVm3-0%Y0VwCo-2wl{O?O3pr{k7#dl0kk~>> z)9s9T?e`sBdVStALk)!KrmOTkZa$TK?v>nMYo|v!?b1)4<@8xBk!483f!dh6jPu@_ zB>(ioe1E;*N)W79?bI;EyQL^IfhyMQ@vBk-aDGv&x8|lX!a9syJ2mGg)LJ!evuF%G z5$fApXLoZqfE)lP5+>slQdlKWq0-h9;U#`&{WG+}K?tJwD9Ewh4+qL7;Pb!*s9t>V zCs57-2n;CEv$w4av(8GxMhCj**k5*Y6NuisM=_!l31oc5Zi8A%cB2Q-^r0k;Y%4K%9mRE`7bqfo3K%9iDoxyZHcW7<>l`;1@|uI|K)9? zC$OgUAwp1^Mr3}+pXv)!O)p{gwzS&U)2ADKLlf4y6WO7*!mChfj~|o%55XEd+eMv` zo5X_o+ma{!4qvx>>U?m6}SGecm z`}9#+)j7TAD$T*u>pXwWkPT=kfS_jziW|`r;Fqk-4aHK4_)f-Z_kpW-VwZ=Q8MCK( zY7R1U;!=nSC5kP;C!=XGA~wLi;wndL8O1z;irPQbsU!wqg>Emw`OoxkY)Pf(ihFG5 zfA#?Gl+y|#@IR5Ve7V%NLpDgK(0csF$BR4{%$rN^<-{Q~weIHNgf!rq&C72@FAi>D@843+%YA%e3~>p0Wx->NTZj{A`_`5{Th{{XEn=aKp6nQg((2 z?#T5jZ>1MnM}qFOuDfeApZ;qF)Tr#l$ij{qK8~p6#JKJT1}MC=h(WD37Q4A8DNYdT ztt_gio7D-dXcf~qDg?%%ellMtyndx^b>|JO@hhDIaoF5!A;|p*Uj)Apo?jc)M*gZ8 z1hV{*vG;1aIkx9r@u=+G1N76$<4xNWR|G>J7qxA)Af;(BZBX99$%IP(r?hwLO=z<; zC9U?AuNYG|iu#UXS2IbM14hHv_$a4TGg^!RioWFN-_w ze!k=~s3vl&=P7{_kkmZjd1{ozR|D2-LzQ#TR!12m^?*w)~pxK)e|N8TceyCSjOo9=` z#Bc&INz+7grJk+{FgIM0J-Lf!uwLu((75ctwm76kp%gM71f;zQuVK9_-vOf&p);3G z{iq<^cE29Yn|en>GYUUr*wB2M0l}LFEXpZ)-ck}R=J0`PP!d=TZz{~)VWk_264Li< zC)n9wTYQMN#>%<9hmV5C$X>AC?1K<;1XacbZ2oo*g}Y;|sA|fkk_?GL;nF)-aNKd( zZc+Kez3(Zv6dbT;FqxvR^*|ZQt}jFCDjWplbx{brod=R4x){bx^3T$Oo+2^PHKwQQu>|5nxs27G~C#q(2W4OuhuWvI24&T>ehK>?r9a0o6gDM1PnNU?w=JzQEvSXgK zGYv!RMnkvawz_dl`jg%0C7se4?$!29NRlIY*N0=O8BqREQ+9U)8y8sqPdG&Q_0ezL zw|t;Zsxx%O4U5hg!8P}SMV3oajK$Zo(d8%G(hm#}1-5p?X#W@{kmP)4{*)a$tu>dN zNBT7xwTj!-ICB{>JHBLSsV>$=x}#eYTfqj#4xDHY_*Dq&wWP|cvY4KR1f*@`BD_Nn;y={u zbdadq^AVGFoy8f25nj~;Ii<;Y3=bIp$WG*%pm76xgKH!@sK%{4ZE)ZnR}L*Opi*7G zi(jCP#l}l(NhE6hxgKS%^ex^|z`mJ}7@B_NdtJSLWNgp9X0O&|q`x3^;>Sb+WvJ8X zCZtg;fZVgI`|;K*Imfon+Z|iY7w0dNGPS7J7lyOf4F1H~l00ubJCQN%0+&7y+GIG(ZktL(fm+tq_w0@o*g<=a4I5 zRxI&YCfMokH^g%G!iqJfhM7ji{EI@5s=qq9t>Uj4!Z`7FJg*z6gzm8(%baiyL#FJj zpd}BtXEU55;FRpzLNo~MK6{&gyUJO_3Zd%Y5Ku0Fl9ZvjPv0WIlT%Qoi)qubt@nG9 zzpv&ib37sF?lIwrWtLHHp2Xm5;cNFlw0``Qr*6X@?>vt?zKvd{nVD;V5hgOpo?&B5 zdmH%8y~JbtzFcMN-MQq-@`h|mWohWZwadX|D87C2CHQrd5Ab~9TBv6MtaRGWUZ2}G zNH!14e#VR{4>#Gyk@v}wWT!Bjmch_`JBMKBza8|AYCoVRKXHnGwSn~}fP3e`XE>!= z_)7=knzkGrMt}+RoN_3W{2#{^{&P%LK7^8nJZSmfP&*|7RG%o&qb^cwi$Q}2n>WP% zHR@AlA4X3A9_Z2@$mS;>f?w{Iz>hNTQQHX(1S`Kdm~Cl4Tml8uR_NeQ59fagEJ_bb zj*ln=HUs6mmf)=brJjeAWJF0bplXkxDBYsafmb`2qGGpzA9Q^4tv}Wo#)NYC{h6yojTOW&K!n6nYQ1K2 zPz?UY<5~pkjW}3?;<663QhO?ca>Rsw%R54G%h35_=LgN~Ybo%7G696bsY2r;4LCKZ z`<}8I#Fp#-tg6)FKZ6&Sfu9J(6Nv03dn@SEzdNU}<-k!uhh$L@$p*YR0Ubp~ONUWH zkT|D=APnNX0?-^}8ZNAW&<&_k%r{Tj=RZk#K#qn&@xeWZP(2Zq!_=6O+c9yfuD}l( zAv%Qm0}a-AS_MBjqre|Hgs; zx?2Vg;N=G1v${bFOpEe-pZkG$Qz2mF2gJ+&43vkb|*Yg-+ZQ z5_T@3b8kVB%6|ZCX;Uidp8u;Vw-iuy0q^_3UCAMf!3W^(b;<|}wYCua@2z$xnNXK0 zEF4bDhpkl6V$MO4e^mg+;tkyU4xW}ou|Tr}hW)0LcK?aARt|{%JtF*L9t+T40b2%C zlc>KkmCM(pOe>ZC8!#F<7%RC2-VcGhB0~o<@Ahaiiy1T93ybup=sF}I8)x3SoiYm-Rgq1c z-BE3SGs8fQe!uZdiDL7L&OjyUx5sfG&8%O)d5fV5I=|mJKSwW) zzdD#AoM`I|xY2KnmTo0XRQC~sUy{yQr$mowZup->uPA{F9a4Su#IuT#7ZYvAplu|P)JYEc(HZN|BZr8?fJs^ms?^kSk|Y4E)r z^jVYVxP>cc8mwqC{1>sqcD*kyO~(X!>Ap$MA>dy$cpXfm$`Qk+M{MUlRYB*0(YD5M z%_fJ0MbGbzneA^r+~}{iqOB1)DHq_xHkT!qIdVVKfAPbwVZIlcoH$SUB@u463CPkX zvK%%;yYd>pR-{4BZ_;ecZ(1P`7S><#psD*E{qNoqexfP0IXT8zQ|^}Sjw#8EN@~c# zxjBbH&vygotkgJegG%7KrZX{}-DBNc0} zF1CI8GuvMg%wxlN6ad|W~{1d-IXQ$;SHQj7V95^y# zK4%H#R{wEPUaMpB+P<8XGbY=D`}z6q_;2r=ItJyReL0Uk8NdMXT&)k^aY z&S|M0X75Y=@M>**)ZkN%aImmZd0BeT)JlxhQ7t_e*!Em$ynA0a@;V_zkz5#!@?>J2 z42<=D4~^545uuW&govZrda)_ zvqmz!XRswxLL2|!EZZ^hiL%58>hkOx%;}t8PurQ*6sPb=E{rQrVV5V0&12nu+`r>q z1h-X+T^p4nPKP!bk}H!Z(v`fR37YYxp)?ukn(lrQ*2?1?;GY^6?RF++mPDHP!_MMp zcVB0I#IbsDPg!@k4;$Yd8&Qz0b9g}{(kXwas4H+EA9rEji}7geq1`_()Vf6277rut zD7sSjxY*5yT#{pUYrQzaTP%By&~-CLN)Fll6|sIz2x8w?uZ_)+A3q4{!*cI^%ZPQX z+)&1P_p>kTG&FY2E$=ikxk*aBVSU2O z>nfo!$E9pbEbvr+_ml2dDrKVGYSdWCiS*w_cd9)_bF0@oj_@>$sa|vnSDOCgySJ5& zR3wk@ZhCAlV2`6op?JOB46(gBpXg9jCPJ>xA)&FHc(=3nzCv=vqqaaY*#||S~jAS&g}t!zNn!W|GyU$`~Vc! z0F?4TUvTL4|Ky*S@KbL7e`%%v|DU=*yp(SsGaCv!H@8nwF;IAGaN)9UnU4L#{{!Xv B!NULm literal 0 HcmV?d00001 diff --git a/android/app/src/main/kotlin/com/hershel/parental_control/MainActivity.kt b/android/app/src/main/kotlin/com/hershel/parental_control/MainActivity.kt new file mode 100644 index 0000000..a43861c --- /dev/null +++ b/android/app/src/main/kotlin/com/hershel/parental_control/MainActivity.kt @@ -0,0 +1,6 @@ +package com.hershel.parental_control + +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..c326fc1 --- /dev/null +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/android/app/src/main/res/drawable/parental_launch.png b/android/app/src/main/res/drawable/parental_launch.png new file mode 100644 index 0000000000000000000000000000000000000000..669e381d6b5eaf0a77b0114f07d2bdc980d6aac8 GIT binary patch literal 4033 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 D + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_parent_control_round.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_parent_control_round.xml new file mode 100644 index 0000000..5802492 --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_parent_control_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file 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 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-hdpi/ic_parent_control.png b/android/app/src/main/res/mipmap-hdpi/ic_parent_control.png new file mode 100644 index 0000000000000000000000000000000000000000..5726c43b946bd59fc1791ebdf9785075b9a30a9e GIT binary patch literal 2268 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-mdpi/ic_parent_control_round.png b/android/app/src/main/res/mipmap-mdpi/ic_parent_control_round.png new file mode 100644 index 0000000000000000000000000000000000000000..ad8309f24c4b1acd9391525bd5ba3afcaa2ed44f GIT binary patch literal 2725 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_parent_control.png b/android/app/src/main/res/mipmap-xhdpi/ic_parent_control.png new file mode 100644 index 0000000000000000000000000000000000000000..c73744242dbe67dc44dac859aa1da4299d288e9b GIT binary patch literal 2747 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 GWBvzlpf)i8 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_parent_control_foreground.png b/android/app/src/main/res/mipmap-xhdpi/ic_parent_control_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..beef7e2c533502b07b09d53342174690de3cdda6 GIT binary patch literal 3325 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 PZw5zM+FDed!2$mVHDFtw literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_parent_control_round.png b/android/app/src/main/res/mipmap-xhdpi/ic_parent_control_round.png new file mode 100644 index 0000000000000000000000000000000000000000..5925b12670dd57901145f38b3c2e57b6a6003a3b GIT binary patch literal 5751 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 bxdRYX#^>oecCg$Jl(7_E!DY*(-~0a$iU%n- literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_parent_control.png b/android/app/src/main/res/mipmap-xxhdpi/ic_parent_control.png new file mode 100644 index 0000000000000000000000000000000000000000..abc215e53bd4a93faf406d459523c747b2f68f12 GIT binary patch literal 4489 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_parent_control.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_parent_control.png new file mode 100644 index 0000000000000000000000000000000000000000..e59709240ee46733ea5fce72d717655ab444b528 GIT binary patch literal 6547 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 Y``-0?El2-Ymizd#t^MiZlepji55`BpzW@LL literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_parent_control_round.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_parent_control_round.png new file mode 100644 index 0000000000000000000000000000000000000000..c627dd9fa6ac8402c70e1d953460d16bf97bfbd0 GIT binary patch literal 13609 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..27acd37 --- /dev/null +++ b/android/app/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #3A4EDC + \ No newline at end of file diff --git a/android/app/src/main/res/values/ic_parent_control_background.xml b/android/app/src/main/res/values/ic_parent_control_background.xml new file mode 100644 index 0000000..ef753de --- /dev/null +++ b/android/app/src/main/res/values/ic_parent_control_background.xml @@ -0,0 +1,4 @@ + + + #3A4EDC + \ No newline at end of file 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..cad47b6 --- /dev/null +++ b/android/app/src/main/res/values/strings.xml @@ -0,0 +1,6 @@ + + + Parental Control + 176011390810650 + fb176011390810650 + 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..2d35de1 --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..c5502d6 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,32 @@ +buildscript { + ext.kotlin_version = '1.8.10' + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.1.3' + classpath 'com.google.gms:google-services:4.3.15' + 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/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..a673820 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,4 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true +android.enableR8=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..752ce5b --- /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.3-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/android/settings_aar.gradle b/android/settings_aar.gradle new file mode 100644 index 0000000..e7b4def --- /dev/null +++ b/android/settings_aar.gradle @@ -0,0 +1 @@ +include ':app' diff --git a/lib/app/config/geo_location.dart b/lib/app/config/geo_location.dart index 5b3bdfa..40665c4 100644 --- a/lib/app/config/geo_location.dart +++ b/lib/app/config/geo_location.dart @@ -99,24 +99,24 @@ class _GeoState extends State { @override Widget build(BuildContext context) { return Container( - height: 250, - child: Center( - child: GoogleMap( - initialCameraPosition: CameraPosition( - target: LatLng(widget.initialPosition.latitude, - widget.initialPosition.longitude), - zoom: 15), - mapType: MapType.normal, - myLocationEnabled: true, - onMapCreated: (GoogleMapController controller) { - _controller.complete(controller); - setState(() { - markers[MarkerId(allMarkers.first.markerId.value)] = - allMarkers.first; - }); - }, - markers: Set.of(allMarkers), - ), + height: 300, + margin: EdgeInsets.all(10), + child: GoogleMap( + padding: EdgeInsets.all(10), + mapType: MapType.normal, + myLocationEnabled: true, + markers: Set.of(allMarkers), + initialCameraPosition: CameraPosition( + target: LatLng(widget.initialPosition.latitude, + widget.initialPosition.longitude), + zoom: 15), + onMapCreated: (GoogleMapController controller) { + _controller.complete(controller); + setState(() { + markers[MarkerId(allMarkers.first.markerId.value)] = + allMarkers.first; + }); + }, ), ); } diff --git a/lib/app/pages/notification_page.dart b/lib/app/pages/notification_page.dart index d6d210e..dcaf3dc 100644 --- a/lib/app/pages/notification_page.dart +++ b/lib/app/pages/notification_page.dart @@ -5,6 +5,7 @@ import 'package:parental_control/models/notification_model.dart'; import 'package:parental_control/services/auth.dart'; import 'package:parental_control/services/database.dart'; import 'package:parental_control/services/notification_service.dart'; +import 'package:parental_control/theme/theme.dart'; import 'package:provider/provider.dart'; import '../../common_widgets/show_exeption_alert.dart'; @@ -104,7 +105,7 @@ class _NotificationPageState extends State { }, direction: DismissDirection.endToStart, child: Card( - color: Colors.indigo, + color: CustomColors.indigoLight, child: Padding( padding: EdgeInsets.all(8.0), child: ListTile( diff --git a/lib/app/pages/parent_page.dart b/lib/app/pages/parent_page.dart index dcf3f82..4f36c0e 100644 --- a/lib/app/pages/parent_page.dart +++ b/lib/app/pages/parent_page.dart @@ -1,11 +1,15 @@ import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; +import 'package:parental_control/app/config/geo_full.dart'; +import 'package:parental_control/app/config/geo_location.dart'; import 'package:parental_control/app/pages/child_details_page.dart'; import 'package:parental_control/app/pages/edit_child_page.dart'; import 'package:parental_control/app/pages/notification_page.dart'; import 'package:parental_control/app/pages/setting_page.dart'; import 'package:parental_control/common_widgets/child_horizontal_view.dart'; import 'package:parental_control/common_widgets/empty_content.dart'; +import 'package:parental_control/common_widgets/feature_widget.dart'; +import 'package:parental_control/common_widgets/loading_map.dart'; import 'package:parental_control/models/child_model.dart'; import 'package:parental_control/services/auth.dart'; import 'package:parental_control/services/database.dart'; @@ -16,13 +20,8 @@ import 'package:parental_control/theme/theme.dart'; import 'package:provider/provider.dart'; import 'package:showcaseview/showcaseview.dart'; -import '../config/geo_full.dart'; -import '../config/geo_location.dart'; - enum MapScreenState { Full, Small } -//TODO:Display different commands Focus mode Cards etc - class ParentPage extends StatefulWidget { const ParentPage({Key? key, this.auth}) : super(key: key); @@ -35,8 +34,7 @@ class ParentPage extends StatefulWidget { _ParentPageState createState() => _ParentPageState(); } -class _ParentPageState extends State - with SingleTickerProviderStateMixin { +class _ParentPageState extends State with SingleTickerProviderStateMixin { late Geo geo; /// Variables @@ -73,9 +71,8 @@ class _ParentPageState extends State }); _isShowCaseActivated == false - ? WidgetsBinding.instance.addPostFrameCallback((_) => - ShowCaseWidget.of(context) - .startShowCase([_settingsKey, _childListKey, _addKey])) + ? WidgetsBinding.instance.addPostFrameCallback( + (_) => ShowCaseWidget.of(context).startShowCase([_settingsKey, _childListKey, _addKey])) : null; } @@ -86,14 +83,13 @@ class _ParentPageState extends State return mapScreenState == MapScreenState.Small ? Scaffold( - body: _buildParentPageContent(context, auth), + body: _buildParentPageContent(context, auth, database), floatingActionButton: Showcase( key: _addKey, textColor: Colors.indigo, description: 'Add a new child here ', child: FloatingActionButton( - onPressed: () => EditChildPage.show(context, - database: Provider.of(context, listen: false)), + onPressed: () => EditChildPage.show(context, database: Provider.of(context, listen: false)), child: const Icon(Icons.add), ), ), @@ -101,177 +97,137 @@ class _ParentPageState extends State : _buildMapFullScreen(database); } - Widget _buildParentPageContent(BuildContext context, AuthBase auth) { - final database = Provider.of(context, listen: false); - return Column( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Container( - height: MediaQuery.of(context).size.height * 0.20, - width: double.infinity, - decoration: BoxDecoration( - color: Colors.indigo, - borderRadius: BorderRadius.only( - bottomLeft: Radius.circular(20), - bottomRight: Radius.circular(20))), - padding: const EdgeInsets.only(top: 25.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.stretch, - mainAxisSize: MainAxisSize.max, - children: [ - Padding( - padding: - const EdgeInsets.symmetric(horizontal: 8.0, vertical: 8), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - const Text( - "Time's Up", - style: TextStyle( - fontWeight: FontWeight.w800, - color: Colors.white38, - fontSize: 22), - ), - OutlinedButton( - onPressed: () => SettingsPage.show(context, auth), - child: Showcase( - key: _settingsKey, - textColor: Colors.indigo, - description: 'change the settings here', - showArrow: true, - child: Icon( - Icons.settings, - color: Colors.white, - ), - ), - ) - ], - ), - ), - const SizedBox(height: 8), - Container( - margin: const EdgeInsets.symmetric(horizontal: 10), - height: 45, - decoration: BoxDecoration( - color: Colors.grey[300], - borderRadius: BorderRadius.circular( - 10.0, - ), + Widget _buildParentPageContent(BuildContext context, AuthBase auth, Database database) { + return NestedScrollView( + headerSliverBuilder: (context, value) { + return [ + SliverAppBar( + backgroundColor: CustomColors.indigoDark, + expandedHeight: MediaQuery.of(context).size.height * 0.12, + shape: ContinuousRectangleBorder( + borderRadius: BorderRadius.only(bottomLeft: Radius.circular(30), bottomRight: Radius.circular(30))), + title: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Time's Up", + style: TextStyle(fontWeight: FontWeight.w800, color: CustomColors.indigoLight, fontSize: 22), ), - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 6), - child: TabBar( - physics: BouncingScrollPhysics(), - controller: _tabController, - // give the indicator a decoration (color and border radius) - indicator: BoxDecoration( - borderRadius: BorderRadius.circular( - 10.0, - ), + OutlinedButton( + style: OutlinedButton.styleFrom(side: BorderSide.none), + onPressed: () => SettingsPage.show(context, auth), + child: Showcase( + key: _settingsKey, + textColor: Colors.indigo, + description: 'change the settings here', + showArrow: true, + child: Icon( + Icons.settings, color: Colors.white, ), + ), + ) + ], + ), + pinned: true, + floating: true, + bottom: TabBar( + indicatorPadding: EdgeInsets.all(4.0), + physics: BouncingScrollPhysics(), + controller: _tabController, + // give the indicator a decoration (color and border radius) + indicator: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + color: Colors.white, + ), - labelColor: Colors.indigo, - unselectedLabelColor: Colors.white, - tabs: [ - // first tab [you can add an icon using the icon property] - Tab( - text: 'Control', - ), + labelColor: Colors.indigo, + unselectedLabelColor: Colors.white, + tabs: [ + // first tab [you can add an icon using the icon property] + Tab( + text: 'Control', + ), - // second tab [you can add an icon using the icon property] - Tab( - text: 'Notifications', - ), - ], - ), + // second tab [you can add an icon using the icon property] + Tab( + text: 'Notifications', ), - ), - ], + ], + ), ), - ), - - /// Tab bar view here - Expanded( - child: TabBarView( - physics: NeverScrollableScrollPhysics(), - controller: _tabController, - children: [ - // first tab bar view widget - CustomScrollView( - physics: BouncingScrollPhysics(), - slivers: [ - SliverList( - delegate: SliverChildListDelegate( - [ - ListTile( - title: Text( - 'My Children', - style: TextStyle(color: Colors.indigo), - ), - subtitle: Text( - 'Choose child to get more infos ', - style: TextStyle(color: Colors.grey.shade400), + ]; + }, + body: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + /// Tab bar view here + Expanded( + child: TabBarView( + physics: NeverScrollableScrollPhysics(), + controller: _tabController, + children: [ + // first tab bar view widget + CustomScrollView( + physics: BouncingScrollPhysics(), + slivers: [ + SliverList( + delegate: SliverChildListDelegate( + [ + ListTile( + title: Text( + 'My Children', + style: TextStyle(color: Colors.indigo), + ), + subtitle: Text( + 'Choose child to get more infos - scroll right ', + style: TextStyle(color: Colors.grey.shade400), + ), + trailing: Icon( + Icons.info_outline_rounded, + color: Colors.deepOrangeAccent.shade100, + ), + ).p8, + SizedBox(height: 3), + _buildChildrenList(database), + _header(), + Container( + margin: EdgeInsets.all(4), + decoration: BoxDecoration( + borderRadius: const BorderRadius.all( + Radius.circular(10), + ), + color: Colors.black.withOpacity(0.14), + ), + child: GestureDetector( + onLongPress: () => setState(() { + mapScreenState = MapScreenState.Full; + }), + child: Consumer(builder: (_, position, __) { + return (position != null) ? Geo(position, database) : LoadingMap(); + }), + ), ), - trailing: Icon( - Icons.info_outline_rounded, - color: Colors.deepOrangeAccent.shade100, + const SizedBox(height: 8), + FeatureWidget( + title: '-- 00 h:00 min --', + icon: Icons.access_alarm, ), - ).p8, - Divider( - height: 5, - color: Colors.grey.withOpacity(0.1), - thickness: 3), - SizedBox(height: 3), - _buildChildrenList(database), - Divider( - height: 5, - color: Colors.grey.withOpacity(0.1), - thickness: 3), - _header(), - GestureDetector( - onLongPress: () { - setState(() { - mapScreenState = MapScreenState.Full; - }); - }, - child: - Consumer(builder: (_, position, __) { - return (position != null) - ? Geo(position, database) - : Container( - height: 250, - decoration: BoxDecoration( - borderRadius: const BorderRadius.all( - Radius.circular(16)), - color: Colors.black.withOpacity(0.14)), - ); - }), - ), - const SizedBox(height: 8), - const Padding( - padding: EdgeInsets.all(45.0), - child: EmptyContent(), - ), - ], + ], + ), ), - ), - ], - ), + ], + ), - /// Second tab bar view widget - /// - /// - Provider( - create: (_) => NotificationService(), - builder: (context, __) => - NotificationPage.create(context, widget.auth!), - ), - ], + Provider( + create: (_) => NotificationService(), + builder: (context, __) => NotificationPage.create(context, widget.auth!), + ), + ], + ), ), - ), - ], + ], + ), ); } @@ -281,50 +237,44 @@ class _ParentPageState extends State description: 'Tap on the child to display infos', key: _childListKey, child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(8)), - color: Colors.white), - //color: Colors.grey, - height: 160.0, - child: StreamBuilder>( - stream: database.childrenStream(), - builder: (context, AsyncSnapshot snapshot) { - final data = snapshot.data; - if (snapshot.hasData) { - if (data != null && data.isNotEmpty) { - return ListView.builder( - scrollDirection: Axis.horizontal, - itemCount: data.length, - itemBuilder: (context, index) { - return Kids( - image_location: data[index]?.image, - image_caption: data[index]?.name, - onPressed: () => - ChildDetailsPage.show(context, data[index]!)); - }, - ); - } else { - return EmptyContent(); - } - } else if (snapshot.hasError) { - print(snapshot.error); - return EmptyContent( - title: 'Something went wrong ', - message: 'Can\'t load items right now', + decoration: CustomDecoration.withShadowDecoration, + height: 160.0, + child: StreamBuilder>( + stream: database.childrenStream(), + builder: (context, AsyncSnapshot snapshot) { + final data = snapshot.data; + if (snapshot.hasData) { + if (data != null && data.isNotEmpty) { + return ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: data.length, + itemBuilder: (context, index) { + return Kids( + image_location: data[index]?.image, + image_caption: data[index]?.name, + onPressed: () => ChildDetailsPage.show(context, data[index]!)); + }, ); + } else { + return EmptyContent(); } - return ListView.builder( - scrollDirection: Axis.horizontal, - itemCount: 3, - itemBuilder: (context, index) { - return Kids( - image_location: null, - image_caption: null, - onPressed: null); - }, + } else if (snapshot.hasError) { + print(snapshot.error); + return EmptyContent( + title: 'Something went wrong ', + message: 'Can\'t load items right now', ); - }, - )), + } + return ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: 3, + itemBuilder: (context, index) { + return Kids(image_location: null, image_caption: null, onPressed: null); + }, + ); + }, + ), + ), ); } @@ -336,12 +286,12 @@ class _ParentPageState extends State padding: EdgeInsets.only(top: 20.0), child: Text( "Follow your child's location ", - style: TextStyle(color: Colors.indigo), + style: TextStyle(color: CustomColors.indigoLight), ), ), Text( 'Long Press the map to open the full screen mode', - style: TextStyle(color: Colors.grey.shade400), + style: TextStyle(color: CustomColors.greenPrimary), ), ], ).p16; @@ -350,9 +300,7 @@ class _ParentPageState extends State Widget _buildMapFullScreen(database) { return Scaffold( body: Consumer(builder: (_, position, __) { - return (position != null) - ? GeoFull(position, database) - : Center(child: CircularProgressIndicator()); + return (position != null) ? GeoFull(position, database) : Center(child: CircularProgressIndicator()); }), floatingActionButtonLocation: FloatingActionButtonLocation.startTop, floatingActionButton: FloatingActionButton( diff --git a/lib/app/pages/setting_page.dart b/lib/app/pages/setting_page.dart index 588f823..a603e90 100644 --- a/lib/app/pages/setting_page.dart +++ b/lib/app/pages/setting_page.dart @@ -5,14 +5,7 @@ import 'package:parental_control/services/auth.dart'; import 'package:parental_control/theme/theme.dart'; class SettingsPage extends StatelessWidget { - SettingsPage( - {Key? key, - this.title, - this.name, - this.email, - this.context, - required this.auth}) - : super(key: key); + SettingsPage({Key? key, this.title, this.name, this.email, this.context, required this.auth}) : super(key: key); final BuildContext? context; final AuthBase auth; final String? title; @@ -87,13 +80,8 @@ class SettingsPage extends StatelessWidget { return Scaffold( appBar: AppBar( title: Text('Settings'), - actions: [ - IconButton( - onPressed: () => confirmSignOut(context, auth), - icon: Icon(Icons.logout)) - ], + actions: [IconButton(onPressed: () => confirmSignOut(context, auth), icon: Icon(Icons.logout))], ), - backgroundColor: Theme.of(context).backgroundColor, body: Stack( children: [ Padding( @@ -169,6 +157,7 @@ class ProfileListItem extends StatelessWidget { Icon( LineAwesomeIcons.alternate_arrow_circle_right, size: 25, + color: CustomColors.greenPrimary, ), ], ), diff --git a/lib/app/splash/splash_content.dart b/lib/app/splash/splash_content.dart index 77caafb..c69cb76 100644 --- a/lib/app/splash/splash_content.dart +++ b/lib/app/splash/splash_content.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:parental_control/common_widgets/autosize_text.dart'; import 'package:parental_control/common_widgets/size_config.dart'; +import 'package:parental_control/theme/theme.dart'; class SplashContent extends StatelessWidget { const SplashContent({ @@ -22,31 +24,31 @@ class SplashContent extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - "Time's Up", + DisplayText( + text: "Time's Up", + fontSize: 35, style: TextStyle( - fontSize: getProportionateScreenWidth(25), - color: Colors.indigo.shade400, + color: CustomColors.indigoDark, fontWeight: FontWeight.w800, ), ), SizedBox(height: 8), - Text( - text, - style: TextStyle( - color: Colors.black.withOpacity(0.35), - fontSize: 11, - fontWeight: FontWeight.w500, - height: 1.5), - textAlign: TextAlign.left, + Container( + width: MediaQuery.of(context).size.width / 1.5, + child: DisplayText( + text: text, + style: TextStyle( + color: Colors.black.withOpacity(0.5), + fontWeight: FontWeight.w500, + height: 1.5), + ), ), ], ), ), - SizedBox(height: 8), Image.asset( image, - height: getProportionateScreenHeight(220), + height: getProportionateScreenHeight(150), width: getProportionateScreenWidth(135), ), ], diff --git a/lib/app/splash/splash_screen.dart b/lib/app/splash/splash_screen.dart index 8d66676..a8c87e7 100644 --- a/lib/app/splash/splash_screen.dart +++ b/lib/app/splash/splash_screen.dart @@ -58,6 +58,7 @@ class _SplashScreenState extends State { Expanded( flex: 3, child: PageView.builder( + physics: BouncingScrollPhysics(), onPageChanged: (value) { setState(() { currentPage = value; @@ -114,7 +115,7 @@ class _SplashScreenState extends State { style: ButtonStyle( backgroundColor: MaterialStateProperty.all( - Theme.of(context).primaryColor)), + CustomColors.greenPrimary)), onPressed: () { SharedPreference().setVisitingFlag(); SharedPreference().setChildDevice(); diff --git a/lib/common_widgets/autosize_text.dart b/lib/common_widgets/autosize_text.dart new file mode 100644 index 0000000..1555542 --- /dev/null +++ b/lib/common_widgets/autosize_text.dart @@ -0,0 +1,23 @@ +import 'package:auto_size_text/auto_size_text.dart'; +import 'package:flutter/material.dart'; + +class DisplayText extends StatelessWidget { + final String text; + final TextStyle style; + final double? fontSize; + + const DisplayText( + {Key? key, required this.text, required this.style, this.fontSize}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return AutoSizeText( + text, + style: style, + maxLines: 10, + minFontSize: fontSize ?? 10, + maxFontSize: fontSize ?? 21, + ); + } +} diff --git a/lib/common_widgets/child_horizontal_view.dart b/lib/common_widgets/child_horizontal_view.dart index 45c0052..6ccfef6 100644 --- a/lib/common_widgets/child_horizontal_view.dart +++ b/lib/common_widgets/child_horizontal_view.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:parental_control/theme/theme.dart'; class Kids extends StatelessWidget { final String? image_location; @@ -13,9 +14,10 @@ class Kids extends StatelessWidget { onTap: onPressed, child: image_location != null || image_caption != null ? Container( - padding: const EdgeInsets.symmetric(horizontal: 18), - height: 200, - width: 150.0, + margin: EdgeInsets.symmetric(vertical: 10), + padding: const EdgeInsets.symmetric(horizontal: 4), + height: 130, + width: 130.0, child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ @@ -34,8 +36,8 @@ class Kids extends StatelessWidget { child: Text( image_caption!, style: TextStyle( - color: Colors.black45, - fontSize: 16, + color: CustomColors.indigoLight, + fontSize: 17, fontWeight: FontWeight.w700), ), ), diff --git a/lib/common_widgets/feature_widget.dart b/lib/common_widgets/feature_widget.dart new file mode 100644 index 0000000..4baecbc --- /dev/null +++ b/lib/common_widgets/feature_widget.dart @@ -0,0 +1,55 @@ +import 'package:flutter/material.dart'; +import 'package:parental_control/theme/theme.dart'; + +class FeatureWidget extends StatelessWidget { + final String? title; + final Widget? child; + final IconData? icon; + + const FeatureWidget({Key? key, this.title, this.icon, this.child}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + height: MediaQuery.of(context).size.height * 0.07, + decoration: BoxDecoration( + color: CustomColors.indigoDark, + borderRadius: BorderRadius.all(Radius.circular(10)), + boxShadow: [ + BoxShadow( + color: CustomColors.indigoPrimary.withOpacity(0.5), + spreadRadius: 5, + blurRadius: 7, + offset: Offset(0, 3), // changes position of shadow + ), + ], + ), + padding: EdgeInsets.all(15.0), + margin: EdgeInsets.symmetric(horizontal: 85.0, vertical: 30), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + SizedBox(width: 10), + if (child != null) child ?? SizedBox.shrink(), + title != null + ? Text( + title!, + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w800, + color: CustomColors.indigoLight), + ) + : SizedBox.shrink(), + Spacer(), + if (icon != null) + Icon( + icon, + size: 22, + ), + SizedBox.shrink(), + ], + ), + ); + } +} diff --git a/lib/common_widgets/form_submit_button.dart b/lib/common_widgets/form_submit_button.dart index 06d01b0..2e68c6a 100644 --- a/lib/common_widgets/form_submit_button.dart +++ b/lib/common_widgets/form_submit_button.dart @@ -1,14 +1,16 @@ import 'package:flutter/material.dart'; +import 'package:parental_control/theme/theme.dart'; import 'custom_raised_button.dart'; class FormSubmitButton extends CustomRaisedButton { - FormSubmitButton({required String text, required VoidCallback onPressed}) + FormSubmitButton( + {required String text, required VoidCallback onPressed, Color? color}) : super( child: Text(text, style: TextStyle(color: Colors.white, fontSize: 20)), height: 44.0, - color: Colors.indigo, + color: color ?? CustomColors.indigoDark, borderRadius: 4.0, - onPressed: () => onPressed); + onPressed: onPressed); } diff --git a/lib/common_widgets/loading_map.dart b/lib/common_widgets/loading_map.dart new file mode 100644 index 0000000..bd1c3c6 --- /dev/null +++ b/lib/common_widgets/loading_map.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class LoadingMap extends StatelessWidget { + const LoadingMap({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + height: 250, + decoration: BoxDecoration( + borderRadius: const BorderRadius.all(Radius.circular(16)), + color: Colors.black.withOpacity(0.14)), + ); + } +} diff --git a/lib/main.dart b/lib/main.dart index 9fc8791..114b7eb 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -45,8 +45,7 @@ class _MyAppState extends State { debugShowCheckedModeBanner: false, title: 'Parental Control', theme: AppTheme.lightTheme, - darkTheme: AppTheme.DarkTheme, - themeMode: ThemeMode.system, + darkTheme: AppTheme.darkTheme, home: FutureBuilder( future: Future.wait([ geoService.getInitialLocation(), diff --git a/lib/sign_in/email_sign_in_form_bloc_based.dart b/lib/sign_in/email_sign_in_form_bloc_based.dart index 1e415a2..b006f11 100644 --- a/lib/sign_in/email_sign_in_form_bloc_based.dart +++ b/lib/sign_in/email_sign_in_form_bloc_based.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:parental_control/common_widgets/form_submit_button.dart'; import 'package:parental_control/common_widgets/show_exeption_alert.dart'; import 'package:parental_control/services/auth.dart'; +import 'package:parental_control/theme/theme.dart'; import 'package:provider/provider.dart'; import 'email_sign_in_bloc.dart'; @@ -24,7 +25,6 @@ class EmailSignInFormBlocBased extends StatefulWidget { ); } - ///_____________________________________________________________________________________ @override _EmailSignInFormBlocBasedState createState() => _EmailSignInFormBlocBasedState(); @@ -138,6 +138,7 @@ class _EmailSignInFormBlocBasedState extends State { onPressed: () => model.canSubmitRegister || model.canSubmitSignIn ? _submit(model) : null, + color: CustomColors.greenPrimary, text: model.primaryButtonText, ), SizedBox(height: 8.0), @@ -148,8 +149,6 @@ class _EmailSignInFormBlocBasedState extends State { ]; } - ///------------------------------ Widgets ------------------------------------------------- - Widget _buildEmailTextField(EmailSignInModel model) { return TextField( focusNode: _emailFocusNode, diff --git a/lib/sign_in/sign_in_button.dart b/lib/sign_in/sign_in_button.dart index 7354d91..c19a91e 100644 --- a/lib/sign_in/sign_in_button.dart +++ b/lib/sign_in/sign_in_button.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:parental_control/common_widgets/custom_raised_button.dart'; +import 'package:parental_control/theme/theme.dart'; class SignInButton extends CustomRaisedButton { SignInButton( @@ -13,6 +14,6 @@ class SignInButton extends CustomRaisedButton { text, style: TextStyle(color: textColor, fontSize: 15.0), ), - color: color ?? Colors.indigo, + color: color ?? CustomColors.indigoLight, onPressed: onPressed ?? () {}); } diff --git a/lib/sign_in/sign_in_page.dart b/lib/sign_in/sign_in_page.dart index 7070967..480cc98 100644 --- a/lib/sign_in/sign_in_page.dart +++ b/lib/sign_in/sign_in_page.dart @@ -6,6 +6,7 @@ import 'package:parental_control/services/auth.dart'; import 'package:parental_control/sign_in/sign_in_button.dart'; import 'package:parental_control/sign_in/sign_in_manager.dart'; import 'package:parental_control/sign_in/social_sign_in_button.dart'; +import 'package:parental_control/theme/theme.dart'; import 'package:provider/provider.dart'; import 'email_sign_in_page.dart'; @@ -98,7 +99,7 @@ class SignInPage extends StatelessWidget { Widget _buildContent(BuildContext context) { return Container( - decoration: BoxDecoration(color: Theme.of(context).backgroundColor), + decoration: BoxDecoration(color: CustomColors.indigoLight), child: Padding( padding: EdgeInsets.all(16.0), child: Column( diff --git a/lib/theme/theme.dart b/lib/theme/theme.dart index 4f7c333..9870058 100644 --- a/lib/theme/theme.dart +++ b/lib/theme/theme.dart @@ -1,33 +1,54 @@ import 'package:flutter/material.dart'; +class CustomColors { + static Color indigoPrimary = Color(0xFF283593); + static Color indigoDark = Color(0xFF1a237e); + static Color greenPrimary = Color(0xFF00C853); + static Color indigoLight = Color(0xFF9fa8da); +} + +class CustomDecoration { + static BoxDecoration withShadowDecoration = BoxDecoration( + color: CustomColors.indigoDark, + borderRadius: BorderRadius.all(Radius.circular(10)), + boxShadow: [ + BoxShadow( + color: CustomColors.indigoPrimary.withOpacity(0.5), + spreadRadius: 5, + blurRadius: 7, + offset: Offset(0, 3), // changes position of shadow + ), + ], + ); +} class AppTheme { const AppTheme(); static ThemeData lightTheme = ThemeData( - backgroundColor: Colors.white, - primarySwatch: Colors.indigo, - brightness: Brightness.light, - cardTheme: CardTheme(color: Colors.white), - textTheme: TextTheme(headline4: TextStyle(color: Colors.indigo)), - iconTheme: IconThemeData(color: Colors.indigo), - floatingActionButtonTheme: - FloatingActionButtonThemeData(backgroundColor: Colors.indigo), - bottomAppBarColor: Colors.indigo, - dividerColor: Colors.indigo, - primaryTextTheme: TextTheme(bodyText2: TextStyle(color: Colors.black))); - - static ThemeData DarkTheme = ThemeData( - backgroundColor: Colors.black, - primarySwatch: Colors.indigo, - brightness: Brightness.light, - cardTheme: CardTheme(color: Colors.white), - textTheme: TextTheme(headline4: TextStyle(color: Colors.indigo)), - iconTheme: IconThemeData(color: Colors.white), - floatingActionButtonTheme: - FloatingActionButtonThemeData(backgroundColor: Colors.indigo), - bottomAppBarColor: Colors.white, - dividerColor: Colors.grey.shade200, - primaryTextTheme: TextTheme(bodyText2: TextStyle(color: Colors.white))); + primarySwatch: buildMaterialColor(CustomColors.indigoDark), + primaryColor: CustomColors.indigoDark, + scaffoldBackgroundColor: Colors.white, + appBarTheme: AppBarTheme(backgroundColor: CustomColors.indigoDark), + brightness: Brightness.light, + cardTheme: CardTheme(color: Colors.white), + iconTheme: IconThemeData(color: Colors.indigo), + dividerColor: CustomColors.indigoDark, + floatingActionButtonTheme: FloatingActionButtonThemeData( + backgroundColor: CustomColors.greenPrimary, + foregroundColor: Colors.white), + ); + + static ThemeData darkTheme = ThemeData( + primarySwatch: buildMaterialColor(CustomColors.indigoDark), + primaryColor: CustomColors.indigoDark, + scaffoldBackgroundColor: Colors.white, + appBarTheme: AppBarTheme(backgroundColor: CustomColors.indigoDark), + brightness: Brightness.light, + cardTheme: CardTheme(color: Colors.white), + iconTheme: IconThemeData(color: CustomColors.indigoLight), + floatingActionButtonTheme: FloatingActionButtonThemeData( + backgroundColor: CustomColors.indigoLight), + ); static TextStyle h1Style = const TextStyle(fontSize: 24, fontWeight: FontWeight.bold); @@ -38,7 +59,6 @@ class AppTheme { static TextStyle h6Style = const TextStyle(fontSize: 14); } - extension PaddingHelper on Widget { Padding get p16 => Padding(padding: EdgeInsets.all(16), child: this); Padding get p8 => Padding(padding: EdgeInsets.only(top: 8), child: this); @@ -49,9 +69,12 @@ extension PaddingHelper on Widget { Padding(padding: EdgeInsets.all(value), child: this); /// Horizontal Padding 16 - Padding get hP4 => Padding(padding: EdgeInsets.symmetric(horizontal: 4), child: this); - Padding get hP8 => Padding(padding: EdgeInsets.symmetric(horizontal: 8), child: this); - Padding get hP16 => Padding(padding: EdgeInsets.symmetric(horizontal: 16), child: this); + Padding get hP4 => + Padding(padding: EdgeInsets.symmetric(horizontal: 4), child: this); + Padding get hP8 => + Padding(padding: EdgeInsets.symmetric(horizontal: 8), child: this); + Padding get hP16 => + Padding(padding: EdgeInsets.symmetric(horizontal: 16), child: this); /// Vertical Padding 16 Padding get vP16 => @@ -79,20 +102,50 @@ class FontSizes { } class TextStyles { - static TextStyle get title =>TextStyle(fontSize: FontSizes.title); - static TextStyle get titleM =>TextStyle(fontSize: FontSizes.titleM); - static TextStyle get titleSize15 => title.copyWith(fontWeight: FontWeight.w500,fontSize: 15); - static TextStyle get titleNormal => title.copyWith(fontWeight: FontWeight.w500,fontSize: FontSizes.titleSmall); - static TextStyle get titleMedium => titleM.copyWith(fontWeight: FontWeight.w300); - static TextStyle get h1Style => TextStyle(fontSize: FontSizes.sizeXXl, fontWeight: FontWeight.bold); - static TextStyle get h2Style => TextStyle(fontSize: FontSizes.sizeXl, fontWeight: FontWeight.bold,color: Colors.black); - static TextStyle get h3Large => TextStyle(fontSize: FontSizes.Large, fontWeight: FontWeight.bold,color: Colors.black); - static TextStyle get headTitleColored=> TextStyle(fontSize: FontSizes.sizeXl, fontWeight: FontWeight.bold,color: Colors.blueAccent); - static TextStyle get body => TextStyle(fontSize: FontSizes.body, fontWeight: FontWeight.w300); + static TextStyle get title => TextStyle(fontSize: FontSizes.title); + static TextStyle get titleM => TextStyle(fontSize: FontSizes.titleM); + static TextStyle get titleSize15 => + title.copyWith(fontWeight: FontWeight.w500, fontSize: 15); + static TextStyle get titleNormal => title.copyWith( + fontWeight: FontWeight.w500, fontSize: FontSizes.titleSmall); + static TextStyle get titleMedium => + titleM.copyWith(fontWeight: FontWeight.w300); + static TextStyle get h1Style => + TextStyle(fontSize: FontSizes.sizeXXl, fontWeight: FontWeight.bold); + static TextStyle get h2Style => TextStyle( + fontSize: FontSizes.sizeXl, + fontWeight: FontWeight.bold, + color: Colors.black); + static TextStyle get h3Large => TextStyle( + fontSize: FontSizes.Large, + fontWeight: FontWeight.bold, + color: Colors.black); + static TextStyle get headTitleColored => TextStyle( + fontSize: FontSizes.sizeXl, + fontWeight: FontWeight.bold, + color: Colors.blueAccent); + static TextStyle get body => + TextStyle(fontSize: FontSizes.body, fontWeight: FontWeight.w300); static TextStyle get bodySm => body.copyWith(fontSize: FontSizes.bodySm); } - - - - +// This Function creates a material color from HEX color value +MaterialColor buildMaterialColor(Color color) { + List strengths = [.05]; + Map swatch = {}; + final int r = color.red, g = color.green, b = color.blue; + + for (int i = 1; i < 10; i++) { + strengths.add(0.1 * i); + } + strengths.forEach((strength) { + final double ds = 0.5 - strength; + swatch[(strength * 1000).round()] = Color.fromRGBO( + r + ((ds < 0 ? r : (255 - r)) * ds).round(), + g + ((ds < 0 ? g : (255 - g)) * ds).round(), + b + ((ds < 0 ? b : (255 - b)) * ds).round(), + 1, + ); + }); + return MaterialColor(color.value, swatch); +} diff --git a/pubspec.lock b/pubspec.lock index d818dc4..27fa0e0 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -49,6 +49,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.10.0" + auto_size_text: + dependency: "direct main" + description: + name: auto_size_text + sha256: "3f5261cd3fb5f2a9ab4e2fc3fba84fd9fcaac8821f20a1d4e71f557521b22599" + url: "https://pub.dev" + source: hosted + version: "3.0.0" bloc: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index db698e3..aa69e58 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -48,6 +48,7 @@ dependencies: flutter_bloc: ^8.0.1 mockito: ^5.0.0 flutter_local_notifications: ^14.0.0-dev.2 + auto_size_text: ^3.0.0 test: any