From efe0fa828d93cfe92af5a2718aa79c9c264fa4e3 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Fri, 14 Aug 2020 18:45:13 +0530 Subject: [PATCH] adding files --- .gitignore | 44 ++ .metadata | 10 + README.md | 16 + android/.gitignore | 11 + android/app/build.gradle | 68 +++ android/app/google-services.json | 40 ++ android/app/src/debug/AndroidManifest.xml | 7 + android/app/src/main/AndroidManifest.xml | 31 ++ .../com/example/hashigen/MainActivity.kt | 6 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes 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 + fonts/Gilroy-Medium.ttf | Bin 0 -> 143724 bytes ios/.gitignore | 32 ++ ios/Flutter/AppFrameworkInfo.plist | 26 + ios/Flutter/Debug.xcconfig | 1 + ios/Flutter/Release.xcconfig | 1 + ios/Runner.xcodeproj/project.pbxproj | 495 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 91 ++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + ios/Runner/Base.lproj/LaunchScreen.storyboard | 37 ++ ios/Runner/Base.lproj/Main.storyboard | 26 + ios/Runner/Info.plist | 45 ++ ios/Runner/Runner-Bridging-Header.h | 1 + lib/bloc/homepage_bloc.dart | 100 ++++ lib/bloc/homepage_event.dart | 26 + lib/bloc/homepage_state.dart | 43 ++ lib/frontend/homePage.dart | 202 +++++++ lib/main.dart | 15 + lib/repository/getHashTags.dart | 53 ++ lib/widgets/greeting.dart | 24 + lib/widgets/loading.dart | 13 + lib/widgets/showTags.dart | 140 +++++ pubspec.lock | 259 +++++++++ pubspec.yaml | 82 +++ test/widget_test.dart | 30 ++ 73 files changed, 2275 insertions(+) create mode 100644 .gitignore create mode 100644 .metadata create mode 100644 README.md 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/src/debug/AndroidManifest.xml create mode 100644 android/app/src/main/AndroidManifest.xml create mode 100644 android/app/src/main/kotlin/com/example/hashigen/MainActivity.kt create mode 100644 android/app/src/main/res/drawable/launch_background.xml create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png 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 fonts/Gilroy-Medium.ttf create mode 100644 ios/.gitignore create mode 100644 ios/Flutter/AppFrameworkInfo.plist create mode 100644 ios/Flutter/Debug.xcconfig create mode 100644 ios/Flutter/Release.xcconfig create mode 100644 ios/Runner.xcodeproj/project.pbxproj create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ios/Runner/AppDelegate.swift create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 ios/Runner/Base.lproj/Main.storyboard create mode 100644 ios/Runner/Info.plist create mode 100644 ios/Runner/Runner-Bridging-Header.h create mode 100644 lib/bloc/homepage_bloc.dart create mode 100644 lib/bloc/homepage_event.dart create mode 100644 lib/bloc/homepage_state.dart create mode 100644 lib/frontend/homePage.dart create mode 100644 lib/main.dart create mode 100644 lib/repository/getHashTags.dart create mode 100644 lib/widgets/greeting.dart create mode 100644 lib/widgets/loading.dart create mode 100644 lib/widgets/showTags.dart create mode 100644 pubspec.lock create mode 100644 pubspec.yaml create mode 100644 test/widget_test.dart diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f3c2053 --- /dev/null +++ b/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.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. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Exceptions to above rules. +!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages diff --git a/.metadata b/.metadata new file mode 100644 index 0000000..443a1a5 --- /dev/null +++ b/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: 2ae34518b87dd891355ed6c6ea8cb68c4d52bb9d + channel: stable + +project_type: app diff --git a/README.md b/README.md new file mode 100644 index 0000000..3666787 --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# hashigen + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) + +For help getting started with Flutter, view our +[online documentation](https://flutter.dev/docs), which offers tutorials, +samples, guidance on mobile development, and a full API reference. 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..b6f28ea --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,68 @@ +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 plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" +apply plugin: 'com.google.gms.google-services' + +android { + compileSdkVersion 28 + + 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.example.hashigen" + minSdkVersion 16 + targetSdkVersion 28 + 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 'com.google.mlkit:image-labeling:16.2.0' + implementation 'com.google.firebase:firebase-analytics:17.2.2' + api 'com.google.firebase:firebase-ml-vision-image-label-model:17.0.2' + +} diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 0000000..c4c83a4 --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,40 @@ +{ + "project_info": { + "project_number": "1017725241736", + "firebase_url": "https://hashtaggen-b5ae5.firebaseio.com", + "project_id": "hashtaggen-b5ae5", + "storage_bucket": "hashtaggen-b5ae5.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:1017725241736:android:303a6ae099d79f0812523d", + "android_client_info": { + "package_name": "com.example.hashigen" + } + }, + "oauth_client": [ + { + "client_id": "1017725241736-m8cltbf526m3te24d9joeg909gnsl8b3.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyD7ItCisrvq5CGpo5Y9DKyyU_mNjfbW6d4" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "1017725241736-m8cltbf526m3te24d9joeg909gnsl8b3.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..d0011f4 --- /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..566ceae --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/kotlin/com/example/hashigen/MainActivity.kt b/android/app/src/main/kotlin/com/example/hashigen/MainActivity.kt new file mode 100644 index 0000000..76ca7bd --- /dev/null +++ b/android/app/src/main/kotlin/com/example/hashigen/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.hashigen + +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 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-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 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ 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-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 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..d0011f4 --- /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..4273368 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,32 @@ +buildscript { + ext.kotlin_version = '1.3.50' + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.5.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'com.google.gms:google-services:4.3.3' + } +} + +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..38c8d45 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,4 @@ +org.gradle.jvmargs=-Xmx1536M +android.enableR8=true +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..296b146 --- /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-5.6.2-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/fonts/Gilroy-Medium.ttf b/fonts/Gilroy-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..06d6a9431cc38c7695aa9d8316e41641c151c283 GIT binary patch literal 143724 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 literal 0 HcmV?d00001 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..6b4c0f7 --- /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 + 8.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..10d7e7d --- /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 = 8.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.example.hashigen; + 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 = 8.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 = 8.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.example.hashigen; + 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.example.hashigen; + 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..d36b1fa --- /dev/null +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} 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 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f091b6b0bca859a3f474b03065bef75ba58a9e4c GIT binary patch literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d0ef06e7edb86cdfe0d15b4b0d98334a86163658 GIT binary patch literal 1716 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c8f9ed8f5cee1c98386d13b17e89f719e83555b2 GIT binary patch literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..75b2d164a5a98e212cca15ea7bf2ab5de5108680 GIT binary patch literal 3831 zcmVjJBgitF5mAp-i>4+KS_oR{|13AP->1TD4=w)g|)JHOx|a2Wk1Va z!k)vP$UcQ#mdj%wNQoaJ!w>jv_6&JPyutpQps?s5dmDQ>`%?Bvj>o<%kYG!YW6H-z zu`g$@mp`;qDR!51QaS}|ZToSuAGcJ7$2HF0z`ln4t!#Yg46>;vGG9N9{V@9z#}6v* zfP?}r6b{*-C*)(S>NECI_E~{QYzN5SXRmVnP<=gzP+_Sp(Aza_hKlZ{C1D&l*(7IKXxQC1Z9#6wx}YrGcn~g%;icdw>T0Rf^w0{ z$_wn1J+C0@!jCV<%Go5LA45e{5gY9PvZp8uM$=1}XDI+9m7!A95L>q>>oe0$nC->i zeexUIvq%Uk<-$>DiDb?!In)lAmtuMWxvWlk`2>4lNuhSsjAf2*2tjT`y;@d}($o)S zn(+W&hJ1p0xy@oxP%AM15->wPLp{H!k)BdBD$toBpJh+crWdsNV)qsHaqLg2_s|Ih z`8E9z{E3sA!}5aKu?T!#enD(wLw?IT?k-yWVHZ8Akz4k5(TZJN^zZgm&zM28sfTD2BYJ|Fde3Xzh;;S` z=GXTnY4Xc)8nYoz6&vF;P7{xRF-{|2Xs5>a5)@BrnQ}I(_x7Cgpx#5&Td^4Q9_FnQ zX5so*;#8-J8#c$OlA&JyPp$LKUhC~-e~Ij!L%uSMu!-VZG7Hx-L{m2DVR2i=GR(_% zCVD!4N`I)&Q5S`?P&fQZ=4#Dgt_v2-DzkT}K(9gF0L(owe-Id$Rc2qZVLqI_M_DyO z9@LC#U28_LU{;wGZ&))}0R2P4MhajKCd^K#D+JJ&JIXZ_p#@+7J9A&P<0kdRujtQ_ zOy>3=C$kgi6$0pW06KaLz!21oOryKM3ZUOWqppndxfH}QpgjEJ`j7Tzn5bk6K&@RA?vl##y z$?V~1E(!wB5rH`>3nc&@)|#<1dN2cMzzm=PGhQ|Yppne(C-Vlt450IXc`J4R0W@I7 zd1e5uW6juvO%ni(WX7BsKx3MLngO7rHO;^R5I~0^nE^9^E_eYLgiR9&KnJ)pBbfno zSVnW$0R+&6jOOsZ82}nJ126+c|%svPo;TeUku<2G7%?$oft zyaO;tVo}(W)VsTUhq^XmFi#2z%-W9a{7mXn{uzivYQ_d6b7VJG{77naW(vHt-uhnY zVN#d!JTqVh(7r-lhtXVU6o})aZbDt_;&wJVGl2FKYFBFpU-#9U)z#(A%=IVnqytR$SY-sO( z($oNE09{D^@OuYPz&w~?9>Fl5`g9u&ecFGhqX=^#fmR=we0CJw+5xna*@oHnkahk+ z9aWeE3v|An+O5%?4fA&$Fgu~H_YmqR!yIU!bFCk4!#pAj%(lI(A5n)n@Id#M)O9Yx zJU9oKy{sRAIV3=5>(s8n{8ryJ!;ho}%pn6hZKTKbqk=&m=f*UnK$zW3YQP*)pw$O* zIfLA^!-bmBl6%d_n$#tP8Zd_(XdA*z*WH|E_yILwjtI~;jK#v-6jMl^?<%Y%`gvpwv&cFb$||^v4D&V=aNy?NGo620jL3VZnA%s zH~I|qPzB~e(;p;b^gJr7Ure#7?8%F0m4vzzPy^^(q4q1OdthF}Fi*RmVZN1OwTsAP zn9CZP`FazX3^kG(KodIZ=Kty8DLTy--UKfa1$6XugS zk%6v$Kmxt6U!YMx0JQ)0qX*{CXwZZk$vEROidEc7=J-1;peNat!vS<3P-FT5po>iE z!l3R+<`#x|+_hw!HjQGV=8!q|76y8L7N8gP3$%0kfush|u0uU^?dKBaeRSBUpOZ0c z62;D&Mdn2}N}xHRFTRI?zRv=>=AjHgH}`2k4WK=#AHB)UFrR-J87GgX*x5fL^W2#d z=(%K8-oZfMO=i{aWRDg=FX}UubM4eotRDcn;OR#{3q=*?3mE3_oJ-~prjhxh%PgQT zyn)Qozaq0@o&|LEgS{Ind4Swsr;b`u185hZPOBLL<`d2%^Yp1?oL)=jnLi;Zo0ZDliTtQ^b5SmfIMe{T==zZkbvn$KTQGlbG8w}s@M3TZnde;1Am46P3juKb zl9GU&3F=q`>j!`?SyH#r@O59%@aMX^rx}Nxe<>NqpUp5=lX1ojGDIR*-D^SDuvCKF z?3$xG(gVUsBERef_YjPFl^rU9EtD{pt z0CXwpN7BN3!8>hajGaTVk-wl=9rxmfWtIhC{mheHgStLi^+Nz12a?4r(fz)?3A%at zMlvQmL<2-R)-@G1wJ0^zQK%mR=r4d{Y3fHp){nWXUL#|CqXl(+v+qDh>FkF9`eWrW zfr^D%LNfOcTNvtx0JXR35J0~Jpi2#P3Q&80w+nqNfc}&G0A~*)lGHKv=^FE+b(37|)zL;KLF>oiGfb(?&1 zV3XRu!Sw>@quKiab%g6jun#oZ%!>V#A%+lNc?q>6+VvyAn=kf_6z^(TZUa4Eelh{{ zqFX-#dY(EV@7l$NE&kv9u9BR8&Ojd#ZGJ6l8_BW}^r?DIS_rU2(XaGOK z225E@kH5Opf+CgD^{y29jD4gHbGf{1MD6ggQ&%>UG4WyPh5q_tb`{@_34B?xfSO*| zZv8!)q;^o-bz`MuxXk*G^}(6)ACb@=Lfs`Hxoh>`Y0NE8QRQ!*p|SH@{r8=%RKd4p z+#Ty^-0kb=-H-O`nAA3_6>2z(D=~Tbs(n8LHxD0`R0_ATFqp-SdY3(bZ3;VUM?J=O zKCNsxsgt@|&nKMC=*+ZqmLHhX1KHbAJs{nGVMs6~TiF%Q)P@>!koa$%oS zjXa=!5>P`vC-a}ln!uH1ooeI&v?=?v7?1n~P(wZ~0>xWxd_Aw;+}9#eULM7M8&E?Y zC-ZLhi3RoM92SXUb-5i-Lmt5_rfjE{6y^+24`y$1lywLyHO!)Boa7438K4#iLe?rh z2O~YGSgFUBH?og*6=r9rme=peP~ah`(8Zt7V)j5!V0KPFf_mebo3z95U8(up$-+EA^9dTRLq>Yl)YMBuch9%=e5B`Vnb>o zt03=kq;k2TgGe4|lGne&zJa~h(UGutjP_zr?a7~#b)@15XNA>Dj(m=gg2Q5V4-$)D|Q9}R#002ovPDHLkV1o7DH3k3x literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d GIT binary patch literal 1888 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 iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 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..d2237db --- /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 + hashigen + 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/bloc/homepage_bloc.dart b/lib/bloc/homepage_bloc.dart new file mode 100644 index 0000000..935966e --- /dev/null +++ b/lib/bloc/homepage_bloc.dart @@ -0,0 +1,100 @@ +import 'dart:async'; +import 'dart:io'; +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import 'package:firebase_ml_vision/firebase_ml_vision.dart'; +import 'package:hashigen/repository/getHashTags.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:meta/meta.dart'; + +part 'homepage_event.dart'; +part 'homepage_state.dart'; + +class HomepageBloc extends Bloc { + final GetHashTags getHashTags; + List listOfAllTags; + File imagePath; + HomepageBloc({this.getHashTags}) : super(HomepageInitial()); + + @override + Stream mapEventToState( + HomepageEvent event, + ) async* { + if (event is FetchHashtagsBasedOnText) { + yield LoadingState(); + try { + List list = await getHashTags.searchTags( + genre: event.genre ?? "top", + keyword: event.keyword, + forImage: false); + yield TextHashtagLoadedState(list); + } catch (e) { + yield ErrorState(); + } + } + + if (event is FetchHashTagsBasedOnImage) { + yield LoadingState(); + try { + List detectedObjects = await getImageFromGallery() as List; + List detectedHashtags = []; + await Future.forEach(detectedObjects, (labels) async { + List list = await getHashTags.searchTags( + genre: "top", keyword: labels, forImage: true) as List; + list.forEach((element) { + if (element.length != 0) detectedHashtags.add(element); + }); + }); + + yield ImageHashtagLoadedState( + image: imagePath, listOfTags: detectedHashtags); + } catch (e) { + print(e); + yield ErrorState(); + } + } + + if (event is FetchPopularHashtag) { + yield LoadingState(); + try { + listOfAllTags = await getHashTags.topDailyHashtags(); + yield PopularHashtagLoadedState(listOfAllTags); + } catch (e) { + print(e); + yield ErrorState(); + } + } + + if (event is FetchHashtagsBasedOnText) { + yield LoadingState(); + try { + List list = await getHashTags.searchTags( + forImage: false, genre: event.genre, keyword: event.keyword); + yield TextHashtagLoadedState(list); + } catch (e) { + print(e); + yield ErrorState(); + } + } + } + + Future getImageFromGallery() async { + PickedFile file = await ImagePicker().getImage(source: ImageSource.gallery); + imagePath = File(file.path); + return detect(image: imagePath); + } + + Future detect({File image}) async { + List listOfObjectsDetected = []; + if (image != null) { + final FirebaseVisionImage visionImage = + FirebaseVisionImage.fromFile(image); + final ImageLabeler labeler = FirebaseVision.instance.imageLabeler(); + final List labels = await labeler.processImage(visionImage); + labels.forEach((label) { + if (label.confidence > 0.5) listOfObjectsDetected.add(label.text); + }); + } + return listOfObjectsDetected; + } +} diff --git a/lib/bloc/homepage_event.dart b/lib/bloc/homepage_event.dart new file mode 100644 index 0000000..f3c0b06 --- /dev/null +++ b/lib/bloc/homepage_event.dart @@ -0,0 +1,26 @@ +part of 'homepage_bloc.dart'; + +@immutable +abstract class HomepageEvent extends Equatable {} + +class FetchHashTagsBasedOnImage extends HomepageEvent { + @override + List get props => []; +} + +class FetchHashtagsBasedOnText extends HomepageEvent { + final String keyword; + final String genre; + + FetchHashtagsBasedOnText({this.keyword, this.genre}); + @override + List get props => []; +} + +class FetchPopularHashtag extends HomepageEvent { + final int tabNumber; + + FetchPopularHashtag({this.tabNumber}); + @override + List get props => []; +} diff --git a/lib/bloc/homepage_state.dart b/lib/bloc/homepage_state.dart new file mode 100644 index 0000000..3808398 --- /dev/null +++ b/lib/bloc/homepage_state.dart @@ -0,0 +1,43 @@ +part of 'homepage_bloc.dart'; + +@immutable +abstract class HomepageState extends Equatable {} + +class HomepageInitial extends HomepageState { + @override + List get props => []; +} + +class LoadingState extends HomepageState { + @override + List get props => []; +} + +class PopularHashtagLoadedState extends HomepageState { + final List listOfTags; + + PopularHashtagLoadedState(this.listOfTags); + @override + List get props => []; +} + +class ErrorState extends HomepageState { + @override + List get props => []; +} + +class TextHashtagLoadedState extends HomepageState { + final List listOfTags; + + TextHashtagLoadedState(this.listOfTags); + @override + List get props => []; +} + +class ImageHashtagLoadedState extends HomepageState { + final List listOfTags; + final File image; + ImageHashtagLoadedState({this.listOfTags, this.image}); + @override + List get props => []; +} diff --git a/lib/frontend/homePage.dart b/lib/frontend/homePage.dart new file mode 100644 index 0000000..f055d84 --- /dev/null +++ b/lib/frontend/homePage.dart @@ -0,0 +1,202 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:hashigen/bloc/homepage_bloc.dart'; +import 'package:hashigen/repository/getHashTags.dart'; +import 'package:hashigen/widgets/greeting.dart'; +import 'package:hashigen/widgets/loading.dart'; +import 'package:hashigen/widgets/showTags.dart'; + +class HomePage extends StatefulWidget { + @override + _HomePageState createState() => _HomePageState(); +} + +class _HomePageState extends State + with SingleTickerProviderStateMixin { + HomepageBloc _homepageBloc; + TabController _tabController; + List _listOfTabs = ['Today', 'Last week', 'Last month', 'All time']; + List _listOFGenres = ['top', 'random', 'live']; + bool _imageSearching = false; + int _selectedRadio = 0; + TextEditingController _searhController = TextEditingController(); + + @override + void initState() { + _tabController = TabController(length: 4, vsync: this, initialIndex: 0); + + super.initState(); + } + + @override + void dispose() { + _homepageBloc.close(); + _tabController.dispose(); + _searhController.dispose(); + super.dispose(); + } + + void refreshPage() { + _searhController.clear(); + setState(() { + _imageSearching = false; + }); + _homepageBloc.add(FetchPopularHashtag(tabNumber: _tabController.index)); + } + + void handleSearchTap() { + _homepageBloc.add(FetchHashtagsBasedOnText( + genre: _listOFGenres[_selectedRadio], + keyword: _searhController.text.trim())); + } + + void handleRadioValue(int val) { + setState(() { + _selectedRadio = val; + }); + handleSearchTap(); + } + + @override + Widget build(BuildContext context) { + return BlocProvider( + create: (context) => HomepageBloc(getHashTags: GetHashTags()), + child: Scaffold( + backgroundColor: Color.fromRGBO(28, 36, 60, 1), + body: Container( + margin: EdgeInsets.only(left: 15, right: 15, top: 25), + child: Column( + children: [ + Greetings(), + SizedBox( + height: 10, + ), + searchBar(), + SizedBox( + height: 10, + ), + _imageSearching ? Container() : tabs(), + SizedBox( + height: 15, + ), + Expanded(child: blocController()) + ], + ), + )), + ); + } + + Widget blocController() { + return BlocBuilder( + builder: (context, state) { + if (state is HomepageInitial) { + _homepageBloc = BlocProvider.of(context); + _homepageBloc.add(FetchPopularHashtag(tabNumber: 0)); + } else if (state is LoadingState) + return Loading(); + else if (state is ImageHashtagLoadedState) + return ShowTags( + image: state.image, + imageSearching: _imageSearching, + refresh: refreshPage, + tags: state.listOfTags, + ); + else if (state is PopularHashtagLoadedState) + return tabsData(state.listOfTags); + else if (state is TextHashtagLoadedState) + return ShowTags( + imageSearching: false, + refresh: refreshPage, + tags: state.listOfTags, + ); + else if (state is ErrorState) + return Center(child: Text("image error ")); + return Container(); + }, + ); + } + + Widget searchBar() { + return Container( + margin: EdgeInsets.symmetric(vertical: 15), + width: MediaQuery.of(context).size.width, + decoration: BoxDecoration( + border: Border.all(color: Colors.white, width: 1), + borderRadius: BorderRadius.circular(30), + color: Colors.white.withOpacity(0.3), + ), + child: Row( + children: [ + Expanded( + child: TextField( + controller: _searhController, + autocorrect: true, + cursorColor: Colors.white, + style: TextStyle( + fontFamily: "gilroy", fontSize: 22, color: Colors.white), + decoration: InputDecoration( + contentPadding: EdgeInsets.symmetric(horizontal: 15), + border: InputBorder.none, + hintText: "Search by image or text", + hintStyle: TextStyle( + fontFamily: "gilroy", fontSize: 18, color: Colors.white), + ), + ), + ), + IconButton( + icon: Icon( + Icons.search, + color: Colors.white, + ), + onPressed: handleSearchTap, + ), + IconButton( + icon: Icon( + Icons.camera_alt, + color: Colors.white, + ), + onPressed: () { + _searhController.clear(); + setState(() { + _imageSearching = true; + }); + _homepageBloc.add( + FetchHashTagsBasedOnImage(), + ); + }, + ), + ], + ), + ); + } + + Widget tabs() { + return TabBar( + isScrollable: true, + tabs: _listOfTabs.map((element) { + return Text( + element, + style: TextStyle(fontFamily: "gilroy", fontSize: 22), + ); + }).toList(), + controller: _tabController, + indicatorColor: Color.fromRGBO(43, 213, 203, 1), + labelColor: Color.fromRGBO(43, 213, 203, 1), + unselectedLabelColor: Colors.white.withOpacity(0.7), + indicatorSize: TabBarIndicatorSize.tab, + ); + } + + Widget tabsData(List list) { + return TabBarView( + children: list.map((listOfTags) { + return ShowTags( + imageSearching: false, + tags: listOfTags, + refresh: refreshPage, + ); + }).toList(), + controller: _tabController, + ); + } +} diff --git a/lib/main.dart b/lib/main.dart new file mode 100644 index 0000000..11dc706 --- /dev/null +++ b/lib/main.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +import 'frontend/homePage.dart'; + +void main() => runApp(MyApp()); + +class MyApp extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MaterialApp( + debugShowCheckedModeBanner: false, + home: HomePage(), + ); + } +} diff --git a/lib/repository/getHashTags.dart b/lib/repository/getHashTags.dart new file mode 100644 index 0000000..74dfacc --- /dev/null +++ b/lib/repository/getHashTags.dart @@ -0,0 +1,53 @@ +import 'package:html/parser.dart'; +import 'package:http/http.dart' as http; + +class GetHashTags { + //top,random,live + Future searchTags({String keyword, String genre, bool forImage}) async { + var client = http.Client(); + List list, listOfHashTags = List(); + Map postData = {"keyword": keyword, "filter": genre}; + + Map headers = { + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" + }; + http.Response response = await client.post( + "https://www.all-hashtag.com/library/contents/ajax_generator.php", + body: postData, + headers: headers); + if (response.statusCode == 200) { + var document = parse(response.body); + var links = document.querySelectorAll('#copy-hashtags'); + String rawData = links[0].innerHtml; + list = rawData.split('#'); + list.forEach((element) { + listOfHashTags.add("#" + element.trim()); + }); + } else { + throw Exception(); + } + return forImage ? listOfHashTags.sublist(0, 10) : listOfHashTags; + } + + // Looking for top hashtags for Instagram, Twitter or other content? + Future topDailyHashtags({int option}) async { + var client = http.Client(); + http.Response response = await client + .get("https://www.all-hashtag.com/library/contents/ajax_top.php"); + + if (response.statusCode == 200) { + var document = parse(response.body); + var links = document.getElementsByClassName("tab"); + List listOfTags = []; + links.forEach((element) { + List list = []; + var doc = parse(element.innerHtml).getElementsByClassName("hashtag"); + doc.forEach((element) { + list.add(element.innerHtml.trim()); + }); + listOfTags.add(list); + }); + return listOfTags; + } + } +} diff --git a/lib/widgets/greeting.dart b/lib/widgets/greeting.dart new file mode 100644 index 0000000..e1ba0bf --- /dev/null +++ b/lib/widgets/greeting.dart @@ -0,0 +1,24 @@ +import 'package:flutter/material.dart'; + +class Greetings extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Align( + alignment: Alignment.topLeft, + child: Text( + timeChecker(), + style: + TextStyle(color: Colors.white, fontFamily: "gilroy", fontSize: 35), + ), + ); + } + + String timeChecker() { + int hour = DateTime.now().hour.toInt(); + int min = DateTime.now().minute.toInt(); + if (0 <= hour && hour <= 12) + return "Good morning"; + else if ((hour == 12 && min > 1) || hour < 17) return "Good afternoon"; + return "Good Evening"; + } +} diff --git a/lib/widgets/loading.dart b/lib/widgets/loading.dart new file mode 100644 index 0000000..f001ad4 --- /dev/null +++ b/lib/widgets/loading.dart @@ -0,0 +1,13 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; + +class Loading extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Center( + child: SpinKitWave( + color: Color.fromRGBO(43, 213, 203, 1), + ), + ); + } +} diff --git a/lib/widgets/showTags.dart b/lib/widgets/showTags.dart new file mode 100644 index 0000000..1eb9a27 --- /dev/null +++ b/lib/widgets/showTags.dart @@ -0,0 +1,140 @@ +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +class ShowTags extends StatefulWidget { + final List tags; + final Function refresh; + final bool imageSearching; + final File image; + const ShowTags( + {Key key, this.tags, this.refresh, this.imageSearching, this.image}) + : super(key: key); + @override + _ShowTagsState createState() => _ShowTagsState(); +} + +class _ShowTagsState extends State { + @override + Widget build(BuildContext context) { + return widget.tags != null + ? Column( + children: [ + Container( + margin: EdgeInsets.only(bottom: 20), + alignment: Alignment.topLeft, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + InkWell( + onTap: copyText, + child: Text( + "Copy", + style: TextStyle( + color: Colors.white, + fontFamily: "gilroy", + fontSize: 20), + ), + ), + InkWell( + onTap: widget.refresh, + child: Container( + child: Row(children: [ + Text( + "Popular", + style: TextStyle( + color: Colors.white, + fontFamily: "gilroy", + fontSize: 20), + ), + SizedBox( + width: 5, + ), + Icon( + Icons.refresh, + color: Colors.white, + ) + ]), + ), + ), + ]), + ), + Expanded( + child: SingleChildScrollView( + child: Column( + children: [ + widget.imageSearching + ? showImage(widget.image) + : Container(), + SizedBox( + height: 5, + ), + Wrap( + children: widget.tags.map((element) { + return element.length != 1 + ? Chip( + deleteButtonTooltipMessage: "Tag deleted", + label: Text( + element, + style: TextStyle( + color: Colors.black, + fontFamily: "gilroy", + fontSize: 14), + ), + backgroundColor: + Colors.white.withOpacity(0.5), + onDeleted: () { + setState(() { + widget.tags.remove(element); + }); + }, + deleteIcon: Icon( + Icons.clear, + color: Colors.grey, + size: 14, + ), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(20)), + ) + : Container(); + }).toList(), + alignment: WrapAlignment.start, + direction: Axis.horizontal, + spacing: 5, + ), + ], + ), + ), + ), + ], + ) + : Text("Error"); + } + + void copyText() async { + String copiedText = ""; + widget.tags.forEach((element) { + if (element.length != 0) copiedText += element; + }); + ClipboardData data = ClipboardData(text: copiedText); + await Clipboard.setData(data); + Scaffold.of(context).showSnackBar(SnackBar( + content: Text("Hashtags copied to clipboard"), + )); + } + + Widget showImage(File image) { + return Container( + height: MediaQuery.of(context).size.height * 0.3, + width: MediaQuery.of(context).size.height * 0.4, + child: ClipRRect( + borderRadius: BorderRadius.circular(20), + child: Image.file( + image, + fit: BoxFit.fill, + ), + ), + ); + } +} diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..8e09a70 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,259 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.2" + bloc: + dependency: transitive + description: + name: bloc + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.3" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.14.13" + csslib: + dependency: transitive + description: + name: csslib + url: "https://pub.dartlang.org" + source: hosted + version: "0.16.2" + equatable: + dependency: "direct main" + description: + name: equatable + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.3" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + firebase_ml_vision: + dependency: "direct main" + description: + name: firebase_ml_vision + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.5" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_bloc: + dependency: "direct main" + description: + name: flutter_bloc + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.1" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.8" + flutter_spinkit: + dependency: "direct main" + description: + name: flutter_spinkit + url: "https://pub.dartlang.org" + source: hosted + version: "4.1.2+1" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + html: + dependency: "direct main" + description: + name: html + url: "https://pub.dartlang.org" + source: hosted + version: "0.14.0+3" + http: + dependency: "direct main" + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.2" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.4" + image_picker: + dependency: "direct main" + description: + name: image_picker + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.7+4" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.8" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.8" + nested: + dependency: transitive + description: + name: nested + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.4" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.7.0" + pedantic: + dependency: transitive + description: + name: pedantic + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + provider: + dependency: transitive + description: + name: provider + url: "https://pub.dartlang.org" + source: hosted + version: "4.3.2" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.7.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.5" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.17" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.8" +sdks: + dart: ">=2.9.0-14.0.dev <3.0.0" + flutter: ">=1.16.0 <2.0.0" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..8ab8deb --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,82 @@ +name: hashigen +description: A new Flutter project. + +# The following line prevents the package from being accidentally published to +# pub.dev using `pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +version: 1.0.0+1 + +environment: + sdk: ">=2.7.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + + html: ^0.14.0+3 + http: ^0.12.2 + firebase_ml_vision: ^0.9.5 + image_picker: ^0.6.7+4 + flutter_bloc: ^6.0.1 + equatable: ^1.2.3 + flutter_spinkit: "^4.1.2" +dev_dependencies: + flutter_test: + sdk: flutter + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/loading.gif + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware. + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + fonts: + - family: gilroy + fonts: + - asset: fonts/Gilroy-Medium.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/test/widget_test.dart b/test/widget_test.dart new file mode 100644 index 0000000..df143c9 --- /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:hashigen/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); + }); +}