From 1c3a51dc073314a6558069a02d9b6a0760b3d103 Mon Sep 17 00:00:00 2001 From: Jungwoo <108061510+jwson-automation@users.noreply.github.com> Date: Tue, 13 Aug 2024 20:58:51 +0900 Subject: [PATCH] =?UTF-8?q?=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8=20?= =?UTF-8?q?=ED=99=98=EA=B2=BD=EC=84=A4=EC=A0=95=20(=20API=20=ED=82=A4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20&=20=ED=95=84=EC=9A=94=EC=97=86=EB=8A=94?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=82=AD=EC=A0=9C=20=EB=B0=8F=20?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=20=ED=99=94=EB=A9=B4=20=EC=A1=B0=EC=A0=95=20?= =?UTF-8?q?)=20(#3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add logo * add .env file * add gitignore * add gitignore * add gitignore * Remove lib/.env from tracking and add to .gitignore * allow Setting file ignore * add git ignore and manifest * add shell script for make env * fix command * fix command * fix make file and shell script * fix makeFile * fix make file * fix api key generate file * fix workflow * fix for using api_key * fix to .env api key controll * add env file generater fix * add make file chang e --- .../workflows/blueberry-build-test-action.yml | 5 ++ .gitignore | 15 ++++- Makefile | 23 +++++++ android/.gitignore | 16 +++++ android/app/build.gradle | 46 +++++++++++++ android/app/src/main/AndroidManifest.xml | 63 ++++++++++++++++++ android/app/src/main/res/values/strings.xml | 3 + assets/logo/voice_logo.png | Bin 0 -> 49837 bytes generate_env.ps1 | 19 ++++++ generate_env.sh | 5 ++ ios/.gitignore | 35 ++++++++++ lib/core/TopScreen.dart | 3 +- .../map/provider/PoliceStationProvider.dart | 4 +- lib/main.dart | 9 ++- pubspec.yaml | 5 ++ 15 files changed, 246 insertions(+), 5 deletions(-) create mode 100644 android/.gitignore create mode 100644 android/app/build.gradle create mode 100644 android/app/src/main/AndroidManifest.xml create mode 100644 android/app/src/main/res/values/strings.xml create mode 100644 assets/logo/voice_logo.png create mode 100644 generate_env.ps1 create mode 100644 generate_env.sh create mode 100644 ios/.gitignore diff --git a/.github/workflows/blueberry-build-test-action.yml b/.github/workflows/blueberry-build-test-action.yml index e7a8425..2c0b141 100644 --- a/.github/workflows/blueberry-build-test-action.yml +++ b/.github/workflows/blueberry-build-test-action.yml @@ -16,6 +16,11 @@ jobs: firebase_options_dart: ${{secrets.FIREBASE_OPTION}} run: echo "$firebase_options_dart" > lib/firebase_options.dart + - name: Create .env file + env: + ENV_CONTENT: ${{ secrets.ENV_CONTENT }} + run: echo "$ENV_CONTENT" > .env + - name: 'Set Flutter Version Latest' uses: subosito/flutter-action@v2 with: diff --git a/.gitignore b/.gitignore index fc1f1ef..91c9df2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ # Ignore platform folders. -# 이유: 개발자마다 환경이 다르므로 설정 파일이 충돌해 코드 공유가 어려울 수 있습니다. 예를 들어, 쇼핑몰 개발 시 페이팔, Stripe, 인앱결제를 사용하려면 AndroidManifest, google-service.json, Info.plist, GoogleService-Info.plist 등의 파일 수정이 필요하지만, 이 정보는 공유되지 않아야 하며, 공유가 되면, 필요 없는 설정이 추가되거나 자신의 설정이 삭제되거나 하는 일이 발생 합니다. 따라서 각 개발자가 필요한 플랫폼을 직접 설정하도록 합니다. /android/ /ios/ /web/ @@ -7,6 +6,15 @@ /macos/ /windows/ +# Allow Android platform folder. +!/android/app/src/main/AndroidManifest.xml +!/android/app/src/main/app/build.gradle +!/android/app/src/main/res/values/strings.xml +!/ios/Podfile + +!/ios/.gitignore +!/android/.gitignore + # Miscellaneous *.class *.log @@ -75,4 +83,7 @@ lib/firebase_options.dart .vscode/launch.json # secret key -sign_in_key.dart \ No newline at end of file +sign_in_key.dart + +# env +.env \ No newline at end of file diff --git a/Makefile b/Makefile index b5f4234..4f544e3 100644 --- a/Makefile +++ b/Makefile @@ -16,6 +16,20 @@ endif # Define the default target to call all necessary targets all: init analyze apply format buildRunner +# Define the init target to initialize the project +first : create init analyze buildRunner env +setting : init buildRunner +lint : analyze apply format + +# Define the init target +create: + @echo "Create ios and android floder..." +ifeq ($(DETECTED_OS), Windows) + @flutter create . +else + @$(FLUTTER) create . +endif + # Define the init target init: @echo "Initializing Flutter project..." @@ -61,3 +75,12 @@ else @$(FLUTTER) pub run build_runner build --delete-conflicting-outputs endif +# Define the env target for Unix-like systems +env: +ifeq ($(DETECTED_OS), Windows) + @echo "Using PowerShell script to create .env file." + @powershell -ExecutionPolicy Bypass -File generate_env.ps1 +else + @echo "Using bash script to create .env file." + @bash generate_env.sh +endif diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..9ae2a55 --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,16 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Manifest file which is auto generated +!/android/app/src/main/AndroidManifest.xml + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..a36c156 --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,46 @@ +plugins { + id "com.android.application" + id "kotlin-android" + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id "dev.flutter.flutter-gradle-plugin" +} + +android { + namespace = "com.example.blueberry_voice" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8 + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.blueberry_voice" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdk = 29 + targetSdk = 35 + versionCode = flutter.versionCode + versionName = flutter.versionName + + buildConfigField "String", "API_KEY", "\"${System.getenv('GOOGLE_API_KEY')}\"" + } + + 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 = "../.." +} diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..df227bd --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..69c16f5 --- /dev/null +++ b/android/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + ${BuildConfig.GOOGLE_MAP_API_KEY} + diff --git a/assets/logo/voice_logo.png b/assets/logo/voice_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..70c0589cc5e9a828c34beed040503186ab6af3e4 GIT binary patch literal 49837 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 L4TYkc$dLa7`bw@$ literal 0 HcmV?d00001 diff --git a/generate_env.ps1 b/generate_env.ps1 new file mode 100644 index 0000000..cc270d4 --- /dev/null +++ b/generate_env.ps1 @@ -0,0 +1,19 @@ +# PowerShell 스크립트로 .env 파일 생성 + +# 현재 작업 중인 디렉터리 경로 가져오기 +$TargetDir = Get-Location + +# .env 파일 내용 +$envContent = @" +# please replace 'your_api_key_here' with your actual API key +GOOGLE_API_KEY=your_api_key_here +GPT_API_KEY=your_api_key_here +# Other environment variables can be added here +"@ + +# .env 파일 생성 +$envFilePath = Join-Path -Path $TargetDir -ChildPath ".env" +Write-Output "Creating .env file at: $envFilePath" + +# UTF-8 인코딩으로 파일 생성 +$envContent | Out-File -FilePath $envFilePath -Encoding utf8 diff --git a/generate_env.sh b/generate_env.sh new file mode 100644 index 0000000..a9d9826 --- /dev/null +++ b/generate_env.sh @@ -0,0 +1,5 @@ +# .env 파일 생성 +echo "# please replace 'your_api_key_here' with your actual API key" > ".env" +echo "GOOGLE_API_KEY=your_api_key_here" >> ".env" +echo "GPT_API_KEY=your_api_key_here" >> ".env" +echo "# Other environment variables can be added here" >> ".env" diff --git a/ios/.gitignore b/ios/.gitignore new file mode 100644 index 0000000..7b46a5a --- /dev/null +++ b/ios/.gitignore @@ -0,0 +1,35 @@ +**/dgph +*.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/ephemeral/ +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/lib/core/TopScreen.dart b/lib/core/TopScreen.dart index cd3aebd..0b892bd 100644 --- a/lib/core/TopScreen.dart +++ b/lib/core/TopScreen.dart @@ -4,6 +4,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../feature/admin/AdminUserListPage.dart'; import '../feature/login/LoginScreen.dart'; +import '../feature/map/PoliceMapScreen.dart'; import '../feature/match/MatchScreen.dart'; /// TopScreen.dart @@ -25,7 +26,7 @@ class TopScreen extends ConsumerWidget { final selectedIndex = ref.watch(selectedIndexProvider); final List pages = [ - const PostScreen(), + const PoliceMapScreen(), const MatchScreen(), const LoginScreen(), const AdminUserListPage() diff --git a/lib/feature/map/provider/PoliceStationProvider.dart b/lib/feature/map/provider/PoliceStationProvider.dart index caed6cd..dc4ab0f 100644 --- a/lib/feature/map/provider/PoliceStationProvider.dart +++ b/lib/feature/map/provider/PoliceStationProvider.dart @@ -1,11 +1,13 @@ import 'dart:convert'; + import 'package:blueberry_flutter_template/model/GoogleMapPlace.dart'; +import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:http/http.dart' as http; //Google Map API key 등록 필요 -const String apiKey = ''; //TODO: 'Google Map API Key 입력 필요 +String apiKey = dotenv.env['GOOGLE_MAP_API_KEY'] ?? 'AIzaSyDEGMHYfH7pQ1ks39pXrhfmXZJRosp755w'; // Android : AndroidManifest.xml 에 API Key와 권한 추가 필요 // iOS : AppDelegate.swift, Info.plist 에 API Key와 권한 추가 필요 diff --git a/lib/main.dart b/lib/main.dart index 4b81f48..8250350 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -7,6 +7,7 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_crashlytics/firebase_crashlytics.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:intl/date_symbol_data_local.dart'; @@ -19,7 +20,6 @@ Future main() async { runZonedGuarded(() async { // 날짜 형식 초기화 WidgetsFlutterBinding.ensureInitialized(); - await initializeDateFormatting('en_US', null); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); @@ -34,6 +34,13 @@ Future main() async { FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true); } + if (kIsWeb) { + talker.info('Web environment can not use dotenv'); + } else { + await dotenv.load(fileName: '.env'); + } + + await initializeDateFormatting('en_US', null); runApp(const ProviderScope( child: MyApp(), )); diff --git a/pubspec.yaml b/pubspec.yaml index 6db711d..bbab20c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -108,6 +108,10 @@ dependencies: # map google_maps_flutter: ^2.9.0 geolocator: ^12.0.0 + flutter_dotenv: ^5.1.0 + + # apiKey + dev_dependencies: flutter_test: @@ -120,6 +124,7 @@ dev_dependencies: flutter: uses-material-design: true assets: + - .env - assets/ - assets/600x400/ - assets/300x420/