From f94081fc7bf12eeb39fe95cba35695c1db49ac52 Mon Sep 17 00:00:00 2001 From: Watch your step! Date: Mon, 27 Mar 2023 00:53:45 +0900 Subject: [PATCH] feat: launcher icon --- README.md | 2 +- android/app/build.gradle | 2 +- android/app/src/debug/AndroidManifest.xml | 2 +- android/app/src/main/AndroidManifest.xml | 4 +- .../example/see_our_sounds/MainActivity.kt | 2 +- .../res/drawable-night-v21/background.png | Bin 0 -> 69 bytes .../drawable-night-v21/launch_background.xml | 6 + .../main/res/drawable-night/background.png | Bin 0 -> 69 bytes .../res/drawable-night/launch_background.xml | 6 + .../src/main/res/drawable-v21/background.png | Bin 0 -> 69 bytes .../res/drawable-v21/launch_background.xml | 12 +- .../app/src/main/res/drawable/background.png | Bin 0 -> 69 bytes .../main/res/drawable/launch_background.xml | 12 +- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 544 -> 8378 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 442 -> 5508 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 721 -> 11315 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 1031 -> 16684 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 1443 -> 22270 bytes .../app/src/main/res/values-night/styles.xml | 3 + android/app/src/main/res/values/styles.xml | 3 + android/app/src/profile/AndroidManifest.xml | 2 +- assets/logo/logo1.png | Bin 0 -> 43522 bytes assets/logo/logo2.png | Bin 0 -> 64062 bytes ios/Runner.xcodeproj/project.pbxproj | 6 +- .../Icon-App-1024x1024@1x.png | Bin 10932 -> 210542 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 564 -> 1887 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1283 -> 4430 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 1588 -> 7028 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1025 -> 2996 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 1716 -> 6728 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 1920 -> 10164 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1283 -> 4430 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 1895 -> 9269 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 2665 -> 13992 bytes .../AppIcon.appiconset/Icon-App-50x50@1x.png | Bin 0 -> 5825 bytes .../AppIcon.appiconset/Icon-App-50x50@2x.png | Bin 0 -> 11792 bytes .../AppIcon.appiconset/Icon-App-57x57@1x.png | Bin 0 -> 6534 bytes .../AppIcon.appiconset/Icon-App-57x57@2x.png | Bin 0 -> 13250 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 2665 -> 13992 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 3831 -> 20866 bytes .../AppIcon.appiconset/Icon-App-72x72@1x.png | Bin 0 -> 8378 bytes .../AppIcon.appiconset/Icon-App-72x72@2x.png | Bin 0 -> 16684 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 1888 -> 8861 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 3294 -> 17634 bytes .../Icon-App-83.5x83.5@2x.png | Bin 3612 -> 19455 bytes .../LaunchBackground.imageset/Contents.json | 22 +++ .../LaunchBackground.imageset/background.png | Bin 0 -> 69 bytes .../darkbackground.png | Bin 0 -> 69 bytes .../LaunchImage.imageset/Contents.json | 10 +- .../LaunchImage.imageset/LaunchImage.png | Bin 68 -> 69 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 68 -> 69 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 68 -> 69 bytes ios/Runner/Base.lproj/LaunchScreen.storyboard | 15 +- ios/Runner/Info.plist | 130 ++++++++------- lib/main.dart | 30 ++-- lib/src/core/app_assets.dart | 3 +- lib/src/core/app_constants.dart | 154 +++++++++--------- lib/src/core/app_router.dart | 34 ++++ lib/src/core/app_routes.dart | 0 lib/src/core/app_theme.dart | 8 + lib/src/core/app_themes.dart | 0 lib/src/core/core.dart | 4 +- lib/src/core/utils/database_util.dart | 6 +- lib/src/core/utils/router_util.dart | 33 ++++ .../providers/audio_tagging_api_provider.dart | 6 +- .../providers/audio_tagging_db_provider.dart | 4 +- .../audio_tagging_repository.dart | 4 +- lib/src/screens/category/category_screen.dart | 43 ++--- .../category/widgets/bottom_nav_button.dart | 2 +- .../category/widgets/category_card.dart | 2 +- lib/src/screens/history/history_screen.dart | 4 +- lib/src/screens/home/home_screen.dart | 25 +-- .../screens/home/widgets/toggle_button.dart | 2 +- .../screens/onboarding/onboarding_screen.dart | 9 +- lib/src/services/audio_tagging_service.dart | 8 +- linux/CMakeLists.txt | 4 +- linux/my_application.cc | 4 +- macos/Runner.xcodeproj/project.pbxproj | 6 +- .../xcshareddata/xcschemes/Runner.xcscheme | 8 +- macos/Runner/Configs/AppInfo.xcconfig | 4 +- pubspec.lock | 42 +++++ pubspec.yaml | 12 +- test/widget_test.dart | 2 +- web/index.html | 22 +-- web/manifest.json | 4 +- windows/CMakeLists.txt | 4 +- windows/runner/Runner.rc | 8 +- windows/runner/main.cpp | 2 +- 88 files changed, 454 insertions(+), 288 deletions(-) create mode 100644 android/app/src/main/res/drawable-night-v21/background.png create mode 100644 android/app/src/main/res/drawable-night-v21/launch_background.xml create mode 100644 android/app/src/main/res/drawable-night/background.png create mode 100644 android/app/src/main/res/drawable-night/launch_background.xml create mode 100644 android/app/src/main/res/drawable-v21/background.png create mode 100644 android/app/src/main/res/drawable/background.png create mode 100644 assets/logo/logo1.png create mode 100644 assets/logo/logo2.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png create mode 100644 ios/Runner/Assets.xcassets/LaunchBackground.imageset/darkbackground.png create mode 100644 lib/src/core/app_router.dart delete mode 100644 lib/src/core/app_routes.dart create mode 100644 lib/src/core/app_theme.dart delete mode 100644 lib/src/core/app_themes.dart create mode 100644 lib/src/core/utils/router_util.dart diff --git a/README.md b/README.md index 5a65b74..f38c50d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# see_our_sounds +# hear_sitter A new Flutter project. diff --git a/android/app/build.gradle b/android/app/build.gradle index 68409a0..30f78a5 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -44,7 +44,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.see_our_sounds" + applicationId "com.example.hear_sitter" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. minSdkVersion 21 diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml index 1a646a4..7a40903 100644 --- a/android/app/src/debug/AndroidManifest.xml +++ b/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,5 @@ + package="com.example.hear_sitter"> @@ -18,7 +18,7 @@ + + + + + diff --git a/android/app/src/main/res/drawable-night/background.png b/android/app/src/main/res/drawable-night/background.png new file mode 100644 index 0000000000000000000000000000000000000000..71e9c817e8c3531d8b353b9818aeece0e1e64971 GIT binary patch literal 69 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryJf1F&Ar*|ti3tfno(Kc$izVN6 PfGh@2S3j3^P6 + + + + + diff --git a/android/app/src/main/res/drawable-v21/background.png b/android/app/src/main/res/drawable-v21/background.png new file mode 100644 index 0000000000000000000000000000000000000000..3107d37fa533216ce211fdcdd7c9b8633fab4cc4 GIT binary patch literal 69 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryJf1F&Ar*|tKmY%?XJF%FW@0Ma R`v54;;OXk;vd$@?2>`rk4}t&y literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml index f74085f..f88598c 100644 --- a/android/app/src/main/res/drawable-v21/launch_background.xml +++ b/android/app/src/main/res/drawable-v21/launch_background.xml @@ -1,12 +1,6 @@ - - - - - + + + diff --git a/android/app/src/main/res/drawable/background.png b/android/app/src/main/res/drawable/background.png new file mode 100644 index 0000000000000000000000000000000000000000..3107d37fa533216ce211fdcdd7c9b8633fab4cc4 GIT binary patch literal 69 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryJf1F&Ar*|tKmY%?XJF%FW@0Ma R`v54;;OXk;vd$@?2>`rk4}t&y literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml index 304732f..f88598c 100644 --- a/android/app/src/main/res/drawable/launch_background.xml +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -1,12 +1,6 @@ - - - - - + + + diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4b7b0906d62b1847e87f15cdcacf6a4f29..50a2d68f061e5ffedbc8b468aa7665ff9757bd39 100644 GIT binary patch literal 8378 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 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{ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 17987b79bb8a35cc66c3c1fd44f5a5526c1b78be..4cd8f03384b9a3f7a73957bd4a6e8a743e3db190 100644 GIT binary patch literal 5508 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 a38kxhR;4v07X7!Q3&=<)ir0!7h5R31Hj3o{ literal 721 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy!iOI#yLg7ec#$`gxH85~pclTsBt za}(23gHjVyDhp4h+5i=O3-AeX1=1l$e`s#|#^}+&7(N@w0CIr{$Oe+Uk^K-ZP~83C zcc@hG6rikF&NPT(23>y!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)$ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d34e7a88e3f88bea192c3a370d44689c3c..c7d17abd2b4210b77f8edb259141b333b3871371 100644 GIT binary patch literal 16684 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 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 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372eebdb28e45604e46eeda8dd24651419bc0..dd55d120cf7f77c9d364000a834d596619c38f8d 100644 GIT binary patch literal 22270 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 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` diff --git a/android/app/src/main/res/values-night/styles.xml b/android/app/src/main/res/values-night/styles.xml index 06952be..58ee4d9 100644 --- a/android/app/src/main/res/values-night/styles.xml +++ b/android/app/src/main/res/values-night/styles.xml @@ -5,6 +5,9 @@ @drawable/launch_background + false + false + shortEdges @drawable/launch_background + false + false + shortEdges - NSLocationWhenInUseUsageDescription - Need location when in use - NSLocationAlwaysAndWhenInUseUsageDescription - Always and when in use! - NSLocationUsageDescription - Older devices need location. - NSLocationAlwaysUsageDescription - Can I have location always? - - - NSMicrophoneUsageDescription - microphone - - - NSSpeechRecognitionUsageDescription - speech - - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - - + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + HearSitter + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + hear_sitter + 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 + + + NSLocationWhenInUseUsageDescription + Need location when in use + NSLocationAlwaysAndWhenInUseUsageDescription + Always and when in use! + NSLocationUsageDescription + Older devices need location. + NSLocationAlwaysUsageDescription + Can I have location always? + + NSMicrophoneUsageDescription + microphone + + NSSpeechRecognitionUsageDescription + speech + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + UIStatusBarHidden + + diff --git a/lib/main.dart b/lib/main.dart index 7ee7684..77038de 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,33 +1,37 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:see_our_sounds/src/core/utils/sharedprefs_util.dart'; -import 'package:see_our_sounds/src/screens/home/home_screen.dart'; +import 'package:hear_sitter/src/core/app_router.dart'; +import 'package:hear_sitter/src/core/app_theme.dart'; +import 'package:hear_sitter/src/core/utils/sharedprefs_util.dart'; +import 'package:hear_sitter/src/screens/home/home_screen.dart'; -import 'package:see_our_sounds/src/screens/onboarding/onboarding_screen.dart'; +import 'package:hear_sitter/src/screens/onboarding/onboarding_screen.dart'; late bool isOnboard; Future main() async { WidgetsFlutterBinding.ensureInitialized(); await SharedPreferencesUtil.initialize(); - final prefs = SharedPreferencesUtil().prefs; - isOnboard = prefs.getBool('isOnboard') ?? false; + // final prefs = SharedPreferencesUtil().prefs; + // isOnboard = prefs.getBool('isOnboard') ?? false; runApp(ProviderScope(child: const MyApp())); } -class MyApp extends StatelessWidget { +class MyApp extends ConsumerWidget { const MyApp({super.key}); @override - Widget build(BuildContext context) { - return MaterialApp( + Widget build(BuildContext context, WidgetRef ref) { + final router = ref.watch(routerProvider); + return MaterialApp.router( title: 'HearSitter', debugShowCheckedModeBanner: false, - theme: ThemeData( - primarySwatch: Colors.blue, - fontFamily: 'NotoSansKR', - scaffoldBackgroundColor: Colors.white), - home: isOnboard ? const HomseScreen() : const OnboardingScreen(), + theme: themeData(), + routeInformationParser: router.routeInformationParser, + routeInformationProvider: router.routeInformationProvider, + routerDelegate: router.routerDelegate, + + // home: isOnboard ? const HomseScreen() : const OnboardingScreen(), ); } } diff --git a/lib/src/core/app_assets.dart b/lib/src/core/app_assets.dart index ec0a5a3..b288ebc 100644 --- a/lib/src/core/app_assets.dart +++ b/lib/src/core/app_assets.dart @@ -1,7 +1,8 @@ class AppAssets { AppAssets._(); - static const String logo = ""; + static const String logo1 = "assets/logo/logo1.png"; + static const String logo2 = "assets/logo/logo2.png"; static const String announcementIconDark = 'assets/icon_dark/announcement_dark.png'; static const String announcementIconLight = diff --git a/lib/src/core/app_constants.dart b/lib/src/core/app_constants.dart index dd7caa2..0dc99de 100644 --- a/lib/src/core/app_constants.dart +++ b/lib/src/core/app_constants.dart @@ -1,6 +1,6 @@ import 'dart:ui'; -import 'package:see_our_sounds/src/core/app_assets.dart'; +import 'package:hear_sitter/src/core/app_assets.dart'; class AppUri { AppUri._(); @@ -38,86 +38,88 @@ enum SoundCategory { PAPA, // 아빠 } -String soundCategoryIconLight(SoundCategory soundCategory) { - switch (soundCategory) { - case SoundCategory.BABY_CRYING: - return AppAssets.infantCryingIconLight; - case SoundCategory.CRACK_SOUND: - return AppAssets.crackIconLight; - case SoundCategory.FIRE_ALARM: - return AppAssets.fireAlarmIconLight; - case SoundCategory.GUN_SHOT: - return AppAssets.gunIconLight; - case SoundCategory.CAR_HORN: - return AppAssets.carHornIconLight; - case SoundCategory.NAME: - return AppAssets.nameIconLight; - case SoundCategory.MAMA: - return AppAssets.mamaPapaIconLight; - case SoundCategory.PAPA: - return AppAssets.mamaPapaIconLight; +extension SoundCategoryUtil on SoundCategory { + String get iconLight { + switch (this) { + case SoundCategory.BABY_CRYING: + return AppAssets.infantCryingIconLight; + case SoundCategory.CRACK_SOUND: + return AppAssets.crackIconLight; + case SoundCategory.FIRE_ALARM: + return AppAssets.fireAlarmIconLight; + case SoundCategory.GUN_SHOT: + return AppAssets.gunIconLight; + case SoundCategory.CAR_HORN: + return AppAssets.carHornIconLight; + case SoundCategory.NAME: + return AppAssets.nameIconLight; + case SoundCategory.MAMA: + return AppAssets.mamaPapaIconLight; + case SoundCategory.PAPA: + return AppAssets.mamaPapaIconLight; + } } -} -String soundCategoryIconDark(SoundCategory soundCategory) { - switch (soundCategory) { - case SoundCategory.BABY_CRYING: - return AppAssets.infantCryingIconDark; - case SoundCategory.CRACK_SOUND: - return AppAssets.crackIconDark; - case SoundCategory.FIRE_ALARM: - return AppAssets.fireAlarmIconDark; - case SoundCategory.GUN_SHOT: - return AppAssets.gunIconDark; - case SoundCategory.CAR_HORN: - return AppAssets.carHornIconDark; - case SoundCategory.NAME: - return AppAssets.nameIconDark; - case SoundCategory.MAMA: - return AppAssets.mamaPapaIconDark; - case SoundCategory.PAPA: - return AppAssets.mamaPapaIconDark; + String get iconDark { + switch (this) { + case SoundCategory.BABY_CRYING: + return AppAssets.infantCryingIconDark; + case SoundCategory.CRACK_SOUND: + return AppAssets.crackIconDark; + case SoundCategory.FIRE_ALARM: + return AppAssets.fireAlarmIconDark; + case SoundCategory.GUN_SHOT: + return AppAssets.gunIconDark; + case SoundCategory.CAR_HORN: + return AppAssets.carHornIconDark; + case SoundCategory.NAME: + return AppAssets.nameIconDark; + case SoundCategory.MAMA: + return AppAssets.mamaPapaIconDark; + case SoundCategory.PAPA: + return AppAssets.mamaPapaIconDark; + } } -} -String soundCategoryToLabel(SoundCategory soundCategory) { - switch (soundCategory) { - case SoundCategory.BABY_CRYING: - return 'Baby Crying'; - case SoundCategory.CRACK_SOUND: - return 'Glass'; - case SoundCategory.FIRE_ALARM: - return 'Fire alarm'; - case SoundCategory.GUN_SHOT: - return 'Gunshot'; - case SoundCategory.CAR_HORN: - return 'Car horn'; - case SoundCategory.NAME: - return 'Name'; - case SoundCategory.MAMA: - return 'Mama'; - case SoundCategory.PAPA: - return 'Papa'; + String get label { + switch (this) { + case SoundCategory.BABY_CRYING: + return 'Baby Crying'; + case SoundCategory.CRACK_SOUND: + return 'Glass'; + case SoundCategory.FIRE_ALARM: + return 'Fire alarm'; + case SoundCategory.GUN_SHOT: + return 'Gunshot'; + case SoundCategory.CAR_HORN: + return 'Car horn'; + case SoundCategory.NAME: + return 'Name'; + case SoundCategory.MAMA: + return 'Mama'; + case SoundCategory.PAPA: + return 'Papa'; + } } -} -Color soundCategoryColor(SoundCategory soundCategory) { - switch (soundCategory) { - case SoundCategory.BABY_CRYING: - return const Color(0xffffd400); - case SoundCategory.CRACK_SOUND: - return const Color(0xff0072db); - case SoundCategory.FIRE_ALARM: - return const Color(0xffe94025); - case SoundCategory.GUN_SHOT: - return Color(0xff473b3d); - case SoundCategory.CAR_HORN: - return Color(0xff7c1bbb); - case SoundCategory.NAME: - return Color(0xffffa7cb); - case SoundCategory.MAMA: - return Color(0xffff6e11); - case SoundCategory.PAPA: - return Color(0xff008d62); + Color get color { + switch (this) { + case SoundCategory.BABY_CRYING: + return const Color(0xffffd400); + case SoundCategory.CRACK_SOUND: + return const Color(0xff0072db); + case SoundCategory.FIRE_ALARM: + return const Color(0xffe94025); + case SoundCategory.GUN_SHOT: + return const Color(0xff473b3d); + case SoundCategory.CAR_HORN: + return const Color(0xff7c1bbb); + case SoundCategory.NAME: + return const Color(0xffffa7cb); + case SoundCategory.MAMA: + return const Color(0xffff6e11); + case SoundCategory.PAPA: + return const Color(0xff008d62); + } } } diff --git a/lib/src/core/app_router.dart b/lib/src/core/app_router.dart new file mode 100644 index 0000000..e7ecb3b --- /dev/null +++ b/lib/src/core/app_router.dart @@ -0,0 +1,34 @@ +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:go_router/go_router.dart'; +import 'package:hear_sitter/src/core/utils/router_util.dart'; +import 'package:hear_sitter/src/core/utils/sharedprefs_util.dart'; +import 'package:hear_sitter/src/screens/category/category_screen.dart'; +import 'package:hear_sitter/src/screens/history/history_screen.dart'; +import 'package:hear_sitter/src/screens/home/home_screen.dart'; +import 'package:hear_sitter/src/screens/onboarding/onboarding_screen.dart'; + +final routerProvider = Provider((ref) => _router); +final prefs = SharedPreferencesUtil().prefs; +bool isOnboard = prefs.getBool('isOnboard') ?? false; + +final GoRouter _router = GoRouter( + initialLocation: + isOnboard ? APP_SCREEN.home.routePath : APP_SCREEN.onboarding.routePath, + routes: [ + GoRoute( + path: APP_SCREEN.home.routePath, + builder: (context, state) => const HomseScreen(), + ), + GoRoute( + path: APP_SCREEN.onboarding.routePath, + builder: (context, state) => const OnboardingScreen(), + ), + GoRoute( + path: APP_SCREEN.category.routePath, + builder: (context, state) => const CategoryScreen(), + ), + GoRoute( + path: APP_SCREEN.history.routePath, + builder: (context, state) => const HistoryScreen(), + ) + ]); diff --git a/lib/src/core/app_routes.dart b/lib/src/core/app_routes.dart deleted file mode 100644 index e69de29..0000000 diff --git a/lib/src/core/app_theme.dart b/lib/src/core/app_theme.dart new file mode 100644 index 0000000..bfbd8cb --- /dev/null +++ b/lib/src/core/app_theme.dart @@ -0,0 +1,8 @@ +import 'package:flutter/material.dart'; + +ThemeData themeData() { + return ThemeData( + scaffoldBackgroundColor: Colors.white, + fontFamily: 'NotoSansKR', + ); +} diff --git a/lib/src/core/app_themes.dart b/lib/src/core/app_themes.dart deleted file mode 100644 index e69de29..0000000 diff --git a/lib/src/core/core.dart b/lib/src/core/core.dart index fc785b5..eef29bd 100644 --- a/lib/src/core/core.dart +++ b/lib/src/core/core.dart @@ -1,4 +1,4 @@ -export 'app_themes.dart'; +export 'app_theme.dart'; export 'app_constants.dart'; export 'app_assets.dart'; -export 'app_routes.dart'; \ No newline at end of file +export 'app_router.dart'; diff --git a/lib/src/core/utils/database_util.dart b/lib/src/core/utils/database_util.dart index 9b32126..7498851 100644 --- a/lib/src/core/utils/database_util.dart +++ b/lib/src/core/utils/database_util.dart @@ -1,7 +1,8 @@ +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:intl/intl.dart'; import 'package:path/path.dart'; // db에 접근하기 위해 -import 'package:see_our_sounds/src/core/app_constants.dart'; -import 'package:see_our_sounds/src/models/audio_tagging_model.dart'; +import 'package:hear_sitter/src/core/app_constants.dart'; +import 'package:hear_sitter/src/models/audio_tagging_model.dart'; import 'package:sqflite/sqflite.dart'; class DatabaseUtil { @@ -71,6 +72,7 @@ class DatabaseUtil { await db.rawDelete("DELETE FROM $tableName WHERE id = ?", [id]); } + // 앱이 종료되면, DB 자동으로 닫히지만, // 원할 때 종료하고 싶은 경우 사용됨. Future close() async { diff --git a/lib/src/core/utils/router_util.dart b/lib/src/core/utils/router_util.dart new file mode 100644 index 0000000..cf48a7c --- /dev/null +++ b/lib/src/core/utils/router_util.dart @@ -0,0 +1,33 @@ +enum APP_SCREEN { onboarding, category, home, history } + +extension AppRouter on APP_SCREEN { + String get routePath { + switch (this) { + case APP_SCREEN.onboarding: + return '/onboarding'; + case APP_SCREEN.category: + return '/category'; + case APP_SCREEN.home: + return '/'; + case APP_SCREEN.history: + return '/history'; + default: + return '/'; + } + } + + String get routeName { + switch (this) { + case APP_SCREEN.onboarding: + return 'onboarding'; + case APP_SCREEN.category: + return 'category'; + case APP_SCREEN.home: + return 'home'; + case APP_SCREEN.history: + return 'history'; + default: + return 'home'; + } + } +} diff --git a/lib/src/providers/audio_tagging_api_provider.dart b/lib/src/providers/audio_tagging_api_provider.dart index 3d80747..1b8673b 100644 --- a/lib/src/providers/audio_tagging_api_provider.dart +++ b/lib/src/providers/audio_tagging_api_provider.dart @@ -3,9 +3,9 @@ import 'dart:typed_data'; import 'package:flutter/cupertino.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:permission_handler/permission_handler.dart'; -import 'package:see_our_sounds/src/core/utils/audio_util.dart'; -import 'package:see_our_sounds/src/models/audio_tagging_model.dart'; -import 'package:see_our_sounds/src/services/audio_tagging_service.dart'; +import 'package:hear_sitter/src/core/utils/audio_util.dart'; +import 'package:hear_sitter/src/models/audio_tagging_model.dart'; +import 'package:hear_sitter/src/services/audio_tagging_service.dart'; import 'package:sound_stream/sound_stream.dart'; final recorderStreamProvider = diff --git a/lib/src/providers/audio_tagging_db_provider.dart b/lib/src/providers/audio_tagging_db_provider.dart index f474353..73d78e3 100644 --- a/lib/src/providers/audio_tagging_db_provider.dart +++ b/lib/src/providers/audio_tagging_db_provider.dart @@ -1,6 +1,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:see_our_sounds/src/core/utils/database_util.dart'; -import 'package:see_our_sounds/src/repositories/audio_tagging_repository.dart'; +import 'package:hear_sitter/src/core/utils/database_util.dart'; +import 'package:hear_sitter/src/repositories/audio_tagging_repository.dart'; final audioTaggingDBProvider = ChangeNotifierProvider((ref) => AudioTaggingRepositoryImpl(DatabaseUtil())); diff --git a/lib/src/repositories/audio_tagging_repository.dart b/lib/src/repositories/audio_tagging_repository.dart index 842a03f..1375300 100644 --- a/lib/src/repositories/audio_tagging_repository.dart +++ b/lib/src/repositories/audio_tagging_repository.dart @@ -1,7 +1,7 @@ import 'package:flutter/cupertino.dart'; import 'package:intl/intl.dart'; -import 'package:see_our_sounds/src/core/utils/database_util.dart'; -import 'package:see_our_sounds/src/models/audio_tagging_model.dart'; +import 'package:hear_sitter/src/core/utils/database_util.dart'; +import 'package:hear_sitter/src/models/audio_tagging_model.dart'; abstract class AudioTaggingRepository { Future getAllHistory(); diff --git a/lib/src/screens/category/category_screen.dart b/lib/src/screens/category/category_screen.dart index 6fe4b16..7f13702 100644 --- a/lib/src/screens/category/category_screen.dart +++ b/lib/src/screens/category/category_screen.dart @@ -1,8 +1,8 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:see_our_sounds/src/core/app_constants.dart'; -import 'package:see_our_sounds/src/screens/category/widgets/category_card.dart'; -import 'package:see_our_sounds/src/screens/category/widgets/bottom_nav_button.dart'; +import 'package:hear_sitter/src/core/app_constants.dart'; +import 'package:hear_sitter/src/screens/category/widgets/category_card.dart'; +import 'package:hear_sitter/src/screens/category/widgets/bottom_nav_button.dart'; class CategoryScreen extends StatefulWidget { const CategoryScreen({Key? key}) : super(key: key); @@ -45,55 +45,48 @@ class _CategoryScreenState extends State { CategoryCard( color: AppColor.primaryColor, labelColor: Colors.white, - audioLabel: - soundCategoryToLabel(SoundCategory.BABY_CRYING), - imgUrl: - soundCategoryIconLight(SoundCategory.BABY_CRYING), + audioLabel: SoundCategory.BABY_CRYING.label, + imgUrl: SoundCategory.BABY_CRYING.iconLight, width: 120, onTap: () {}, isSelected: false), CategoryCard( audioLabel: 'Crack Sound', width: 130, - imgUrl: - soundCategoryIconDark(SoundCategory.CRACK_SOUND), + imgUrl: SoundCategory.CRACK_SOUND.iconDark, onTap: () {}, isSelected: false), CategoryCard( - audioLabel: - soundCategoryToLabel(SoundCategory.FIRE_ALARM), - imgUrl: - soundCategoryIconDark(SoundCategory.FIRE_ALARM), + audioLabel: SoundCategory.FIRE_ALARM.label, + imgUrl: SoundCategory.FIRE_ALARM.iconDark, width: 110, onTap: () {}, isSelected: false), CategoryCard( - audioLabel: - soundCategoryToLabel(SoundCategory.GUN_SHOT), - imgUrl: soundCategoryIconDark(SoundCategory.GUN_SHOT), + audioLabel: SoundCategory.GUN_SHOT.label, + imgUrl: SoundCategory.GUN_SHOT.iconDark, onTap: () {}, width: 95, isSelected: false), CategoryCard( - audioLabel: - soundCategoryToLabel(SoundCategory.CAR_HORN), - imgUrl: soundCategoryIconDark(SoundCategory.CAR_HORN), + audioLabel: SoundCategory.CAR_HORN.label, + imgUrl: SoundCategory.CAR_HORN.iconDark, width: 100, onTap: () {}, isSelected: false), CategoryCard( - audioLabel: soundCategoryToLabel(SoundCategory.NAME), - imgUrl: soundCategoryIconDark(SoundCategory.NAME), + audioLabel: SoundCategory.NAME.label, + imgUrl: SoundCategory.NAME.iconDark, onTap: () {}, isSelected: false), CategoryCard( - audioLabel: soundCategoryToLabel(SoundCategory.MAMA), - imgUrl: soundCategoryIconDark(SoundCategory.MAMA), + audioLabel: SoundCategory.MAMA.label, + imgUrl: SoundCategory.MAMA.iconDark, onTap: () {}, isSelected: false), CategoryCard( - audioLabel: soundCategoryToLabel(SoundCategory.PAPA), - imgUrl: soundCategoryIconDark(SoundCategory.PAPA), + audioLabel: SoundCategory.PAPA.label, + imgUrl: SoundCategory.PAPA.iconDark, onTap: () {}, isSelected: false), ], diff --git a/lib/src/screens/category/widgets/bottom_nav_button.dart b/lib/src/screens/category/widgets/bottom_nav_button.dart index 0a3ac7f..4268e27 100644 --- a/lib/src/screens/category/widgets/bottom_nav_button.dart +++ b/lib/src/screens/category/widgets/bottom_nav_button.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:see_our_sounds/src/core/app_constants.dart'; +import 'package:hear_sitter/src/core/app_constants.dart'; Widget bottomNavButton( {required VoidCallback onTap, diff --git a/lib/src/screens/category/widgets/category_card.dart b/lib/src/screens/category/widgets/category_card.dart index 33f4785..6349e5f 100644 --- a/lib/src/screens/category/widgets/category_card.dart +++ b/lib/src/screens/category/widgets/category_card.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:see_our_sounds/src/core/app_constants.dart'; +import 'package:hear_sitter/src/core/app_constants.dart'; class CategoryCard extends StatelessWidget { final String imgUrl; diff --git a/lib/src/screens/history/history_screen.dart b/lib/src/screens/history/history_screen.dart index d35748c..81830b2 100644 --- a/lib/src/screens/history/history_screen.dart +++ b/lib/src/screens/history/history_screen.dart @@ -1,7 +1,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter/material.dart'; -import 'package:see_our_sounds/src/models/audio_tagging_model.dart'; -import 'package:see_our_sounds/src/providers/audio_tagging_db_provider.dart'; +import 'package:hear_sitter/src/models/audio_tagging_model.dart'; +import 'package:hear_sitter/src/providers/audio_tagging_db_provider.dart'; class HistoryScreen extends ConsumerWidget { const HistoryScreen({Key? key}) : super(key: key); diff --git a/lib/src/screens/home/home_screen.dart b/lib/src/screens/home/home_screen.dart index 0cbe8a1..007cf71 100644 --- a/lib/src/screens/home/home_screen.dart +++ b/lib/src/screens/home/home_screen.dart @@ -1,13 +1,14 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:see_our_sounds/src/core/app_constants.dart'; -import 'package:see_our_sounds/src/models/audio_tagging_model.dart'; -import 'package:see_our_sounds/src/providers/audio_tagging_api_provider.dart'; -import 'package:see_our_sounds/src/providers/audio_tagging_db_provider.dart'; -import 'package:see_our_sounds/src/providers/decibel_provider.dart'; -import 'package:see_our_sounds/src/providers/stt_provider.dart'; -import 'package:see_our_sounds/src/screens/home/widgets/decibel_history_chart.dart'; -import 'package:see_our_sounds/src/screens/home/widgets/toggle_button.dart'; +import 'package:hear_sitter/src/core/app_assets.dart'; +import 'package:hear_sitter/src/core/app_constants.dart'; +import 'package:hear_sitter/src/models/audio_tagging_model.dart'; +import 'package:hear_sitter/src/providers/audio_tagging_api_provider.dart'; +import 'package:hear_sitter/src/providers/audio_tagging_db_provider.dart'; +import 'package:hear_sitter/src/providers/decibel_provider.dart'; +import 'package:hear_sitter/src/providers/stt_provider.dart'; +import 'package:hear_sitter/src/screens/home/widgets/decibel_history_chart.dart'; +import 'package:hear_sitter/src/screens/home/widgets/toggle_button.dart'; import 'package:syncfusion_flutter_gauges/gauges.dart'; @@ -60,10 +61,10 @@ class _HomseScreenState extends ConsumerState { size: 24, color: AppColor.lightGrayColor, )), - const Text( - 'HearSitter', - style: TextStyle(fontSize: 17, fontWeight: FontWeight.bold), - ), + SizedBox( + height: 50, + width: 50, + child: Image.asset(AppAssets.logo2)), appBarIconButton( onTap: () {}, icon: const Icon( diff --git a/lib/src/screens/home/widgets/toggle_button.dart b/lib/src/screens/home/widgets/toggle_button.dart index c088ffa..afaaf5f 100644 --- a/lib/src/screens/home/widgets/toggle_button.dart +++ b/lib/src/screens/home/widgets/toggle_button.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:see_our_sounds/src/core/app_constants.dart'; +import 'package:hear_sitter/src/core/app_constants.dart'; class ToggleButton extends StatefulWidget { final VoidCallback onTap; diff --git a/lib/src/screens/onboarding/onboarding_screen.dart b/lib/src/screens/onboarding/onboarding_screen.dart index cc1f7c7..9e138d0 100644 --- a/lib/src/screens/onboarding/onboarding_screen.dart +++ b/lib/src/screens/onboarding/onboarding_screen.dart @@ -1,8 +1,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:see_our_sounds/src/core/utils/sharedprefs_util.dart'; -import 'package:see_our_sounds/src/core/app_constants.dart'; -import 'package:see_our_sounds/src/screens/category/widgets/bottom_nav_button.dart'; +import 'package:go_router/go_router.dart'; +import 'package:hear_sitter/src/core/utils/router_util.dart'; +import 'package:hear_sitter/src/core/utils/sharedprefs_util.dart'; +import 'package:hear_sitter/src/core/app_constants.dart'; +import 'package:hear_sitter/src/screens/category/widgets/bottom_nav_button.dart'; final validateNameProvider = StateProvider((ref) => false); @@ -81,6 +83,7 @@ class _OnboardingScreenState extends ConsumerState { onTap: () { _prefs.setString('userName', textEditingController.text); _prefs.setBool('isOnboard', true); + context.go(APP_SCREEN.category.routePath); }, validate: validateName, text: 'Next'), diff --git a/lib/src/services/audio_tagging_service.dart b/lib/src/services/audio_tagging_service.dart index c230311..c735288 100644 --- a/lib/src/services/audio_tagging_service.dart +++ b/lib/src/services/audio_tagging_service.dart @@ -3,11 +3,9 @@ import 'dart:convert'; import 'dart:typed_data'; import 'package:flutter/cupertino.dart'; import 'package:http/http.dart' as http; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:see_our_sounds/src/core/core.dart'; -import 'package:see_our_sounds/src/core/app_constants.dart'; -import 'package:see_our_sounds/src/models/audio_tagging_model.dart'; -import 'package:sound_stream/sound_stream.dart'; +import 'package:hear_sitter/src/core/core.dart'; +import 'package:hear_sitter/src/core/app_constants.dart'; +import 'package:hear_sitter/src/models/audio_tagging_model.dart'; abstract class AudioTaggingService { Future getPong(); diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt index 493fcff..93c144d 100644 --- a/linux/CMakeLists.txt +++ b/linux/CMakeLists.txt @@ -4,10 +4,10 @@ project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change # the on-disk name of your application. -set(BINARY_NAME "see_our_sounds") +set(BINARY_NAME "hear_sitter") # The unique GTK application identifier for this application. See: # https://wiki.gnome.org/HowDoI/ChooseApplicationID -set(APPLICATION_ID "com.example.see_our_sounds") +set(APPLICATION_ID "com.example.hear_sitter") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. diff --git a/linux/my_application.cc b/linux/my_application.cc index 793db95..735de3a 100644 --- a/linux/my_application.cc +++ b/linux/my_application.cc @@ -40,11 +40,11 @@ static void my_application_activate(GApplication* application) { if (use_header_bar) { GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "see_our_sounds"); + gtk_header_bar_set_title(header_bar, "hear_sitter"); gtk_header_bar_set_show_close_button(header_bar, TRUE); gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); } else { - gtk_window_set_title(window, "see_our_sounds"); + gtk_window_set_title(window, "hear_sitter"); } gtk_window_set_default_size(window, 1280, 720); diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 0cd40c4..07b8ad5 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -54,7 +54,7 @@ /* Begin PBXFileReference section */ 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* see_our_sounds.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "see_our_sounds.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* hear_sitter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "hear_sitter.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -105,7 +105,7 @@ 33CC10EE2044A3C60003C045 /* Products */ = { isa = PBXGroup; children = ( - 33CC10ED2044A3C60003C045 /* see_our_sounds.app */, + 33CC10ED2044A3C60003C045 /* hear_sitter.app */, ); name = Products; sourceTree = ""; @@ -172,7 +172,7 @@ ); name = Runner; productName = Runner; - productReference = 33CC10ED2044A3C60003C045 /* see_our_sounds.app */; + productReference = 33CC10ED2044A3C60003C045 /* hear_sitter.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index eb47d16..ce6ae44 100644 --- a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -15,7 +15,7 @@ @@ -31,7 +31,7 @@ @@ -54,7 +54,7 @@ @@ -71,7 +71,7 @@ diff --git a/macos/Runner/Configs/AppInfo.xcconfig b/macos/Runner/Configs/AppInfo.xcconfig index 97e82ef..5379f02 100644 --- a/macos/Runner/Configs/AppInfo.xcconfig +++ b/macos/Runner/Configs/AppInfo.xcconfig @@ -5,10 +5,10 @@ // 'flutter create' template. // The application's name. By default this is also the title of the Flutter window. -PRODUCT_NAME = see_our_sounds +PRODUCT_NAME = hear_sitter // The application's bundle identifier -PRODUCT_BUNDLE_IDENTIFIER = com.example.seeOurSounds +PRODUCT_BUNDLE_IDENTIFIER = com.example.HearSitter // The copyright displayed in application information PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved. diff --git a/pubspec.lock b/pubspec.lock index cf3074b..1bdfd07 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -15,6 +15,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "5.2.0" + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.6" args: dependency: transitive description: @@ -113,6 +120,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.2" + cli_util: + dependency: transitive + description: + name: cli_util + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.5" clock: dependency: transitive description: @@ -216,6 +230,13 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_launcher_icons: + dependency: "direct main" + description: + name: flutter_launcher_icons + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.0" flutter_lints: dependency: "direct dev" description: @@ -289,6 +310,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.1" + go_router: + dependency: "direct main" + description: + name: go_router + url: "https://pub.dartlang.org" + source: hosted + version: "6.5.0" graphs: dependency: transitive description: @@ -317,6 +345,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "4.0.2" + image: + dependency: transitive + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.15" intl: dependency: "direct main" description: @@ -506,6 +541,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.4" + pointycastle: + dependency: transitive + description: + name: pointycastle + url: "https://pub.dartlang.org" + source: hosted + version: "3.7.2" pool: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 0f29cf5..fe9c779 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,4 +1,4 @@ -name: see_our_sounds +name: hear_sitter description: A new Flutter project. publish_to: 'none' @@ -32,8 +32,17 @@ dependencies: sqflite: ^2.2.6 path: ^1.8.2 shared_preferences: ^2.0.20 + go_router: ^6.5.0 + flutter_launcher_icons: ^0.12.0 +flutter_icons: + android: "ic_launcher" + ios: true + image_path: "assets/logo/logo1.png" + android_12: + icon_background_color: "#ffffff" + image: assets/logo/logo3.png dev_dependencies: flutter_test: @@ -49,6 +58,7 @@ flutter: - assets/ - assets/icon_dark/ - assets/icon_light/ + - assets/logo/ fonts: - family: NotoSansKR diff --git a/test/widget_test.dart b/test/widget_test.dart index ba71056..e2c5ae4 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -8,7 +8,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:see_our_sounds/main.dart'; +import 'package:hear_sitter/main.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { diff --git a/web/index.html b/web/index.html index ee7aad0..dae56fb 100644 --- a/web/index.html +++ b/web/index.html @@ -1,6 +1,4 @@ - - - + - + - + - see_our_sounds + hear_sitter - + + + + - + - - + + + \ No newline at end of file diff --git a/web/manifest.json b/web/manifest.json index 03f725a..80aeace 100644 --- a/web/manifest.json +++ b/web/manifest.json @@ -1,6 +1,6 @@ { - "name": "see_our_sounds", - "short_name": "see_our_sounds", + "name": "hear_sitter", + "short_name": "hear_sitter", "start_url": ".", "display": "standalone", "background_color": "#0175C2", diff --git a/windows/CMakeLists.txt b/windows/CMakeLists.txt index 24ba710..9cdc29e 100644 --- a/windows/CMakeLists.txt +++ b/windows/CMakeLists.txt @@ -1,10 +1,10 @@ # Project-level configuration. cmake_minimum_required(VERSION 3.14) -project(see_our_sounds LANGUAGES CXX) +project(hear_sitter LANGUAGES CXX) # The name of the executable created for the application. Change this to change # the on-disk name of your application. -set(BINARY_NAME "see_our_sounds") +set(BINARY_NAME "hear_sitter") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. diff --git a/windows/runner/Runner.rc b/windows/runner/Runner.rc index 2bb3b99..f14936e 100644 --- a/windows/runner/Runner.rc +++ b/windows/runner/Runner.rc @@ -90,12 +90,12 @@ BEGIN BLOCK "040904e4" BEGIN VALUE "CompanyName", "com.example" "\0" - VALUE "FileDescription", "see_our_sounds" "\0" + VALUE "FileDescription", "hear_sitter" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" - VALUE "InternalName", "see_our_sounds" "\0" + VALUE "InternalName", "hear_sitter" "\0" VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" - VALUE "OriginalFilename", "see_our_sounds.exe" "\0" - VALUE "ProductName", "see_our_sounds" "\0" + VALUE "OriginalFilename", "hear_sitter.exe" "\0" + VALUE "ProductName", "hear_sitter" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" END END diff --git a/windows/runner/main.cpp b/windows/runner/main.cpp index d931f0d..c0b2273 100644 --- a/windows/runner/main.cpp +++ b/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"see_our_sounds", origin, size)) { + if (!window.CreateAndShow(L"hear_sitter", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true);