diff --git a/android/.gitignore b/android/.gitignore
index 6f56801..e89713b 100644
--- a/android/.gitignore
+++ b/android/.gitignore
@@ -11,3 +11,4 @@ GeneratedPluginRegistrant.java
key.properties
**/*.keystore
**/*.jks
+/keystore
\ No newline at end of file
diff --git a/android/app/build.gradle b/android/app/build.gradle
index be9bd90..42ac03a 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -13,12 +13,12 @@ if (flutterRoot == null) {
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
- flutterVersionCode = '1'
+ flutterVersionCode = '2'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
- flutterVersionName = '1.0'
+ flutterVersionName = '1.1'
}
apply plugin: 'com.android.application'
@@ -56,12 +56,26 @@ android {
versionName flutterVersionName
multiDexEnabled true
}
+ def keystoreProperties = new Properties()
+ def keystorePropertiesFile = rootProject.file('key.properties')
+ if (keystorePropertiesFile.exists()) {
+ keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
+ }
+
+ android {
+ signingConfigs {
+ release {
+ storeFile file('../keystore/key.jks')
+ storePassword file('../keystore/keystore.password').text.trim()
+ keyPassword file('../keystore/keystore.password').text.trim()
+ keyAlias '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
+ buildTypes {
+ release {
+ signingConfig signingConfigs.release
+ }
}
}
}
@@ -72,7 +86,11 @@ flutter {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
- implementation 'com.google.firebase:firebase-analytics'
- implementation platform('com.google.firebase:firebase-bom:26.2.0')
+ implementation ('com.google.firebase:firebase-analytics'){
+ exclude group: 'com.google.android.gms', module: 'play-services-safetynet'
+ }
+ implementation platform('com.google.firebase:firebase-bom:26.2.0'){
+ exclude group: 'com.google.android.gms', module: 'play-services-safetynet'
+ }
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 2d34af5..d94eaf0 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -8,14 +8,15 @@
+
+ android:name="com.naver.maps.map.CLIENT_ID"
+ android:value="@string/naver_client_id" />
@@ -58,7 +59,7 @@
-
+ android:value="@string/client_name" /> -->
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 db77bb4..9947bb0 100644
Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
index 17987b7..64a6804 100644
Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index 09d4391..a31f0b4 100644
Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index d5f1c8d..d3ceb50 100644
Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index 4d6372e..ccf9170 100644
Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index 6dd5f2e..80f6dab 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -1,6 +1,9 @@
- BPenPrJFNA58FMnODujH
- Dh1BA99PHE
+
+ 8e3d26kxv8
+ 라이딩 파트너 in 시흥
+
+ 6k41yNPjeQ4fHEKRVS75hZlcJRFdK8Y2hAOW3ut1
a
AIzaSyCj32TmD4nqA_LjVQh2ePvGMT3jFkBjJBE
\ No newline at end of file
diff --git a/assets/config/.env b/assets/config/.env
index 2e9c116..932045b 100644
--- a/assets/config/.env
+++ b/assets/config/.env
@@ -2,7 +2,6 @@ apiKey = 'WPe9pXWK0UdfrLNeUEzGzyNVmzOkMV5652NCfgvYT2bT38EipPBRjygmGQJuPUSmx4R7U3
endPointUrl = 'apis.data.go.kr'
path = '/1360000/VilageFcstInfoService_2.0/getUltraSrtFcst'
KAKAO_NATIVE_APP_KEY = 'b50ae09d3f49b62c4fba3b875e1b3458'
-googleApiKey = 'AIzaSyC3Fs8c3EgsidmnrpsKecNgZKFkjcNdWmM'
KAKAO_REST_API_KEY = '3e9ec562133e4e4512f3b58671e15680'
openWeatherApiKey = 'aad4827650d553baf66f95d688d9688b'
openWeatherApiBaseUrl = 'https://api.openweathermap.org/data/2.5/weather'
\ No newline at end of file
diff --git a/assets/images/places/baegot_park.jpeg b/assets/images/places/baegot_park.jpeg
deleted file mode 100644
index 01fe818..0000000
Binary files a/assets/images/places/baegot_park.jpeg and /dev/null differ
diff --git a/assets/images/places/daebu_island.jpeg b/assets/images/places/daebu_island.jpeg
deleted file mode 100644
index 755fc14..0000000
Binary files a/assets/images/places/daebu_island.jpeg and /dev/null differ
diff --git a/assets/images/places/gojan_station.png b/assets/images/places/gojan_station.png
deleted file mode 100644
index ca9d8e7..0000000
Binary files a/assets/images/places/gojan_station.png and /dev/null differ
diff --git a/assets/images/places/greenway.jpeg b/assets/images/places/greenway.jpeg
deleted file mode 100644
index 9a55d55..0000000
Binary files a/assets/images/places/greenway.jpeg and /dev/null differ
diff --git a/assets/images/places/hwajeong_river.jpeg b/assets/images/places/hwajeong_river.jpeg
deleted file mode 100644
index bdf4f06..0000000
Binary files a/assets/images/places/hwajeong_river.jpeg and /dev/null differ
diff --git a/assets/images/places/oido_station.jpeg b/assets/images/places/oido_station.jpeg
deleted file mode 100644
index be48a7e..0000000
Binary files a/assets/images/places/oido_station.jpeg and /dev/null differ
diff --git a/assets/images/places/oido_station.png b/assets/images/places/oido_station.png
deleted file mode 100644
index 82eafc1..0000000
Binary files a/assets/images/places/oido_station.png and /dev/null differ
diff --git a/assets/images/places/okgu_park.jpeg b/assets/images/places/okgu_park.jpeg
deleted file mode 100644
index 725d195..0000000
Binary files a/assets/images/places/okgu_park.jpeg and /dev/null differ
diff --git a/assets/images/places/picture_jeongwang_sports_park.jpeg b/assets/images/places/picture_jeongwang_sports_park.jpeg
new file mode 100644
index 0000000..f1cd0dc
Binary files /dev/null and b/assets/images/places/picture_jeongwang_sports_park.jpeg differ
diff --git a/assets/images/places/picture_misaeng's_bridge_2.jpg b/assets/images/places/picture_misaeng's_bridge_2.jpg
new file mode 100644
index 0000000..c9ffb6a
Binary files /dev/null and b/assets/images/places/picture_misaeng's_bridge_2.jpg differ
diff --git a/assets/images/places/picture_wolgot_station.JPG b/assets/images/places/picture_wolgot_station.JPG
new file mode 100644
index 0000000..f75ab75
Binary files /dev/null and b/assets/images/places/picture_wolgot_station.JPG differ
diff --git a/assets/images/places/wolgot_port.jpeg b/assets/images/places/wolgot_port.jpeg
deleted file mode 100644
index c5f6d3e..0000000
Binary files a/assets/images/places/wolgot_port.jpeg and /dev/null differ
diff --git a/assets/json/place.json b/assets/json/place.json
index 1b53c15..51a14e3 100644
--- a/assets/json/place.json
+++ b/assets/json/place.json
@@ -12,16 +12,16 @@
"description": "한국관광공사 사진 갤러리, 촬영자 박윤준"
},
{
- "id": "1199341197",
- "title": "갯골생태공원\n벚꽃터널",
+ "id": "FOhqoDZZ",
+ "title": "갯골생태공원 벚꽃터널",
"image": "assets/images/places/picture_gaetgol_ecological_park.jpg",
"marker": "",
- "type": "",
- "latitude": "37.3889771",
- "longitude": "126.7804387",
- "jibunAddress": "경기도 시흥시 장곡동 724-10",
- "roadAddress": "경기도 시흥시 동서로 287",
- "description": ""
+ "type": "park",
+ "latitude": "37.390592483462605",
+ "longitude": "126.78099832254267",
+ "jibunAddress": "경기 시흥시 장곡동 724-32",
+ "roadAddress": "",
+ "description": "한국관광공사 사진 갤러리, 촬영자 박윤준"
},
{
"id": "1903881322",
@@ -74,14 +74,14 @@
{
"id": "",
"title": "미생의 다리",
- "image": "assets/images/places/picture_misaeng's_bridge.jpg",
+ "image": "assets/images/places/picture_misaeng's_bridge_2.jpg",
"marker": "assets/icons/place_park.png",
"type": "park",
"latitude": "37.399584399999995",
"longitude": "126.75299469999999",
"jibunAddress": "경기도 시흥시 방산동 서해안로 779-43 미생의 다리",
"roadAddress": "",
- "description": "경기관광공사에 허락맡기"
+ "description": "한국관광공사 미생의 다리"
},
{
"id": "35795149",
@@ -180,14 +180,14 @@
{
"id": "21805866",
"title": "월곶역 자전거 대여소",
- "image": "assets/images/places/gojan_station.png",
+ "image": "assets/images/places/picture_wolgot_station.JPG",
"marker": "assets/icons/place_rental.png",
"type": "rental",
- "latitude": "37.3168245",
- "longitude": "126.8234083",
- "jibunAddress": "경기도 안산시 단원구 고잔동 453-53",
- "roadAddress": "경기도 안산시 단원구 중앙대로 784 고잔역",
- "description": ""
+ "latitude": "37.391705626349",
+ "longitude": "126.74264340883",
+ "jibunAddress": "경기도 시흥시 월곶동 992-8",
+ "roadAddress": "경기도 시흥시 월곶중앙로14번길 56",
+ "description": "교통평론가 한우진 - 출처 표기 요청"
},
{
"id": "13491554",
@@ -215,13 +215,13 @@
{
"id": "18254017",
"title": "정왕동 체육공원",
- "image": "assets/images/places/tukorea.jpeg",
+ "image": "assets/images/places/picture_jeongwang_sports_park.jpeg",
"marker": "assets/icons/place_park.png",
"type": "park",
"latitude": "37.3395459",
"longitude": "126.7579547",
"jibunAddress": "경기도 시흥시 정왕동 2158",
"roadAddress": "경기도 시흥시 역전로 50 시흥시 배드민턴장",
- "description": ""
+ "description": "한국관광공사 정왕체육공원"
}
]
\ No newline at end of file
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 20b7925..1b4fa5d 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -3,14 +3,14 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 51;
+ objectVersion = 54;
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 */; };
- 3D25AB6F477563FCA88DEC02 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A34FC3369233F441B7104D4 /* Pods_Runner.framework */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
+ 8B378DBFDD1BCDE2F935294A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 960451B7C08E54343E3F28F8 /* Pods_Runner.framework */; };
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 */; };
@@ -33,12 +33,13 @@
/* 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 = ""; };
- 3510079FFDE23BC55E1F77AF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
- 4A34FC3369233F441B7104D4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 5A0CA85F1439C7E4788BF5B7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
+ 669A09D55C9A390ED08FFC05 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; 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 = ""; };
+ 960451B7C08E54343E3F28F8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
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; };
@@ -46,9 +47,8 @@
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 = ""; };
+ D229FE4B371ACBFBB64E0CF4 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
E64E006816066BBA2F08784A /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; };
- F053357F9996A44BCEA85371 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
- F77BDDAA17B612C28D72B706 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -56,21 +56,13 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 3D25AB6F477563FCA88DEC02 /* Pods_Runner.framework in Frameworks */,
+ 8B378DBFDD1BCDE2F935294A /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- 3D34C0BAE883787B1B506866 /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- 4A34FC3369233F441B7104D4 /* Pods_Runner.framework */,
- );
- name = Frameworks;
- sourceTree = "";
- };
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
@@ -90,7 +82,7 @@
97C146EF1CF9000F007C117D /* Products */,
E64E006816066BBA2F08784A /* GoogleService-Info.plist */,
BA598395ACB5123D9C90ED27 /* Pods */,
- 3D34C0BAE883787B1B506866 /* Frameworks */,
+ B432728D5C24869593730F66 /* Frameworks */,
);
sourceTree = "";
};
@@ -117,12 +109,20 @@
path = Runner;
sourceTree = "";
};
+ B432728D5C24869593730F66 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 960451B7C08E54343E3F28F8 /* Pods_Runner.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
BA598395ACB5123D9C90ED27 /* Pods */ = {
isa = PBXGroup;
children = (
- 3510079FFDE23BC55E1F77AF /* Pods-Runner.debug.xcconfig */,
- F77BDDAA17B612C28D72B706 /* Pods-Runner.release.xcconfig */,
- F053357F9996A44BCEA85371 /* Pods-Runner.profile.xcconfig */,
+ D229FE4B371ACBFBB64E0CF4 /* Pods-Runner.debug.xcconfig */,
+ 669A09D55C9A390ED08FFC05 /* Pods-Runner.release.xcconfig */,
+ 5A0CA85F1439C7E4788BF5B7 /* Pods-Runner.profile.xcconfig */,
);
path = Pods;
sourceTree = "";
@@ -134,15 +134,15 @@
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
- 6E07D0DE6A2D2A4A57C64BC3 /* [CP] Check Pods Manifest.lock */,
+ 80E9013C9BC2F79B78D33FA2 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
- F0D3F30C4BDCF50470204166 /* [CP] Embed Pods Frameworks */,
- B9CAE31D07D9D4D83E47FDF5 /* [CP] Copy Pods Resources */,
+ 3FC5F6C807A1D1556B6D5258 /* [CP] Embed Pods Frameworks */,
+ 58331A11A4351C7788B28AB1 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -203,6 +203,7 @@
/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -215,75 +216,76 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
- 6E07D0DE6A2D2A4A57C64BC3 /* [CP] Check Pods Manifest.lock */ = {
+ 3FC5F6C807A1D1556B6D5258 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
- inputPaths = (
- "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
- "${PODS_ROOT}/Manifest.lock",
- );
- name = "[CP] Check Pods Manifest.lock";
+ name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
- );
- outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
- 9740EEB61CF901F6004384FC /* Run Script */ = {
+ 58331A11A4351C7788B28AB1 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
- inputPaths = (
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
- name = "Run Script";
- outputPaths = (
+ name = "[CP] Copy Pods Resources";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
+ showEnvVarsInLog = 0;
};
- B9CAE31D07D9D4D83E47FDF5 /* [CP] Copy Pods Resources */ = {
+ 80E9013C9BC2F79B78D33FA2 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
- name = "[CP] Copy Pods Resources";
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- F0D3F30C4BDCF50470204166 /* [CP] Embed Pods Frameworks */ = {
+ 9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
- inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ inputPaths = (
);
- name = "[CP] Embed Pods Frameworks";
- outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ name = "Run Script";
+ outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
/* End PBXShellScriptBuildPhase section */
@@ -382,6 +384,7 @@
DEVELOPMENT_TEAM = MY2M83WANL;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = "라이딩 파트너 in 시흥";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -618,6 +621,7 @@
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "i386 arm64";
INFOPLIST_FILE = Runner/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = "라이딩 파트너 in 시흥";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -745,6 +749,7 @@
DEVELOPMENT_TEAM = MY2M83WANL;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = "라이딩 파트너 in 시흥";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png
new file mode 100644
index 0000000..09b8332
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/102.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/102.png
new file mode 100644
index 0000000..a89b996
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/102.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png
new file mode 100644
index 0000000..7942584
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png
new file mode 100644
index 0000000..f9290b3
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png
new file mode 100644
index 0000000..6da7959
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png
new file mode 100644
index 0000000..480bbbf
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png
new file mode 100644
index 0000000..e313e10
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png
new file mode 100644
index 0000000..cb2d2dd
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png
new file mode 100644
index 0000000..e842885
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png
new file mode 100644
index 0000000..64ea0f5
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png
new file mode 100644
index 0000000..8f06d53
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png
new file mode 100644
index 0000000..3ac6f95
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png
new file mode 100644
index 0000000..76a15ba
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png
new file mode 100644
index 0000000..8cf295e
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png
new file mode 100644
index 0000000..95f6885
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png
new file mode 100644
index 0000000..ff64970
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png
new file mode 100644
index 0000000..b50e909
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png
new file mode 100644
index 0000000..f18a098
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png
new file mode 100644
index 0000000..7cc5340
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png
new file mode 100644
index 0000000..c42b342
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png
new file mode 100644
index 0000000..37917a2
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png
new file mode 100644
index 0000000..cef98a1
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png
new file mode 100644
index 0000000..482d9fa
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png
new file mode 100644
index 0000000..4a3d226
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png
new file mode 100644
index 0000000..a1c29a7
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png
new file mode 100644
index 0000000..d8c4c37
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png
new file mode 100644
index 0000000..cce7774
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/66.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/66.png
new file mode 100644
index 0000000..61a85b5
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/66.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png
new file mode 100644
index 0000000..79d64c0
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png
new file mode 100644
index 0000000..0708b49
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png
new file mode 100644
index 0000000..28b8f24
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png
new file mode 100644
index 0000000..f7bf390
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png
new file mode 100644
index 0000000..2698e64
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/92.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/92.png
new file mode 100644
index 0000000..3dce711
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/92.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
index d36b1fa..ffab254 100644
--- a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -1,122 +1 @@
-{
- "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"
- }
-}
+{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"idiom":"watch","filename":"172.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"38mm","scale":"2x","size":"86x86","expected-size":"172","role":"quickLook"},{"idiom":"watch","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"38mm","scale":"2x","size":"40x40","expected-size":"80","role":"appLauncher"},{"idiom":"watch","filename":"88.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"40mm","scale":"2x","size":"44x44","expected-size":"88","role":"appLauncher"},{"idiom":"watch","filename":"102.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"41mm","scale":"2x","size":"45x45","expected-size":"102","role":"appLauncher"},{"idiom":"watch","filename":"92.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"41mm","scale":"2x","size":"46x46","expected-size":"92","role":"appLauncher"},{"idiom":"watch","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"44mm","scale":"2x","size":"50x50","expected-size":"100","role":"appLauncher"},{"idiom":"watch","filename":"196.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"42mm","scale":"2x","size":"98x98","expected-size":"196","role":"quickLook"},{"idiom":"watch","filename":"216.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"44mm","scale":"2x","size":"108x108","expected-size":"216","role":"quickLook"},{"idiom":"watch","filename":"48.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"38mm","scale":"2x","size":"24x24","expected-size":"48","role":"notificationCenter"},{"idiom":"watch","filename":"55.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"42mm","scale":"2x","size":"27.5x27.5","expected-size":"55","role":"notificationCenter"},{"idiom":"watch","filename":"66.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"45mm","scale":"2x","size":"33x33","expected-size":"66","role":"notificationCenter"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"watch","role":"companionSettings","scale":"3x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"watch","role":"companionSettings","scale":"2x"},{"size":"1024x1024","expected-size":"1024","filename":"1024.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"watch-marketing","scale":"1x"},{"size":"128x128","expected-size":"128","filename":"128.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"256x256","expected-size":"256","filename":"256.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"128x128","expected-size":"256","filename":"256.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"256x256","expected-size":"512","filename":"512.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"32x32","expected-size":"32","filename":"32.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"512x512","expected-size":"512","filename":"512.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"16x16","expected-size":"16","filename":"16.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"16x16","expected-size":"32","filename":"32.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"32x32","expected-size":"64","filename":"64.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"512x512","expected-size":"1024","filename":"1024.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"}]}
\ No newline at end of file
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
deleted file mode 100644
index dc9ada4..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
deleted file mode 100644
index 28c6bf0..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
deleted file mode 100644
index 2ccbfd9..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
deleted file mode 100644
index f091b6b..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
deleted file mode 100644
index 4cde121..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
deleted file mode 100644
index d0ef06e..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
deleted file mode 100644
index dcdc230..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
deleted file mode 100644
index 2ccbfd9..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
deleted file mode 100644
index c8f9ed8..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
deleted file mode 100644
index a6d6b86..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
deleted file mode 100644
index a6d6b86..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
deleted file mode 100644
index 75b2d16..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
deleted file mode 100644
index c4df70d..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
deleted file mode 100644
index 6a84f41..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
deleted file mode 100644
index d0e1f58..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 5d5e823..f89579e 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -40,8 +40,10 @@
naverServiceAppName
라이딩 파트너 in 시흥
- googleMapApiKey
- AIzaSyARG3LSKycrXF8VAYBX52hC0XcOwH_x_Rc
+
+ NMFClientId
+ 8e3d26kxv8
+
NSAppTransportSecurity
@@ -79,7 +81,7 @@
CFBundleInfoDictionaryVersion
6.0
CFBundleName
- ridingpartner_flutter
+ 라이딩 파트너 in 시흥
CFBundlePackageType
APPL
CFBundleShortVersionString
diff --git a/lib/src/models/place.dart b/lib/src/models/place.dart
index e6e23b4..1ea557f 100644
--- a/lib/src/models/place.dart
+++ b/lib/src/models/place.dart
@@ -84,13 +84,6 @@ class NaverPlaceData {
address!.add(Address.fromJson(v));
});
}
- // if (json['all'] != null) {
- // all = [];
- // json['all'].forEach((v) {
- // all!.add(All.fromJson(v));
- // });
- // developer.log("address 2 called");
- // }
}
Map toJson() {
diff --git a/lib/src/models/position_stream.dart b/lib/src/models/position_stream.dart
index 4be1fa4..bd49c6f 100644
--- a/lib/src/models/position_stream.dart
+++ b/lib/src/models/position_stream.dart
@@ -6,6 +6,7 @@ import 'package:geolocator/geolocator.dart';
class PositionStream {
late LocationSettings locationSettings;
static final PositionStream _instance = PositionStream._internal();
+ late StreamSubscription _positionStream;
static StreamController _controller =
StreamController.broadcast();
static const int DISTANCE = 30;
@@ -21,6 +22,7 @@ class PositionStream {
//dispose
void dispose() {
_controller.close();
+ _positionStream.cancel();
}
PositionStream._internal() {
@@ -52,10 +54,12 @@ class PositionStream {
distanceFilter: DISTANCE,
);
}
- StreamSubscription positionStream =
+ _positionStream =
Geolocator.getPositionStream(locationSettings: locationSettings)
.listen((Position? pos) {
- _controller.add(pos!);
+ if (pos != null) {
+ _controller.add(pos);
+ }
});
}
}
diff --git a/lib/src/pages/day_record_page.dart b/lib/src/pages/day_record_page.dart
index ad618bd..9a4df83 100644
--- a/lib/src/pages/day_record_page.dart
+++ b/lib/src/pages/day_record_page.dart
@@ -24,21 +24,29 @@ class _DayRecordPageState extends State {
int activeIndex = 0;
@override
- Widget build(BuildContext context) {
- _recordProvider = Provider.of(context);
- num speed = 0;
+ void initState() {
+ // TODO: implement initState
+ super.initState();
+
+ Provider.of(context, listen: false).getRidingData();
+ }
- const textStyle = TextStyle(
- fontSize: 18.5,
- fontFamily: "Pretendard",
- fontWeight: FontWeight.w400,
- color: Color.fromARGB(255, 66, 66, 66));
+ static const textStyle = TextStyle(
+ fontSize: 18.5,
+ fontFamily: "Pretendard",
+ fontWeight: FontWeight.w400,
+ color: Color.fromARGB(255, 66, 66, 66));
- const recordStyle = TextStyle(
- fontSize: 18.5,
- fontFamily: "Pretendard",
- fontWeight: FontWeight.w500,
- color: Color.fromARGB(255, 66, 66, 66));
+ static const recordStyle = TextStyle(
+ fontSize: 18.5,
+ fontFamily: "Pretendard",
+ fontWeight: FontWeight.w500,
+ color: Color.fromARGB(255, 66, 66, 66));
+ num speed = 0;
+ late List? images = _record.images;
+ @override
+ Widget build(BuildContext context) {
+ _recordProvider = Provider.of(context);
Widget successWidget() => Scaffold(
appBar: appBar(context),
@@ -47,33 +55,35 @@ class _DayRecordPageState extends State {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Stack(alignment: Alignment.bottomCenter, children: [
- if(_record.images != null && _record.images!.length > 1)...[
- CarouselSlider.builder(
- options: CarouselOptions(
- initialPage: 0,
- viewportFraction: 1,
- enlargeCenterPage: true,
- onPageChanged: (index, reason) => setState(() {
- activeIndex = index;
- }),
- ),
- itemCount: _record.images!.length,
- itemBuilder: (context, index, realIndex) {
- final path = _record.images![index];
- return buildImage(path, index);
- },
- )] else if(_record.images != null && _record.images!.length == 1)...[
- SizedBox(
- width: double.infinity,
- height: 240,
- child: Image.network(_record.images![0], fit: BoxFit.cover))
- ] else...[
+ if (images == null) ...[
SizedBox(
- width: double.infinity,
- height: 240,
- child: Image.asset("assets/images/img_loading.png", fit: BoxFit.cover))
+ width: double.infinity,
+ height: 240,
+ child: Image.asset("assets/images/img_loading.png",
+ fit: BoxFit.cover))
+ ] else if (_recordProvider.record.images!.length == 1) ...[
+ SizedBox(
+ width: double.infinity,
+ height: 240,
+ child: Image.network(_recordProvider.record.images![0],
+ fit: BoxFit.cover))
+ ] else ...[
+ CarouselSlider.builder(
+ options: CarouselOptions(
+ initialPage: 0,
+ viewportFraction: 1,
+ enlargeCenterPage: true,
+ onPageChanged: (index, reason) => setState(() {
+ activeIndex = index;
+ }),
+ ),
+ itemCount: images?.length,
+ itemBuilder: (context, index, realIndex) {
+ final path = _record.images![index];
+ return buildImage(path);
+ },
+ )
],
-
Align(alignment: Alignment.bottomCenter, child: buildIndicator())
]),
Container(
@@ -117,13 +127,26 @@ class _DayRecordPageState extends State {
style: recordStyle),
Text(timestampToText(_record.timestamp),
style: recordStyle),
- Text("${_record.distance / _record.timestamp} km/h",
- style: recordStyle),
- Text("${_record.distance / 1000} km",
- style: recordStyle),
+ if (_record.timestamp != 0) ...[
+ Text(
+ "${(_record.distance / _record.timestamp).toStringAsFixed(1)} km/h",
+ style: recordStyle)
+ ] else ...[
+ const Text("0.0 km/h", style: recordStyle)
+ ],
Text(
- "${(hKcal * (_record.timestamp) / 3600).toStringAsFixed(1)} kcal",
- style: recordStyle)
+ "${(_record.distance / 1000).toStringAsFixed(2)} km",
+ style: recordStyle),
+ if (_record.distance == 0) ...[
+ const Text(
+ '0 kcal',
+ style: recordStyle,
+ )
+ ] else ...[
+ Text(
+ "${(hKcal * (_record.timestamp) / 3600).toStringAsFixed(1)} kcal",
+ style: recordStyle)
+ ]
],
),
),
@@ -154,7 +177,6 @@ class _DayRecordPageState extends State {
switch (_recordProvider.recordState) {
case RecordState.loading:
- _recordProvider.getRidingData();
return loadingWidget();
case RecordState.fail:
return failWidget();
@@ -171,9 +193,10 @@ class _DayRecordPageState extends State {
Widget loadingWidget() => Scaffold(
appBar: appBar(context),
resizeToAvoidBottomInset: false,
- body: const CircularProgressIndicator(
+ body: const Center(
+ child: CircularProgressIndicator(
color: Color.fromARGB(0xFF, 0xEE, 0x75, 0x00),
- ));
+ )));
Widget failWidget() => Scaffold(
appBar: appBar(context),
@@ -182,7 +205,7 @@ class _DayRecordPageState extends State {
child: Text('데이터를 불러오는 데에 실패했습니다'),
));
- Widget buildImage(path, index) => Container(
+ Widget buildImage(path) => Container(
width: double.infinity,
height: 240,
color: Colors.grey,
diff --git a/lib/src/pages/home_page.dart b/lib/src/pages/home_page.dart
index b976eb8..b0a4f9e 100644
--- a/lib/src/pages/home_page.dart
+++ b/lib/src/pages/home_page.dart
@@ -1,9 +1,8 @@
-import 'dart:developer' as developer;
+import 'dart:ui' as ui;
import 'package:flutter/material.dart';
import 'package:line_chart/charts/line-chart.widget.dart';
import 'package:line_chart/model/line-chart.model.dart';
-import 'package:percent_indicator/circular_percent_indicator.dart';
import 'package:provider/provider.dart';
import 'package:ridingpartner_flutter/src/models/place.dart';
import 'package:ridingpartner_flutter/src/models/record.dart';
@@ -49,15 +48,7 @@ class _HomePageState extends State
late TabController _tabController;
int state = 0;
- List data = [
- LineChartModel(amount: 300, date: DateTime(2020, 1, 1)),
- LineChartModel(amount: 200, date: DateTime(2020, 1, 2)),
- LineChartModel(amount: 300, date: DateTime(2020, 1, 3)),
- LineChartModel(amount: 500, date: DateTime(2020, 1, 4)),
- LineChartModel(amount: 800, date: DateTime(2020, 1, 5)),
- LineChartModel(amount: 200, date: DateTime(2020, 1, 6)),
- LineChartModel(amount: 120, date: DateTime(2020, 1, 7)),
- ];
+ List data = [];
// int _counter = 0;
@@ -76,6 +67,7 @@ class _HomePageState extends State
fontSize: 14,
fontWeight: FontWeight.w400,
color: Color.fromARGB(185, 51, 57, 62));
+ GlobalKey _one = GlobalKey();
@override
Widget build(BuildContext context) {
@@ -416,7 +408,9 @@ class _HomePageState extends State
child: const Text('라이딩한 기록이 없습니다'),
);
} else {
- Data distance = Data('거리', '${record.distance / 1000}km',
+ Data distance = Data(
+ '거리',
+ '${((record.distance / 10).roundToDouble()) / 100}km',
'assets/icons/home_distance.png');
Data time = Data('시간', timestampToText(record.timestamp),
'assets/icons/home_time.png');
@@ -430,7 +424,9 @@ class _HomePageState extends State
} catch (e) {
speed = Data('평균 속도', '0km/h', 'assets/icons/home_speed.png');
}
- Data speedMax = Data('순간 최고 속도', '${record.topSpeed}m/s',
+ Data speedMax = Data(
+ '순간 최고 속도',
+ '${record.topSpeed.toStringAsFixed(1)} km/h',
'assets/icons/home_max_speed.png');
return Container(
@@ -548,12 +544,6 @@ class _HomePageState extends State
fontFamily: 'Pretendard',
fontWeight: FontWeight.w700,
color: Color.fromRGBO(51, 51, 51, 1))),
- // Text('km',
- // style: TextStyle(
- // fontSize: 12,
- // fontFamily: 'Pretendard',
- // fontWeight: FontWeight.w300,
- // color: Color.fromRGBO(51, 51, 51, 1))),
],
),
Container(
@@ -586,7 +576,7 @@ class _HomePageState extends State
color: Color.fromRGBO(51, 51, 51, 1))),
),
Container(
- padding: EdgeInsets.only(bottom: 10),
+ padding: const EdgeInsets.only(bottom: 10),
child: const VerticalDivider(
width: 1,
color: Color.fromRGBO(234, 234, 234, 1),
@@ -614,16 +604,16 @@ class _HomePageState extends State
}
Widget customLineChart() {
- Paint circlePaint = Paint()
- ..color = const Color.fromARGB(0xFF, 0xFB, 0x95, 0x32);
+ Paint circlePaint = Paint()..color = ui.Color.fromARGB(109, 255, 177, 104);
Paint insideCirclePaint = Paint()
- ..color = const Color.fromARGB(0xFF, 0xFB, 0x95, 0x32);
+ ..color = ui.Color.fromARGB(255, 255, 147, 40);
Paint linePaint = Paint()
..strokeWidth = 1
..style = PaintingStyle.stroke
..color = Colors.orange;
+
return LineChart(
width: MediaQuery.of(context).size.width - 110,
height: 120,
@@ -643,12 +633,8 @@ class _HomePageState extends State
color: Colors.deepOrange,
),
insideCirclePaint: insideCirclePaint,
- onValuePointer: (LineChartModelCallback value) {
- print('${value.chart} ${value.percentage}');
- },
- onDropPointer: () {
- print('onDropPointer');
- },
+ onValuePointer: (LineChartModelCallback value) {},
+ onDropPointer: () {},
);
}
@@ -830,95 +816,10 @@ class _HomePageState extends State
);
}
- Widget recordRateProgress(double distance) {
- double percent = distance / 1000;
- if (percent > 1) {
- percent = 1;
- }
- return SizedBox(
- width: MediaQuery.of(context).size.width,
- child: Card(
- child: Stack(
- children: [
- Positioned(
- left: 0,
- child: Column(
- children: [
- const Text(
- '오늘의 목표거리 달성률',
- style: TextStyle(
- fontSize: recordFontSize, color: Colors.black54),
- ),
- Text(
- '${distance / 1000}km / 10km',
- style: const TextStyle(
- fontSize: recordFontSize, color: Colors.black54),
- )
- ],
- )),
- Positioned(
- right: 0,
- child: CircularPercentIndicator(
- percent: percent,
- radius: 100,
- backgroundColor: Colors.black12,
- progressColor:
- const Color.fromARGB(0xFF, 0xFB, 0x95, 0x32)))
- ],
- )));
- }
-
- // Widget? floatingButtons() {
- // return SpeedDial(
- // animatedIcon: AnimatedIcons.menu_close,
- // visible: true,
- // curve: Curves.bounceIn,
- // backgroundColor: const Color.fromARGB(0xFF, 0xFB, 0x95, 0x32),
- // children: [
- // SpeedDialChild(
- // child: const Icon(Icons.settings_sharp, color: Colors.white),
- // label: "설정",
- // labelStyle: const TextStyle(
- // fontWeight: FontWeight.w500,
- // color: Colors.white,
- // fontSize: 13.0),
- // backgroundColor: const Color.fromARGB(0xFF, 0xFB, 0x95, 0x32),
- // labelBackgroundColor: const Color.fromARGB(0xFF, 0xFB, 0x95, 0x32),
- // onTap: () {
- // Navigator.of(context).push(MaterialPageRoute(
- // builder: (context) => ChangeNotifierProvider(
- // create: (context) => SettingProvider(),
- // child: const SettingPage(),
- // )));
- // }),
- // SpeedDialChild(
- // child: const Icon(
- // Icons.add_chart_rounded,
- // color: Colors.white,
- // ),
- // label: "내 기록",
- // backgroundColor: const Color.fromARGB(0xFF, 0xFB, 0x95, 0x32),
- // labelBackgroundColor: const Color.fromARGB(0xFF, 0xFB, 0x95, 0x32),
- // labelStyle: const TextStyle(
- // fontWeight: FontWeight.w500, color: Colors.white, fontSize: 13.0),
- // onTap: () {
- // Navigator.of(context).push(MaterialPageRoute(
- // builder: (context) => ChangeNotifierProvider(
- // create: (context) => RecordListProvider(),
- // child: const RecordListPage(),
- // )));
- // },
- // )
- // ],
- // );
- // }
-
int _getMaxDistance(List records) {
double maxDistance = 0;
int recoredCount = 0;
for (var element in records) {
- developer.log('반복 횟수${recoredCount++}');
- developer.log(element.distance.toString());
if (element.distance > maxDistance) {
maxDistance = element.distance;
}
@@ -938,14 +839,17 @@ class _HomePageState extends State
}
void _incrementCounter(List _records) {
- setState(() {
- data = [];
- for (var element in _records) {
- if (element.date != '') {
- DateTime day = element.getYearMonthDay();
- data.add(LineChartModel(amount: element.distance, date: day));
- }
+ List dataIn7days =
+ (((_records.reversed).toList()).sublist(0, 7)).reversed.toList();
+ List model = [];
+ for (var element in dataIn7days) {
+ if (element.date != '') {
+ DateTime day = element.getYearMonthDay();
+ model.add(LineChartModel(amount: element.distance, date: day));
}
+ }
+ setState(() {
+ data = model;
});
}
diff --git a/lib/src/pages/loding_page.dart b/lib/src/pages/loding_page.dart
index dbe89f3..45833a8 100644
--- a/lib/src/pages/loding_page.dart
+++ b/lib/src/pages/loding_page.dart
@@ -114,7 +114,6 @@ class _LodingPageState extends State {
height: 20,
),
_kakaoLoginButton(),
- _naverLoginButton(),
_googleLoginButton(),
_appleLoginButton(),
Container(
diff --git a/lib/src/pages/map_search_page.dart b/lib/src/pages/map_search_page.dart
index 6fae6ad..4691b6d 100644
--- a/lib/src/pages/map_search_page.dart
+++ b/lib/src/pages/map_search_page.dart
@@ -1,8 +1,7 @@
import 'dart:async';
-import 'dart:developer' as developer;
import 'package:flutter/material.dart';
-import 'package:google_maps_flutter/google_maps_flutter.dart';
+import 'package:flutter_naver_map/flutter_naver_map.dart';
import 'package:provider/provider.dart';
import 'package:ridingpartner_flutter/src/models/place.dart';
import 'package:ridingpartner_flutter/src/pages/navigation_page.dart';
@@ -11,7 +10,6 @@ import 'package:ridingpartner_flutter/src/utils/user_location.dart';
import '../provider/map_search_provider.dart';
import '../provider/riding_provider.dart';
-import '../utils/custom_marker.dart';
class MapSearchPage extends StatefulWidget {
const MapSearchPage({super.key});
@@ -21,11 +19,13 @@ class MapSearchPage extends StatefulWidget {
}
class MapSampleState extends State {
- final Completer _controller = Completer();
final FocusNode _destinationFocusNode = FocusNode();
final FocusNode _startFocusNode = FocusNode();
final _destinationTextController = TextEditingController();
final _startTextController = TextEditingController();
+ Completer _controller = Completer();
+ LocationTrackingMode _locationTrackingMode = LocationTrackingMode.None;
+ late List _markers = [];
final int polylineWidth = 5;
bool searchboxVisible = true;
int startMarkerId = 0;
@@ -61,13 +61,11 @@ class MapSampleState extends State {
fontSize: 12,
fontWeight: FontWeight.w200);
- var _initLocation = CameraPosition(
- target: LatLng(
- MyLocation().position!.latitude, MyLocation().position!.longitude),
- zoom: 14.4746,
- );
- final _markers = [];
-
+ // var _initLocation = CameraPosition(
+ // target: LatLng(
+ // MyLocation().position!.latitude, MyLocation().position!.longitude),
+ // zoom: 14.4746,
+ // );
@override
void initState() {
super.initState();
@@ -91,7 +89,6 @@ class MapSampleState extends State {
"현재 위치: ${Provider.of(context, listen: false).myLocationAddress}";
_markers.clear();
- _initLoaction();
});
}
@@ -110,28 +107,25 @@ class MapSampleState extends State {
return Scaffold(
body: Stack(
children: [
- GoogleMap(
- mapType: MapType.normal,
- onTap: (latlng) {
+ NaverMap(
+ onMapCreated: onMapCreated,
+ mapType: MapType.Basic,
+ locationButtonEnable: false,
+ initLocationTrackingMode: _locationTrackingMode,
+ markers: _markers,
+ onMapTap: (latLng) {
_startFocusNode.unfocus();
_destinationFocusNode.unfocus();
},
- polylines: {
- Polyline(
- polylineId: const PolylineId("route"),
- color: const Color.fromARGB(0xFF, 0xFB, 0x95, 0x32),
- width: polylineWidth,
- startCap: Cap.roundCap,
- endCap: Cap.roundCap,
- points: mapSearchProvider.polylinePoints)
- },
- markers: Set.from(_markers),
- initialCameraPosition: _initLocation,
- onMapCreated: (GoogleMapController controller) {
- _controller.complete(controller);
- },
- myLocationButtonEnabled: false,
- myLocationEnabled: true,
+ pathOverlays: mapSearchProvider.polylinePoints.length > 1
+ ? {
+ PathOverlay(
+ PathOverlayId('path'), mapSearchProvider.polylinePoints,
+ width: polylineWidth,
+ outlineWidth: 0,
+ color: const Color.fromARGB(0xFF, 0xFB, 0x95, 0x32))
+ }
+ : {},
),
Visibility(
visible: searchboxVisible,
@@ -182,6 +176,7 @@ class MapSampleState extends State {
bottom: buttonsPositionAlpha + 50,
left: 20,
child: FloatingActionButton(
+ heroTag: 'mypos',
backgroundColor: Colors.white,
child: ImageIcon(
const AssetImage('assets/icons/search_myLocation_button.png'),
@@ -211,6 +206,11 @@ class MapSampleState extends State {
);
}
+ void onMapCreated(NaverMapController controller) {
+ if (_controller.isCompleted) _controller = Completer();
+ _controller.complete(controller);
+ }
+
Widget placeList(MapSearchProvider mapSearchProvider, String type,
List list, TextEditingController textController) {
return Flexible(
@@ -235,7 +235,7 @@ class MapSampleState extends State {
textColor: Colors.black,
tileColor: _searchBoxColor,
onTap: () async {
- final GoogleMapController controller =
+ final NaverMapController controller =
await _controller.future;
// if (index == 0) {
@@ -250,13 +250,13 @@ class MapSampleState extends State {
} else {
FocusManager.instance.primaryFocus?.unfocus();
}
- controller.animateCamera(CameraUpdate.newCameraPosition(
- CameraPosition(
+ controller.moveCamera(
+ CameraUpdate.toCameraPosition(CameraPosition(
target: LatLng(double.parse(list[index].latitude!),
double.parse(list[index].longitude!)),
- zoom: 20,
- ),
- ));
+ )),
+ );
+
_updatePosition(list[index], type, mapSearchProvider);
if (type == "출발지") {
mapSearchProvider.setStartPoint(list[index]);
@@ -265,8 +265,6 @@ class MapSampleState extends State {
mapSearchProvider.setEndPoint(list[index]);
mapSearchProvider.clearEndPointSearchResult();
}
- developer.log('출발지: ${mapSearchProvider.startPoint}');
- developer.log('도착지: ${mapSearchProvider.destination}');
if (mapSearchProvider.startPoint != null &&
mapSearchProvider.destination != null) {
@@ -368,7 +366,6 @@ class MapSampleState extends State {
shape:
const BeveledRectangleBorder(borderRadius: BorderRadius.zero),
elevation: 10,
- heroTag: 'navigateStartBtn',
onPressed: () {
if (mapSearchProvider.destination == null) {
ScaffoldMessenger.of(context).showSnackBar(
@@ -410,8 +407,8 @@ class MapSampleState extends State {
Future _updatePosition(
Place position, String type, MapSearchProvider mapSearchProvider) async {
- final customIcon = await CustomMarker()
- .getPictuerMarker('assets/icons/search_riding_marker.png');
+ final customIcon = await OverlayImage.fromAssetImage(
+ assetName: 'assets/icons/search_riding_marker.png');
int index;
if (type == "출발지") {
index = 0;
@@ -423,11 +420,12 @@ class MapSampleState extends State {
_markers.insert(
index,
Marker(
+ width: 30,
+ height: 40,
icon: customIcon,
- markerId: MarkerId('${position.latitude!}${position.longitude!}'),
+ markerId: '${position.latitude!}${position.longitude!}',
position: LatLng(double.parse(position.latitude!),
double.parse(position.longitude!)),
- draggable: true,
));
if (_markers.length > 2) {
_markers.removeAt(1);
@@ -441,15 +439,16 @@ class MapSampleState extends State {
_markers.clear();
}
_markers.add(
- // 출발지와 도착지 마커를 구분하기 위해 index를 사용
- Marker(
- icon: customIcon,
- markerId: MarkerId('${position.latitude!}${position.longitude!}'),
- position: LatLng(double.parse(position.latitude!),
- double.parse(position.longitude!)),
- draggable: true,
- ),
- );
+ // 출발지와 도착지 마커를 구분하기 위해 index를 사용
+ Marker(
+ icon: customIcon,
+ width: 30,
+ height: 40,
+ markerId: '${position.latitude!}${position.longitude!}',
+ position: LatLng(
+ double.parse(position.latitude!), double.parse(position.longitude!)),
+ ));
+
setState(() {});
}
@@ -482,8 +481,7 @@ class MapSampleState extends State {
void _drawPolyline(MapSearchProvider mapSearchProvider, Place startPlace,
Place finalDestination) async {
- final GoogleMapController controller = await _controller.future;
- final List polylineCoordinates = [];
+ final NaverMapController controller = await _controller.future;
mapSearchProvider.polyline(startPlace, finalDestination);
LatLng start = LatLng(double.parse(startPlace.latitude!),
double.parse(startPlace.longitude!));
@@ -514,24 +512,24 @@ class MapSampleState extends State {
sLon = northEast.longitude;
nLon = southWest.longitude;
}
- controller.animateCamera(CameraUpdate.newLatLngBounds(
+ controller.moveCamera(
+ CameraUpdate.fitBounds(
LatLngBounds(
northeast: LatLng(nLat, nLon),
southwest: LatLng(sLat, sLon),
),
- 100));
+ padding: 48,
+ ),
+ );
}
void _initLoaction() async {
- final GoogleMapController controller = await _controller.future;
- final myLocation = MyLocation();
- await myLocation.getMyCurrentLocation();
- _initLocation = CameraPosition(
- target:
- LatLng(myLocation.position!.latitude, myLocation.position!.longitude),
- zoom: 14.4746,
- );
+ final NaverMapController controller = await _controller.future;
- controller.animateCamera(CameraUpdate.newCameraPosition(_initLocation));
+ controller.moveCamera(CameraUpdate.toCameraPosition(CameraPosition(
+ target: LatLng(
+ MyLocation().position!.latitude, MyLocation().position!.longitude),
+ zoom: 14.4746,
+ )));
}
}
diff --git a/lib/src/pages/navigation_page.dart b/lib/src/pages/navigation_page.dart
index df7d10a..01d8acd 100644
--- a/lib/src/pages/navigation_page.dart
+++ b/lib/src/pages/navigation_page.dart
@@ -1,9 +1,6 @@
import 'dart:async';
-import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-import 'package:geolocator/geolocator.dart';
-import 'package:google_maps_flutter/google_maps_flutter.dart';
+import 'package:flutter_naver_map/flutter_naver_map.dart';
import 'package:percent_indicator/linear_percent_indicator.dart';
import 'package:provider/provider.dart';
import 'package:ridingpartner_flutter/src/pages/record_page.dart';
@@ -15,8 +12,6 @@ import 'package:ridingpartner_flutter/src/utils/timestampToText.dart';
import 'package:ridingpartner_flutter/src/widgets/dialog.dart';
import 'package:wakelock/wakelock.dart';
-import '../utils/bytesFromAsset.dart';
-
class NavigationPage extends StatefulWidget {
const NavigationPage({super.key});
@@ -28,21 +23,20 @@ class _NavigationPageState extends State {
late NavigationProvider _navigationProvider;
late RidingProvider _ridingProvider;
- Completer _controller = Completer();
+ LocationTrackingMode _locationTrackingMode = LocationTrackingMode.None;
+ late List _markers = [];
+ // late OverlayImage _markerIcon;
+ Completer _controller = Completer();
LatLng initCameraPosition = const LatLng(37.37731944, 126.8050778);
- Set markers = {};
late String? userProfile;
- double bearing = 180;
- late BitmapDescriptor myPositionIcon;
+ double floatingBtnPosition = 80;
@override
void initState() {
super.initState();
- FirebaseAuth auth = FirebaseAuth.instance;
- userProfile = auth.currentUser?.photoURL;
-
_navigationProvider =
Provider.of(context, listen: false);
+ Provider.of(context, listen: false).getLocation();
setMapComponent();
}
@@ -51,64 +45,85 @@ class _NavigationPageState extends State {
await _navigationProvider.getRoute();
setRouteMarkers();
- if (_navigationProvider.position != null) {
- initCameraPosition = LatLng(
- (_navigationProvider.position!.latitude +
- double.parse(_navigationProvider.course.last.latitude!)) /
- 2,
- ((_navigationProvider.position!.longitude) +
- double.parse(_navigationProvider.course.last.longitude!)) /
- 2);
- final Uint8List markerIcon =
- await getBytesFromAsset('assets/icons/my_location.png', 200);
-
- myPositionIcon = BitmapDescriptor.fromBytes(markerIcon);
-
- markers.add(Marker(
- anchor: const Offset(0, 0),
- icon: BitmapDescriptor.fromBytes(markerIcon),
- markerId: const MarkerId("currentPosition"),
- position: LatLng(_navigationProvider.position!.latitude,
- _navigationProvider.position!.longitude),
- ));
- } else {
- initCameraPosition = const LatLng(37.37731944, 126.8050778);
- }
+ // if (_navigationProvider.position != null) {
+ // _markerIcon = await OverlayImage.fromAssetImage(
+ // assetName: 'assets/icons/my_location.png');
+
+ // _markers.add(Marker(
+ // icon: _markerIcon,
+ // width: 65,
+ // height: 65,
+ // markerId: "currentPosition",
+ // position: LatLng(_navigationProvider.position!.latitude,
+ // _navigationProvider.position!.longitude),
+ // ));
+ // }
}
Future setRouteMarkers() async {
- final Uint8List turnMarkerIcon =
- await getBytesFromAsset('assets/icons/marker_orange.png', 80);
- final Uint8List startMarkerIcon =
- await getBytesFromAsset('assets/icons/marker_start.png', 80);
- final Uint8List destinationMarkerIcon =
- await getBytesFromAsset('assets/icons/marker_destination.png', 80);
-
- List markerList = _navigationProvider.course
+ final OverlayImage turnMarkerIcon = await OverlayImage.fromAssetImage(
+ assetName: 'assets/icons/marker_orange.png');
+ final OverlayImage startMarkerIcon = await OverlayImage.fromAssetImage(
+ assetName: 'assets/icons/marker_start.png');
+ final OverlayImage destinationMarkerIcon =
+ await OverlayImage.fromAssetImage(
+ assetName: 'assets/icons/marker_destination.png');
+
+ _markers = _navigationProvider.course
.map((course) => Marker(
- icon: BitmapDescriptor.fromBytes(turnMarkerIcon),
- markerId: MarkerId(course.title ?? ""),
+ width: 30,
+ height: 40,
+ icon: turnMarkerIcon,
+ markerId: course.title ?? "",
position: LatLng(double.parse(course.latitude!),
double.parse(course.longitude!))))
.toList();
- markerList[0] = Marker(
- icon: BitmapDescriptor.fromBytes(startMarkerIcon),
- markerId: MarkerId(_navigationProvider.course[0].title ?? ""),
- position: LatLng(double.parse(_navigationProvider.course[0].latitude!),
- double.parse(_navigationProvider.course[0].longitude!)));
-
- markerList.last = Marker(
- icon: BitmapDescriptor.fromBytes(destinationMarkerIcon),
- markerId: MarkerId(_navigationProvider.course.last.title ?? ""),
+ _markers.last = Marker(
+ icon: destinationMarkerIcon,
+ width: 30,
+ height: 50,
+ markerId: _navigationProvider.course.last.title ?? "",
position: LatLng(
double.parse(_navigationProvider.course.last.latitude!),
- double.parse(_navigationProvider.course[0].longitude!)));
-
- markers = markerList.toSet();
+ double.parse(_navigationProvider.course.last.longitude!)));
+ if (_navigationProvider.course.length == 1) {
+ _markers.add(Marker(
+ icon: startMarkerIcon,
+ width: 30,
+ height: 50,
+ markerId: _navigationProvider.course[0].title ?? "",
+ position: LatLng(_navigationProvider.position!.latitude,
+ _navigationProvider.position!.longitude)));
+
+ double lat = (_navigationProvider.position!.latitude +
+ double.parse(_navigationProvider.course.last.latitude!)) /
+ 2;
+ double lon = (_navigationProvider.position!.longitude +
+ double.parse(_navigationProvider.course.last.longitude!)) /
+ 2;
+ initCameraPosition = LatLng(lat, lon);
+ } else {
+ _markers[0] = Marker(
+ icon: startMarkerIcon,
+ width: 30,
+ height: 50,
+ markerId: _navigationProvider.course[0].title ?? "",
+ position: LatLng(
+ double.parse(_navigationProvider.course[0].latitude!),
+ double.parse(_navigationProvider.course[0].longitude!)));
+
+ double lat = (double.parse(_navigationProvider.course[0].latitude!) +
+ double.parse(_navigationProvider.course.last.latitude!)) /
+ 2;
+ double lon = (double.parse(_navigationProvider.course[0].longitude!) +
+ double.parse(_navigationProvider.course.last.longitude!)) /
+ 2;
+ initCameraPosition = LatLng(lat, lon);
+ }
}
- int polylineWidth = 5;
+ int polylineWidth = 7;
TextStyle plainStyle = const TextStyle(
fontSize: 12,
fontFamily: 'Pretendard',
@@ -120,37 +135,26 @@ class _NavigationPageState extends State {
_navigationProvider = Provider.of(context);
_ridingProvider = Provider.of(context);
- Position? position = _navigationProvider.position;
-
- void setController() async {
- GoogleMapController googleMapController = await _controller.future;
- if (position != null) {
- if (_navigationProvider.bearingPoint != null) {
- bearing = Geolocator.bearingBetween(
- position.latitude,
- position.longitude,
- _navigationProvider.bearingPoint!.latitude,
- _navigationProvider.bearingPoint!.longitude);
- }
- googleMapController.animateCamera(CameraUpdate.newCameraPosition(
- CameraPosition(
- target: LatLng(position.latitude, position.longitude),
- zoom: 19,
- bearing: bearing)));
-
- markers.removeWhere(
- (element) => element.markerId.value == 'currentPosition');
- markers.add(Marker(
- icon: myPositionIcon,
- markerId: const MarkerId('currentPosition'),
- position: LatLng(position.latitude, position.longitude)));
- }
- }
-
- if (_ridingProvider.state == RidingState.riding) {
- setController();
+ if (_ridingProvider.state == RidingState.error) {
+ ScaffoldMessenger.of(context).showSnackBar(
+ const SnackBar(
+ content: Text('사용자 위치를 불러올 수 없습니다.'),
+ ),
+ );
}
-
+ // if (_ridingProvider.state == RidingState.riding) {
+ // if (position != null) {
+ // _markers = [
+ // Marker(
+ // anchor: AnchorPoint(0.5, 0.5),
+ // markerId: "currentLocation",
+ // width: 65,
+ // height: 65,
+ // icon: _markerIcon,
+ // position: LatLng(position.latitude, position.longitude))
+ // ];
+ // }
+ // }
Widget failMessageWidget() {
switch (_navigationProvider.searchRouteState) {
case SearchRouteState.loading:
@@ -205,35 +209,57 @@ class _NavigationPageState extends State {
elevation: 10,
),
body: _navigationProvider.searchRouteState ==
- SearchRouteState.success
+ SearchRouteState.success &&
+ _navigationProvider.position != null
? Stack(
alignment: Alignment.bottomCenter,
children: [
- GoogleMap(
- mapType: MapType.normal,
+ NaverMap(
initialCameraPosition: CameraPosition(
- target: initCameraPosition, zoom: 13),
- polylines: {
- Polyline(
- polylineId: const PolylineId("route"),
- color:
- const Color.fromARGB(0xFF, 0xFB, 0x95, 0x32),
- width: polylineWidth,
- startCap: Cap.roundCap,
- endCap: Cap.roundCap,
- points: _navigationProvider.polylinePoints)
- },
- onMapCreated: (GoogleMapController controller) {
- _controller.complete(controller);
- },
- myLocationButtonEnabled: false,
- myLocationEnabled: false,
- markers: markers,
- compassEnabled: false,
+ target: initCameraPosition, zoom: 10),
+ onMapCreated: onMapCreated,
+ pathOverlays:
+ _navigationProvider.polylinePoints.length > 1
+ ? {
+ PathOverlay(PathOverlayId('path'),
+ _navigationProvider.polylinePoints,
+ width: polylineWidth,
+ outlineWidth: 0,
+ color: const Color.fromARGB(
+ 0xFF, 0xFB, 0x95, 0x32))
+ }
+ : {},
+ mapType: MapType.Basic,
+ initLocationTrackingMode: _locationTrackingMode,
+ locationButtonEnable: true,
+ markers: _markers,
),
Positioned(top: 0, child: guideWidget()),
Positioned(
- bottom: 0, child: record(_ridingProvider.state))
+ bottom: 0, child: record(_ridingProvider.state)),
+ Positioned(
+ bottom: floatingBtnPosition,
+ left: 20,
+ child: FloatingActionButton(
+ heroTag: 'mypos',
+ backgroundColor: Colors.white,
+ child: const ImageIcon(
+ AssetImage(
+ 'assets/icons/search_myLocation_button.png'),
+ color: Color.fromRGBO(240, 120, 5, 1)),
+ onPressed: () async {
+ final controller = await _controller.future;
+ await controller.moveCamera(
+ CameraUpdate.toCameraPosition(CameraPosition(
+ target: LatLng(
+ _ridingProvider.position!.latitude,
+ _ridingProvider.position!.longitude),
+ zoom: 18)));
+ controller.setLocationTrackingMode(
+ LocationTrackingMode.Face);
+ },
+ ),
+ ),
// changeButton(_navigationProvider.ridingState)
],
)
@@ -248,6 +274,13 @@ class _NavigationPageState extends State {
});
}
+ void onMapCreated(NaverMapController controller) {
+ if (_controller.isCompleted) _controller = Completer();
+ _controller.complete(controller);
+
+ setCamera();
+ }
+
Widget guideWidget() {
String iconRoute = turnIcon[_navigationProvider.goalPoint.turn] ??
'assets/icons/navigation_straight.png';
@@ -305,7 +338,7 @@ class _NavigationPageState extends State {
fontWeight: FontWeight.w400,
color: Color.fromRGBO(52, 58, 64, 1));
- if (state == RidingState.before) {
+ if (state == RidingState.before || state == RidingState.error) {
return InkWell(
child: Container(
color: const Color.fromRGBO(240, 120, 5, 1),
@@ -322,16 +355,30 @@ class _NavigationPageState extends State {
textAlign: TextAlign.center,
),
),
- onTap: () {
- _ridingProvider.startRiding();
- _navigationProvider.startNavigation();
- screenKeepOn();
- polylineWidth = 8;
+ onTap: () async {
+ try {
+ floatingBtnPosition = 200;
+ _ridingProvider.startRiding();
+ _navigationProvider.startNavigation();
+ screenKeepOn();
+ polylineWidth = 8;
+ final controller = await _controller.future;
+ controller.moveCamera(CameraUpdate.toCameraPosition(CameraPosition(
+ target: LatLng(_navigationProvider.position!.latitude,
+ _navigationProvider.position!.longitude),
+ zoom: 17)));
+ } catch (e) {
+ ScaffoldMessenger.of(context).showSnackBar(
+ const SnackBar(
+ content: Text('주행을 시작하는 데에 실패했습니다'),
+ ),
+ );
+ }
},
);
} else {
return Container(
- margin: const EdgeInsets.symmetric(horizontal: 20, vertical: 40),
+ margin: const EdgeInsets.symmetric(horizontal: 10, vertical: 40),
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
@@ -371,8 +418,7 @@ class _NavigationPageState extends State {
children: [
const Text('남은거리', style: titleStyle),
Text(
- ("${(((_navigationProvider.remainedDistance) / 100).roundToDouble()) / 10}km")
- .toString(),
+ ("${(((_navigationProvider.remainedDistance) / 100).roundToDouble()) / 10}km"),
style: dataStyle,
)
],
@@ -385,7 +431,7 @@ class _NavigationPageState extends State {
style: titleStyle,
),
Text(
- "${_ridingProvider.speed.roundToDouble()}km/h",
+ "${_ridingProvider.speed.toStringAsFixed(1)}km/h",
style: dataStyle,
)
],
@@ -558,6 +604,58 @@ class _NavigationPageState extends State {
}
}
+ void setCamera() async {
+ final controller = await _controller.future;
+ LatLng start;
+ LatLng end;
+ if (_navigationProvider.course.length > 1) {
+ start = LatLng(double.parse(_navigationProvider.course[0].latitude!),
+ double.parse(_navigationProvider.course[0].longitude!));
+ end = LatLng(double.parse(_navigationProvider.course.last.latitude!),
+ double.parse(_navigationProvider.course.last.longitude!));
+ } else {
+ start = LatLng(
+ _navigationProvider.position!.latitude,
+ _navigationProvider.position!.longitude,
+ );
+ end = LatLng(double.parse(_navigationProvider.course.last.latitude!),
+ double.parse(_navigationProvider.course.last.longitude!));
+ }
+ if (start.latitude <= end.latitude) {
+ LatLng temp = start;
+ start = end;
+ end = temp;
+ }
+ LatLng northEast = start;
+ LatLng southWest = end;
+
+ var nLat, nLon, sLat, sLon;
+
+ if (southWest.latitude <= northEast.latitude) {
+ sLat = southWest.latitude;
+ nLat = northEast.latitude;
+ } else {
+ sLat = northEast.latitude;
+ nLat = southWest.latitude;
+ }
+ if (southWest.longitude <= northEast.longitude) {
+ sLon = southWest.longitude;
+ nLon = northEast.longitude;
+ } else {
+ sLon = northEast.longitude;
+ nLon = southWest.longitude;
+ }
+ controller.moveCamera(
+ CameraUpdate.fitBounds(
+ LatLngBounds(
+ northeast: LatLng(nLat, nLon),
+ southwest: LatLng(sLat, sLon),
+ ),
+ padding: 48,
+ ),
+ );
+ }
+
void screenKeepOn() async {
if (!(await Wakelock.enabled)) {
Wakelock.enable();
diff --git a/lib/src/pages/recommended_route_page.dart b/lib/src/pages/recommended_route_page.dart
index 08ca293..aff6aa0 100644
--- a/lib/src/pages/recommended_route_page.dart
+++ b/lib/src/pages/recommended_route_page.dart
@@ -165,61 +165,27 @@ class RecommendedRoutePageState extends State {
semanticContainer: true,
clipBehavior: Clip.antiAliasWithSaveLayer,
shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(13.0),
+ borderRadius: BorderRadius.circular(10.0),
),
child: InkWell(
- onTap: () {
- routeDialog(route);
- },
- child: Stack(
- fit: StackFit.expand,
- children: [
- SizedBox(
- child: InkWell(
- onTap: () {
- routeDialog(route);
- },
- child: Stack(children: [
- Container(
- width: MediaQuery.of(context).size.width,
- height: MediaQuery.of(context).size.height,
- decoration: const BoxDecoration(
- borderRadius: BorderRadius.all(Radius.circular(13)),
- ),
- child: ClipRRect(
- borderRadius: BorderRadius.circular(13.0),
- child: Image.asset(
- route.image!,
- width: MediaQuery.of(context).size.width,
- fit: BoxFit.fill,
- ),
- ),
- ),
- Container(
- width: MediaQuery.of(context).size.width,
- height: MediaQuery.of(context).size.height,
- decoration: const BoxDecoration(
- borderRadius:
- BorderRadius.all(Radius.circular(13)),
- color: Color.fromARGB(46, 0, 0, 0)))
- ]))),
+ onTap: () {
+ routeDialog(route);
+ },
+ child: Stack(fit: StackFit.expand, children: [
+ Image.asset(
+ route.image!,
+ fit: BoxFit.fill,
+ ),
Container(
- height: 130,
- padding: const EdgeInsets.all(13),
- alignment: Alignment.bottomRight,
- child: Text(
- "${route.title}",
- style: const TextStyle(
- fontSize: 16,
- fontFamily: 'Pretendard',
- fontWeight: FontWeight.w600,
- color: Colors.white),
- textAlign: TextAlign.end,
- ),
- )
- ],
- ),
- ));
+ alignment: Alignment.bottomRight,
+ padding: const EdgeInsets.all(7),
+ child: Text("${route.title!} ",
+ style: const TextStyle(
+ fontFamily: 'Pretendard',
+ fontSize: 16,
+ color: Colors.white,
+ fontWeight: FontWeight.w600))),
+ ])));
Widget recommendTitleWidget() => Container(
margin: const EdgeInsets.fromLTRB(0, 32, 0, 24),
diff --git a/lib/src/pages/record_list_page.dart b/lib/src/pages/record_list_page.dart
index 12bc0dd..a9931f8 100644
--- a/lib/src/pages/record_list_page.dart
+++ b/lib/src/pages/record_list_page.dart
@@ -1,16 +1,11 @@
import 'package:flutter/material.dart';
-import 'package:flutter/src/widgets/container.dart';
-import 'package:flutter/src/widgets/framework.dart';
import 'package:intl/date_symbol_data_local.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:ridingpartner_flutter/src/models/record.dart';
-import 'package:ridingpartner_flutter/src/pages/record_page.dart';
-import 'package:ridingpartner_flutter/src/provider/home_record_provider.dart';
import 'package:ridingpartner_flutter/src/provider/record_list_provider.dart';
import '../provider/riding_result_provider.dart';
-import '../utils/timestampToText.dart';
import '../widgets/appbar.dart';
import 'day_record_page.dart';
@@ -82,7 +77,8 @@ class _RecordListPageState extends State {
)))
},
child: Container(
- padding: const EdgeInsets.only(top: 15, bottom: 10, left: 15, right: 13),
+ padding:
+ const EdgeInsets.only(top: 15, bottom: 10, left: 15, right: 13),
// // color: Color.fromARGB(167, 251, 150, 50),
// height: MediaQuery.of(context).size.height / 8,
width: double.infinity,
diff --git a/lib/src/pages/record_page.dart b/lib/src/pages/record_page.dart
index 0325983..c7d38c2 100644
--- a/lib/src/pages/record_page.dart
+++ b/lib/src/pages/record_page.dart
@@ -1,4 +1,3 @@
-import 'dart:developer' as developer;
import 'dart:io';
import 'package:app_settings/app_settings.dart';
@@ -35,13 +34,11 @@ class _RecordState extends State {
@override
Widget build(BuildContext context) {
- developer.log("hi");
num speed = 0;
_recordProvider = Provider.of(context);
_imageStatus = _recordProvider.imageStatus;
- developer.log(_imageStatus.name);
switch (_recordProvider.recordState) {
case RecordState.loading:
@@ -136,78 +133,98 @@ class _RecordState extends State {
style: textStyle),
Text(timestampToText(_record.timestamp),
style: textStyle),
+ if (_record.timestamp != 0) ...[
+ Text(
+ "${(_record.distance / _record.timestamp).toStringAsFixed(1)} km/h",
+ style: textStyle)
+ ] else ...[
+ Text("0.0 km/h", style: textStyle)
+ ],
Text(
- "${_record.distance / _record.timestamp} km/h",
+ "${(_record.distance / 1000).toStringAsFixed(2)} km",
style: textStyle),
- Text("${_record.distance / 1000} km",
- style: textStyle),
- Text(
- "${(hKcal * (_record.timestamp) / 3600).toStringAsFixed(1)} kcal",
- style: textStyle)
+ if (_record.distance == 0) ...[
+ Text(
+ '0 kcal',
+ style: textStyle,
+ )
+ ] else ...[
+ Text(
+ "${(hKcal * (_record.timestamp) / 3600).toStringAsFixed(1)} kcal",
+ style: textStyle)
+ ]
],
),
),
],
),
),
- Row(
- children: [
- Container(
- width: 64.0,
- height: 64.0,
- margin: const EdgeInsets.only(right: 20.0),
- child: OutlinedButton(
- onPressed: () {
- if (_imageStatus == ImageStatus.init) {
- _recordProvider
- .confirmPermissionGranted()
- .then((_) => _recordProvider
- .getImage(ImageSource.gallery));
- } else if (_imageStatus ==
- ImageStatus.permissionFail) {
- ScaffoldMessenger.of(context)
- .showSnackBar(SnackBar(
- content: const Text(
- "사진, 파일, 마이크 접근을 허용 해주셔야 카메라 사용이 가능합니다."),
- action: SnackBarAction(
- label: "OK",
- onPressed: () {
- AppSettings.openAppSettings();
- },
+ if (_recordProvider.images.isEmpty) ...[
+ Row(
+ children: [
+ Container(
+ width: 64.0,
+ height: 64.0,
+ margin: const EdgeInsets.only(right: 10.0),
+ child: OutlinedButton(
+ onPressed: () {
+ if (_imageStatus == ImageStatus.init) {
+ _recordProvider
+ .confirmPermissionGranted()
+ .then((_) => _recordProvider
+ .getImage(ImageSource.gallery));
+ } else if (_imageStatus ==
+ ImageStatus.permissionFail) {
+ ScaffoldMessenger.of(context)
+ .showSnackBar(SnackBar(
+ content: const Text(
+ "사진, 파일, 마이크 접근을 허용 해주셔야 카메라 사용이 가능합니다."),
+ action: SnackBarAction(
+ label: "OK",
+ onPressed: () {
+ AppSettings.openAppSettings();
+ },
+ ),
+ ));
+ } else if (_imageStatus != ImageStatus.init) {
+ _recordProvider.images.clear();
+ _recordProvider
+ .getImage(ImageSource.gallery);
+ }
+ },
+ style: ButtonStyle(
+ side: MaterialStateProperty.all(
+ const BorderSide(
+ color:
+ Color.fromARGB(0xFF, 0xFD, 0xD3, 0xAB),
+ width: 2.0,
+ )),
+ ),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: const [
+ Image(
+ image: AssetImage(
+ 'assets/icons/add_image.png'),
+ color: Color.fromARGB(255, 255, 255, 255),
),
- ));
- } else if (_imageStatus != ImageStatus.init) {
- _recordProvider.images.clear();
- _recordProvider.getImage(ImageSource.gallery);
- }
- },
- style: ButtonStyle(
- side:
- MaterialStateProperty.all(const BorderSide(
- color: Color.fromARGB(0xFF, 0xFD, 0xD3, 0xAB),
- width: 2.0,
- )),
- ),
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: const [
- Image(
- image: AssetImage(
- 'assets/icons/add_image.png'),
- color: Color.fromARGB(255, 255, 255, 255),
- ),
- Text(
- "사진",
- style: TextStyle(
- color: Color.fromARGB(
- 0xFF, 0xDE, 0xE2, 0xE6),
- fontSize: 12.0),
- )
- ],
- ))),
- SizedBox(width: 64.0, height: 64.0, child: showImage())
- ],
- ),
+ SizedBox(
+ height: 5,
+ ),
+ Text(
+ "사진",
+ style: TextStyle(
+ color: Color.fromARGB(
+ 0xFF, 0xDE, 0xE2, 0xE6),
+ fontSize: 12.0),
+ )
+ ],
+ ))),
+ ],
+ )
+ ] else ...[
+ showImage()
+ ],
const Divider(color: Color.fromARGB(0xFF, 0xF8, 0xF9, 0xFA)),
Container(
height: 160,
@@ -279,36 +296,41 @@ class _RecordState extends State {
// 이미지를 보여주는 위젯
Widget showImage() {
if (_recordProvider.imageStatus == ImageStatus.init) {
- return const Text(
+ return const Center(
+ child: Text(
"이미지를\n선택해주세요.",
style: TextStyle(
- fontSize: 14.0,
+ fontSize: 13.0,
color: Color.fromARGB(0xFF, 0xDE, 0xE2, 0xE6),
),
textAlign: TextAlign.center,
- );
+ ));
} else if (_recordProvider.imageStatus == ImageStatus.imageSuccess) {
- return Container(
- width: 64.0,
- height: 64.0,
- padding: const EdgeInsets.all(4.0),
- decoration: BoxDecoration(
- border: Border.all(
- color: const Color.fromARGB(0xFF, 0xFD, 0xD3, 0xAB),
- width: 2.0),
- borderRadius: BorderRadius.circular(3.5),
- color: Colors.transparent),
- child: Center(
- child: _recordProvider.images.isEmpty
- ? const Text(
- '이미지 없음',
- style: TextStyle(
- fontSize: 13.0,
- color: Color.fromARGB(0xFF, 0xDE, 0xE2, 0xE6),
- ),
- textAlign: TextAlign.center,
- )
- : Image.file(File(_recordProvider.images.first!.path))));
+ return Row(
+ children: _recordProvider.images.map((img) {
+ return InkWell(
+ onTap: () {
+ _recordProvider.images.clear();
+ _recordProvider.getImage(ImageSource.gallery);
+ },
+ child: Container(
+ width: 64.0,
+ height: 64.0,
+ margin: EdgeInsets.only(right: 10),
+ decoration: BoxDecoration(
+ border: Border.all(
+ color: const Color.fromARGB(0xFF, 0xFD, 0xD3, 0xAB),
+ width: 2.0),
+ borderRadius: BorderRadius.circular(3.5),
+ color: Colors.transparent),
+ child: Center(
+ child: Image.file(
+ File(img!.path),
+ width: 64,
+ height: 64,
+ fit: BoxFit.cover,
+ ))));
+ }).toList());
} else {
return const Text(
"업로드 실패",
diff --git a/lib/src/pages/rental_map.dart b/lib/src/pages/rental_map.dart
deleted file mode 100644
index 496b965..0000000
--- a/lib/src/pages/rental_map.dart
+++ /dev/null
@@ -1,49 +0,0 @@
-import 'dart:async';
-
-import 'package:flutter/material.dart';
-import 'package:google_maps_flutter/google_maps_flutter.dart';
-import 'package:provider/provider.dart';
-import 'package:ridingpartner_flutter/src/provider/place_list_provider.dart';
-
-import '../models/place.dart';
-
-class RentalMap extends StatefulWidget {
- const RentalMap({super.key});
- @override
- State createState() => RentalMapState();
-}
-
-class RentalMapState extends State {
- final Completer _controller = Completer();
- List _markers = [];
-
- void initState() {
- super.initState();
- Provider.of(context, listen: false).getPlaceList();
- }
-
- @override
- Widget build(BuildContext context) {
- List _placeList = Provider.of(context).placeList;
- _markers = _placeList
- .map((place) => Marker(
- markerId: MarkerId(place.title!),
- position: LatLng(
- double.parse(place.latitude!), double.parse(place.longitude!))))
- .toList();
-
- return Scaffold(
- body: GoogleMap(
- mapType: MapType.normal,
- markers: Set.from(_markers),
- initialCameraPosition: const CameraPosition(
- target: LatLng(37.349741467772, 126.76182486561), zoom: 12.9),
- onMapCreated: (GoogleMapController controller) {
- _controller.complete(controller);
- },
- myLocationButtonEnabled: true,
- myLocationEnabled: true,
- //onCameraMove: ,
- ));
- }
-}
diff --git a/lib/src/pages/riding_page.dart b/lib/src/pages/riding_page.dart
index c52e634..471ffff 100644
--- a/lib/src/pages/riding_page.dart
+++ b/lib/src/pages/riding_page.dart
@@ -1,22 +1,16 @@
import 'dart:async';
-import 'dart:typed_data';
-
import 'package:flutter/material.dart';
+import 'package:flutter_naver_map/flutter_naver_map.dart';
import 'package:geolocator/geolocator.dart';
-import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:provider/provider.dart';
import 'package:ridingpartner_flutter/src/pages/record_page.dart';
import 'package:ridingpartner_flutter/src/provider/riding_provider.dart';
import 'package:wakelock/wakelock.dart';
-
import '../provider/riding_result_provider.dart';
-import '../utils/bytesFromAsset.dart';
import '../utils/timestampToText.dart';
import '../utils/user_location.dart';
import '../widgets/dialog.dart';
-// https://funncy.github.io/flutter/2020/07/21/flutter-google-map-marker/
-
class RidingPage extends StatefulWidget {
const RidingPage({super.key});
@@ -25,11 +19,12 @@ class RidingPage extends StatefulWidget {
}
class _RidingPageState extends State {
- Completer _controller = Completer();
late RidingProvider _ridingProvider;
- LatLng initCameraPosition = const LatLng(37.37731944, 126.8050778);
- Set myPositionMarker = {};
- late BitmapDescriptor myPositionIcon;
+ LocationTrackingMode _locationTrackingMode = LocationTrackingMode.Face;
+ late List _markers = [];
+ late OverlayImage _markerIcon;
+ Completer _controller = Completer();
+ double floatingBtnPosition = 80;
@override
void initState() {
@@ -41,55 +36,52 @@ class _RidingPageState extends State {
await Provider.of(context, listen: false).getLocation();
if (_ridingProvider.position != null) {
- initCameraPosition = LatLng(_ridingProvider.position!.latitude,
- _ridingProvider.position!.longitude);
- final Uint8List markerIcon =
- await getBytesFromAsset('assets/icons/my_location.png', 200);
- myPositionIcon = BitmapDescriptor.fromBytes(markerIcon);
-
- myPositionMarker.add(Marker(
- markerId: const MarkerId("currentLocation"),
- icon: BitmapDescriptor.fromBytes(markerIcon),
- position: LatLng(_ridingProvider.position!.latitude,
- _ridingProvider.position!.longitude)));
+ _markerIcon = await OverlayImage.fromAssetImage(
+ assetName: 'assets/icons/my_location.png');
_ridingProvider.setMapComponent();
- } else {
- initCameraPosition = const LatLng(37.37731944, 126.8050778);
+
+ _markers = [
+ // Marker(
+ // anchor: AnchorPoint(0.5, 0.5),
+ // markerId: "currentLocation",
+ // width: 65,
+ // height: 65,
+ // icon: _markerIcon,
+ // position: LatLng(_ridingProvider.position!.latitude,
+ // _ridingProvider.position!.longitude))
+ ];
}
}
- final myLocation = MyLocation();
-
- String floatBtnLabel = "일시중지";
- IconData floatBtnIcon = Icons.pause;
+ int polylineWidth = 7;
@override
Widget build(BuildContext context) {
_ridingProvider = Provider.of(context);
Position? position = _ridingProvider.position;
- void setController() async {
- GoogleMapController googleMapController = await _controller.future;
- if (position != null) {
- googleMapController.animateCamera(CameraUpdate.newCameraPosition(
- CameraPosition(
- target: LatLng(position.latitude, position.longitude),
- zoom: 19,
- bearing: position.heading)));
-
- myPositionMarker = {
- Marker(
- markerId: const MarkerId("currentLocation"),
- icon: myPositionIcon,
- position: LatLng(_ridingProvider.position!.latitude,
- _ridingProvider.position!.longitude))
- };
- }
+ if (_ridingProvider.state == RidingState.error) {
+ ScaffoldMessenger.of(context).showSnackBar(
+ const SnackBar(
+ content: Text('사용자 위치를 불러올 수 없습니다.'),
+ ),
+ );
}
- if (_ridingProvider.state != RidingState.before) {
- setController();
- }
+ // if (_ridingProvider.state != RidingState.before) {
+ // if (position != null) {
+ // _markers = [
+ // Marker(
+ // anchor: AnchorPoint(0.5, 0.5),
+ // markerId: "currentLocation",
+ // width: 65,
+ // height: 65,
+ // icon: _markerIcon,
+ // position: LatLng(_ridingProvider.position!.latitude,
+ // _ridingProvider.position!.longitude))
+ // ];
+ // }
+ // }
return WillPopScope(
child: Scaffold(
@@ -120,25 +112,46 @@ class _RidingPageState extends State {
),
body: Stack(
children: [
- GoogleMap(
- mapType: MapType.normal,
+ NaverMap(
+ onMapCreated: onMapCreated,
+ pathOverlays: _ridingProvider.polylineCoordinates.length > 1
+ ? {
+ PathOverlay(PathOverlayId('path'),
+ _ridingProvider.polylineCoordinates,
+ width: polylineWidth,
+ outlineWidth: 0,
+ color:
+ const Color.fromARGB(0xFF, 0xFB, 0x95, 0x32))
+ }
+ : {},
+ mapType: MapType.Basic,
+ initLocationTrackingMode: LocationTrackingMode.Face,
initialCameraPosition: CameraPosition(
- target: LatLng(myLocation.position?.latitude ?? 37.0,
- myLocation.position?.longitude ?? 126.0),
- zoom: 12.6,
+ target: LatLng(position!.latitude, position.longitude),
+ zoom: 14),
+ locationButtonEnable: false,
+ markers: _markers,
+ ),
+ Positioned(
+ bottom: floatingBtnPosition,
+ left: 20,
+ child: FloatingActionButton(
+ heroTag: 'mypos',
+ backgroundColor: Colors.white,
+ child: const ImageIcon(
+ AssetImage('assets/icons/search_myLocation_button.png'),
+ color: Color.fromRGBO(240, 120, 5, 1)),
+ onPressed: () async {
+ final controller = await _controller.future;
+ await controller.moveCamera(CameraUpdate.toCameraPosition(
+ CameraPosition(
+ target: LatLng(_ridingProvider.position!.latitude,
+ _ridingProvider.position!.longitude),
+ zoom: 18)));
+ controller
+ .setLocationTrackingMode(LocationTrackingMode.Face);
+ },
),
- onMapCreated: (GoogleMapController controller) {
- _controller.complete(controller);
- },
- myLocationButtonEnabled: false,
- polylines: {
- Polyline(
- polylineId: const PolylineId("poly"),
- width: 5,
- color: const Color.fromARGB(0xFF, 0xFB, 0x95, 0x32),
- points: _ridingProvider.polylineCoordinates),
- },
- markers: myPositionMarker,
),
Positioned(bottom: 0, child: record(_ridingProvider.state))
],
@@ -153,6 +166,11 @@ class _RidingPageState extends State {
});
}
+ void onMapCreated(NaverMapController controller) {
+ if (_controller.isCompleted) _controller = Completer();
+ _controller.complete(controller);
+ }
+
Widget record(RidingState state) {
const TextStyle titleStyle = TextStyle(
fontFamily: 'Pretendard',
@@ -165,28 +183,43 @@ class _RidingPageState extends State {
fontWeight: FontWeight.w400,
color: Color.fromRGBO(52, 58, 64, 1));
- if (state == RidingState.before) {
+ if (state == RidingState.before || state == RidingState.error) {
return InkWell(
- child: Container(
- color: const Color.fromRGBO(240, 120, 5, 1),
- alignment: Alignment.center,
- width: MediaQuery.of(context).size.width,
- height: 61,
- child: const Text(
- '주행 시작',
- style: TextStyle(
- color: Colors.white,
- fontFamily: 'Pretendard',
- fontWeight: FontWeight.w700,
- fontSize: 18),
- textAlign: TextAlign.center,
+ child: Container(
+ color: const Color.fromRGBO(240, 120, 5, 1),
+ alignment: Alignment.center,
+ width: MediaQuery.of(context).size.width,
+ height: 61,
+ child: const Text(
+ '주행 시작',
+ style: TextStyle(
+ color: Colors.white,
+ fontFamily: 'Pretendard',
+ fontWeight: FontWeight.w700,
+ fontSize: 18),
+ textAlign: TextAlign.center,
+ ),
),
- ),
- onTap: () {
- _ridingProvider.startRiding();
- screenKeepOn();
- },
- );
+ onTap: () async {
+ try {
+ floatingBtnPosition = 130;
+ _ridingProvider.startRiding();
+ screenKeepOn();
+ final controller = await _controller.future;
+ await controller.moveCamera(CameraUpdate.toCameraPosition(
+ CameraPosition(
+ target: LatLng(_ridingProvider.position!.latitude,
+ _ridingProvider.position!.longitude),
+ zoom: 18)));
+ controller.setLocationTrackingMode(LocationTrackingMode.Face);
+ } catch (e) {
+ ScaffoldMessenger.of(context).showSnackBar(
+ const SnackBar(
+ content: Text('주행을 시작하는 데에 실패했습니다'),
+ ),
+ );
+ }
+ });
} else {
return Container(
margin: const EdgeInsets.symmetric(horizontal: 20, vertical: 40),
@@ -218,7 +251,8 @@ class _RidingPageState extends State {
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Text('거리', style: titleStyle),
- Text("${_ridingProvider.distance}km",
+ Text(
+ "${((_ridingProvider.distance / 10000).roundToDouble()) * 10}km",
style: dataStyle)
],
),
@@ -230,7 +264,7 @@ class _RidingPageState extends State {
style: titleStyle,
),
Text(
- "${_ridingProvider.speed.roundToDouble()}km/h",
+ "${_ridingProvider.speed.toStringAsFixed(1)}km/h",
style: dataStyle,
)
],
diff --git a/lib/src/pages/sights_page.dart b/lib/src/pages/sights_page.dart
index 49c0e36..6def3b3 100644
--- a/lib/src/pages/sights_page.dart
+++ b/lib/src/pages/sights_page.dart
@@ -1,17 +1,14 @@
import 'dart:async';
import 'package:flutter/material.dart';
-import 'package:flutter/src/painting/rounded_rectangle_border.dart';
-import 'package:google_maps_flutter/google_maps_flutter.dart';
+import 'package:flutter_naver_map/flutter_naver_map.dart';
+import 'package:logging/logging.dart';
import 'package:provider/provider.dart';
import 'package:ridingpartner_flutter/src/provider/sights_provider.dart';
-import 'package:ridingpartner_flutter/src/utils/custom_marker.dart';
-
import '../models/place.dart';
import '../provider/navigation_provider.dart';
import '../provider/riding_provider.dart';
import 'navigation_page.dart';
-import 'package:logging/logging.dart';
class SightsPage extends StatefulWidget {
@override
@@ -19,54 +16,83 @@ class SightsPage extends StatefulWidget {
}
class _SightsPageState extends State {
- final Completer _controller = Completer();
-
- Set markers = {};
+ late List _markers = [];
+ Completer _controller = Completer();
late SightsProvider _sightsProvider;
+ var logger = Logger('Logger');
@override
void initState() {
- Provider.of(context, listen: false).getPlaceList();
+ setCustomMarker();
+ }
+
+ void setCustomMarker() async {
+ await Provider.of(context, listen: false).getPlaceList();
+ try {
+ await Future.forEach(_sightsProvider.sightList, (place) async {
+ OverlayImage icon =
+ await OverlayImage.fromAssetImage(assetName: place.marker!);
+ _markers.add(Marker(
+ width: 30,
+ height: 40,
+ markerId: place.title ?? "marker",
+ icon: icon,
+ onMarkerTab: _onMarkerTap,
+ position: LatLng(double.parse(place.latitude ?? ""),
+ double.parse(place.longitude ?? "")) //예외처리해주기
+ ));
+ });
+ _sightsProvider.setState(MarkerListState.markerCompleted);
+ } catch (e) {
+ _sightsProvider.setState(MarkerListState.empty);
+ }
}
@override
Widget build(BuildContext context) {
_sightsProvider = Provider.of(context);
- final state = _sightsProvider.state;
- var logger = Logger('Logger');
+ return Scaffold(
+ body: NaverMap(
+ onMapCreated: onMapCreated,
+ initialCameraPosition: const CameraPosition(
+ target: LatLng(37.349741467772, 126.76182486561), zoom: 11),
+ mapType: MapType.Basic,
+ initLocationTrackingMode: LocationTrackingMode.None,
+ locationButtonEnable: true,
+ markers: _markers,
+ ),
+ );
+ }
- void routeDialog(Place place) => showModalBottomSheet(
- context: context,
- //barrierDismissible - Dialog를 제외한 다른 화면 터치 x
- shape: const RoundedRectangleBorder(
- borderRadius: BorderRadius.only(
- topLeft: Radius.circular(15.0),
- topRight: Radius.circular(15.0))),
- builder: (BuildContext context) {
- double height = MediaQuery.of(context).size.height;
- double width = MediaQuery.of(context).size.width;
-
- return Column(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- mainAxisSize: MainAxisSize.min,
- children: [
- Container(
- padding: const EdgeInsets.fromLTRB(24, 38, 24, 30),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- Text(
- style: const TextStyle(
- fontFamily: 'Pretendard',
- fontSize: 24,
- fontWeight: FontWeight.w700),
- place.title!),
- const SizedBox(
- height: 8,
- ),
- if (place.roadAddress == null || place.roadAddress == "") ...[
+ void routeDialog(Place place) => showModalBottomSheet(
+ context: context,
+ //barrierDismissible - Dialog를 제외한 다른 화면 터치 x
+ shape: const RoundedRectangleBorder(
+ borderRadius: BorderRadius.only(
+ topLeft: Radius.circular(15.0), topRight: Radius.circular(15.0))),
+ builder: (BuildContext context) {
+ return Column(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Container(
+ padding: const EdgeInsets.fromLTRB(24, 38, 24, 30),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Text(
+ style: const TextStyle(
+ fontFamily: 'Pretendard',
+ fontSize: 24,
+ fontWeight: FontWeight.w700),
+ place.title!),
+ const SizedBox(
+ height: 8,
+ ),
+ if (place.roadAddress == null ||
+ place.roadAddress == "") ...[
Text(
place.jibunAddress!,
style: const TextStyle(
@@ -85,110 +111,66 @@ class _SightsPageState extends State {
color: Color.fromRGBO(51, 51, 51, 0.5)),
)
],
- const SizedBox(
- height: 8,
- ),
- const Divider(
- color: Color.fromRGBO(233, 236, 239, 1),
- thickness: 1.0,
+ const SizedBox(
+ height: 8,
+ ),
+ const Divider(
+ color: Color.fromRGBO(233, 236, 239, 1),
+ thickness: 1.0,
+ ),
+ const SizedBox(height: 16.0),
+ ClipRRect(
+ borderRadius: BorderRadius.circular(8.0),
+ child: Image.asset(
+ place.image!,
+ height: 160.0,
+ width: MediaQuery.of(context).size.width,
+ fit: BoxFit.fill,
),
- const SizedBox(height: 16.0),
- ClipRRect(
- borderRadius: BorderRadius.circular(8.0),
- child: Image.asset(
- place.image!,
- height: 160.0,
- width: MediaQuery.of(context).size.width,
- fit: BoxFit.fill,
- ),
- )
- ])),
- InkWell(
- onTap: () async {
- logger.fine("placeList : $place");
- Navigator.push(
- context,
- MaterialPageRoute(
- builder: (context) => MultiProvider(
- providers: [
- ChangeNotifierProvider(
- create: (context) =>
- NavigationProvider([place])),
- ChangeNotifierProvider(
- create: (context) => RidingProvider())
- ],
- child: const NavigationPage(),
- )));
- },
- child: Container(
- alignment: Alignment.center,
- width: MediaQuery.of(context).size.width,
- height: 60,
- color: const Color.fromRGBO(240, 120, 5, 1),
- child: const Text('안내 시작',
- style: TextStyle(
- fontFamily: 'Pretendard',
- color: Colors.white,
- fontSize: 18,
- fontWeight: FontWeight.w700))))
- ],
- );
- });
-
- Future setCustomMarker() async {
- try {
- await Future.forEach(_sightsProvider.sightList, (place) async {
- final customIcon =
- await CustomMarker().getPictuerMarker(place.marker!);
- markers.add(Marker(
- markerId: MarkerId(place.title ?? "marker"),
- icon: customIcon,
- onTap: () => {routeDialog(place)},
- position: LatLng(double.parse(place.latitude ?? ""),
- double.parse(place.longitude ?? "")) //예외처리해주기
- ));
- });
- _sightsProvider.setState(MarkerListState.markerCompleted);
- } catch (e) {
- _sightsProvider.setState(MarkerListState.empty);
- }
- }
-
- if (state == MarkerListState.placeCompleted) {
- setCustomMarker();
- }
+ )
+ ])),
+ InkWell(
+ onTap: () async {
+ logger.fine("placeList : $place");
+ Navigator.push(
+ context,
+ MaterialPageRoute(
+ builder: (context) => MultiProvider(
+ providers: [
+ ChangeNotifierProvider(
+ create: (context) =>
+ NavigationProvider([place])),
+ ChangeNotifierProvider(
+ create: (context) => RidingProvider())
+ ],
+ child: const NavigationPage(),
+ )));
+ },
+ child: Container(
+ alignment: Alignment.center,
+ width: MediaQuery.of(context).size.width,
+ height: 60,
+ color: const Color.fromRGBO(240, 120, 5, 1),
+ child: const Text('안내 시작',
+ style: TextStyle(
+ fontFamily: 'Pretendard',
+ color: Colors.white,
+ fontSize: 18,
+ fontWeight: FontWeight.w700))))
+ ],
+ );
+ });
+
+ void onMapCreated(NaverMapController controller) {
+ if (_controller.isCompleted) _controller = Completer();
+ _controller.complete(controller);
+ }
- return Scaffold(
- body: GoogleMap(
- mapType: MapType.normal,
- markers: Set.from(markers),
- initialCameraPosition: const CameraPosition(
- target: LatLng(37.349741467772, 126.76182486561), zoom: 12.9),
- onMapCreated: (GoogleMapController controller) {
- _controller.complete(controller);
- },
- myLocationButtonEnabled: true,
- myLocationEnabled: true,
- //onCameraMove: ,
- ));
+ void _onMarkerTap(Marker? marker, Map iconSize) {
+ Place place = _sightsProvider.sightList
+ .where((p) => marker?.markerId == p.title)
+ .toList()
+ .first;
+ routeDialog(place);
}
}
-
-
- // List location = [
- // MarkerInfo("정왕 자전거 대여소", LatLng(37.343991285297, 126.74729588817),
- // "월 ~ 금\n(07시 ~ 21시)\n토요일, 일요일, 공휴일 휴무\n☎ 031-433-0101"),
- // MarkerInfo("월곧 자전거 대여소", LatLng(37.3917953, 126.742692),
- // "수 ~ 일\n(09시 ~ 20시)\n월요일, 화요일, 공휴일 휴무\n☎ 031-433-0101")
- // ];
-
- // @override
- // void initState(){
- // super.initState();
- // _markers.add(Marker(
- // markerId: MarkerId("1"),
- // draggable: true,
- // onTap: () => print("Marker!"),
- // position: const LatLng(37.343991285297, 126.74729588817)
- // ));
- // }
diff --git a/lib/src/provider/home_record_provider.dart b/lib/src/provider/home_record_provider.dart
index 605988f..b77eee7 100644
--- a/lib/src/provider/home_record_provider.dart
+++ b/lib/src/provider/home_record_provider.dart
@@ -1,4 +1,3 @@
-import 'dart:developer' as developer;
import 'dart:math';
import 'package:firebase_auth/firebase_auth.dart';
@@ -56,9 +55,7 @@ class HomeRecordProvider extends ChangeNotifier {
await rootBundle.loadString('assets/json/place.json');
List places =
PlaceList.fromJson(placeFromJsonFile).places ?? [];
- for (var element in places) {
- developer.log(element.image!);
- }
+ for (var element in places) {}
// List places = await _fireStoreService.getPlaces();
int num1 = _random.nextInt(places.length);
diff --git a/lib/src/provider/map_search_provider.dart b/lib/src/provider/map_search_provider.dart
index cb6a66d..0a1d516 100644
--- a/lib/src/provider/map_search_provider.dart
+++ b/lib/src/provider/map_search_provider.dart
@@ -1,11 +1,10 @@
import 'dart:convert';
-import 'dart:developer' as developer;
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
+import 'package:flutter_naver_map/flutter_naver_map.dart';
import 'package:flutter_polyline_points/flutter_polyline_points.dart';
import 'package:geolocator/geolocator.dart';
-import 'package:google_maps_flutter/google_maps_flutter.dart' as google_map;
import 'package:http/http.dart' as http;
import 'package:ridingpartner_flutter/src/models/place.dart';
import 'package:ridingpartner_flutter/src/utils/user_location.dart';
@@ -38,8 +37,8 @@ class MapSearchProvider extends ChangeNotifier {
List route = [];
- List _polylinePoints = [];
- List get polylinePoints => _polylinePoints;
+ List _polylinePoints = [];
+ List get polylinePoints => _polylinePoints;
Place? _myLocation;
@@ -138,7 +137,6 @@ class MapSearchProvider extends ChangeNotifier {
}
setInitalLocation() async {
- developer.log('initial location');
final address = await getMyLocationAddress();
setMyLocation(address);
}
@@ -169,12 +167,11 @@ class MapSearchProvider extends ChangeNotifier {
List? turnPoints = route
.map((route) => PolylineWayPoint(location: route.turnPoint ?? ""))
.toList();
- List pointLatLngs = [];
+ List pointLatLngs = [];
turnPoints.forEach((element) {
List a = element.location.split(',');
- pointLatLngs
- .add(google_map.LatLng(double.parse(a[1]), double.parse(a[0])));
+ pointLatLngs.add(LatLng(double.parse(a[1]), double.parse(a[0])));
});
_polylinePoints = pointLatLngs;
diff --git a/lib/src/provider/navigation_provider.dart b/lib/src/provider/navigation_provider.dart
index afa6e19..bedf197 100644
--- a/lib/src/provider/navigation_provider.dart
+++ b/lib/src/provider/navigation_provider.dart
@@ -1,12 +1,10 @@
import 'dart:async';
-import 'dart:ui' as ui;
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
+import 'package:flutter_naver_map/flutter_naver_map.dart' as naver;
import 'package:flutter_polyline_points/flutter_polyline_points.dart';
import 'package:geolocator/geolocator.dart';
-import 'package:google_maps_flutter/google_maps_flutter.dart' as google_map;
import 'package:latlong2/latlong.dart';
import 'package:ridingpartner_flutter/src/models/route.dart';
import 'package:ridingpartner_flutter/src/provider/riding_provider.dart';
@@ -35,8 +33,8 @@ class NavigationProvider with ChangeNotifier {
late List _ridingCourse;
List _route = [];
List _distances = [];
- List _polylinePoints = [];
- List get polylinePoints => _polylinePoints;
+ List _polylinePoints = [];
+ List get polylinePoints => _polylinePoints;
late Guide _goalPoint;
late Place _goalDestination;
@@ -97,8 +95,10 @@ class NavigationProvider with ChangeNotifier {
try {
myLocation.getMyCurrentLocation();
_position = myLocation.position;
+ if (_position == null) {
+ _searchRouteState = SearchRouteState.locationFail;
+ }
} catch (e) {
- print(e.toString());
myLocation.checkPermission();
_position = null;
_searchRouteState = SearchRouteState.locationFail;
@@ -168,19 +168,6 @@ class NavigationProvider with ChangeNotifier {
notifyListeners();
}
- // Future getMyLocationAddress(Position position) async {
- // final url =
- // "https://dapi.kakao.com/v2/local/geo/coord2address.json?x=$lon&y=$lat&input_coord=WGS84";
- // Map requestHeaders = {'Authorization': 'KakaoAK $kakaoKey'};
- // final response = await http.get(Uri.parse(url), headers: requestHeaders);
- // final address = json.decode(response.body)['documents'][0]['address']
- // ['address_name'] ??
- // '';
- // developer.log(address);
-
- // return address;
- // }
-
Future startNavigation() async {
setState(RidingState.riding);
_positionStream.controller.stream.listen((pos) {
@@ -225,7 +212,7 @@ class NavigationProvider with ChangeNotifier {
_goalPoint = _route[0]; //
_nextPoint = null;
if (isFirst) {
- _polylinePoints.removeAt(0);
+ // _polylinePoints.removeAt(0);
isFirst = false;
}
_remainedDistance -= _distances.last;
@@ -237,7 +224,7 @@ class NavigationProvider with ChangeNotifier {
if (isFirst) {
isFirst = false;
} else {
- _polylinePoints.removeAt(0);
+ // _polylinePoints.removeAt(0);
}
_remainedDistance -= _distances.last;
_distances.removeLast();
@@ -300,12 +287,11 @@ class NavigationProvider with ChangeNotifier {
List? turnPoints = _route
.map((route) => PolylineWayPoint(location: route.turnPoint ?? ""))
.toList();
- List pointLatLngs = [];
+ List pointLatLngs = [];
for (var element in turnPoints) {
List a = element.location.split(',');
- pointLatLngs
- .add(google_map.LatLng(double.parse(a[1]), double.parse(a[0])));
+ pointLatLngs.add(naver.LatLng(double.parse(a[1]), double.parse(a[0])));
}
_polylinePoints = pointLatLngs;
diff --git a/lib/src/provider/riding_provider.dart b/lib/src/provider/riding_provider.dart
index 0389f2d..130d187 100644
--- a/lib/src/provider/riding_provider.dart
+++ b/lib/src/provider/riding_provider.dart
@@ -3,9 +3,9 @@ import 'dart:typed_data';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
+import 'package:flutter_naver_map/flutter_naver_map.dart' as naver;
import 'package:flutter_polyline_points/flutter_polyline_points.dart';
import 'package:geolocator/geolocator.dart';
-import 'package:google_maps_flutter/google_maps_flutter.dart' as google_map;
import 'package:intl/intl.dart';
import 'package:latlong2/latlong.dart';
import 'package:ridingpartner_flutter/src/models/record.dart';
@@ -15,7 +15,7 @@ import 'package:ridingpartner_flutter/src/utils/user_location.dart';
import '../models/position_stream.dart';
-enum RidingState { before, riding, pause, stop }
+enum RidingState { before, riding, pause, stop, error }
class RidingProvider with ChangeNotifier {
final Distance _calDistance = const Distance();
@@ -37,8 +37,8 @@ class RidingProvider with ChangeNotifier {
bool visivility = false;
//final 붙여도 되나? -> 안돼요
- List _polylineCoordinates = [];
- List get polylineCoordinates => _polylineCoordinates;
+ List _polylineCoordinates = [];
+ List get polylineCoordinates => _polylineCoordinates;
PolylinePoints polylinePoints = PolylinePoints();
double _sumDistance = 0.0; // 총거리
@@ -53,8 +53,6 @@ class RidingProvider with ChangeNotifier {
Position? get position => _position;
Uint8List? customIcon;
- google_map.BitmapDescriptor pictureIcon =
- google_map.BitmapDescriptor.defaultMarker;
setRidingState(RidingState state) {
_ridingState = state;
@@ -80,39 +78,44 @@ class RidingProvider with ChangeNotifier {
Future getLocation() async {
_position = MyLocation().position;
- if (_position != null) {
+ try {
_befLatLng = LatLng(_position!.latitude, position!.longitude);
+ } catch (e) {
+ if (_position == null) {
+ _ridingState = RidingState.error;
+ }
}
}
Future startRiding() async {
+ if (_ridingState == RidingState.error) {
+ notifyListeners();
+ return;
+ }
if (_ridingState == RidingState.before) {
_ridingDate =
DateFormat('yyyy-MM-dd HH:mm:ss').format(DateTime.now()); //format변경
}
- // setCustomMarker();
-
setRidingState(RidingState.riding);
_positionStream.controller.stream.listen((pos) {
_position = pos;
_polylineCoordinates
- .add(google_map.LatLng(_position!.latitude, _position!.longitude));
- //addPolyline();
+ .add(naver.LatLng(_position!.latitude, _position!.longitude));
+ notifyListeners();
});
_stopwatch.start();
_timer = Timer.periodic(Duration(seconds: 1), ((timer) {
if (_position != null) {
- if (_time.inSeconds / 3 == 0) {
+ if (_stopwatch.elapsed.inSeconds % 3 == 0) {
_calRecord(_position!);
}
}
if (isDisposed) return;
notifyListeners();
- print('noti');
_time = _stopwatch.elapsed;
- if (_time.inSeconds / 60 == 0) {
+ if (_time.inSeconds % 60 == 0) {
_saveRecord();
}
}));
@@ -163,22 +166,4 @@ class RidingProvider with ChangeNotifier {
_stopwatch.stop();
_timer.cancel();
}
-
-/* void addPolyline(){
- google_map.Polyline poliline = google_map.Polyline(
- polylineId: const google_map.PolylineId("poly"),
- color: Colors.blue,
- points: polylineCoordinates
- );
- polylines.add();
-
- notifyListeners();
- }*/
- // Future setCustomMarker() async {
- // customIcon = await CustomMarker().getBytesFromAsset("path", 130);
- // }
-
- // Future setPictureMarker() async {
- // pictureIcon = await CustomMarker().getPictuerMarker("");
- // }
}
diff --git a/lib/src/provider/riding_result_provider.dart b/lib/src/provider/riding_result_provider.dart
index 0683873..3168474 100644
--- a/lib/src/provider/riding_result_provider.dart
+++ b/lib/src/provider/riding_result_provider.dart
@@ -2,12 +2,11 @@ import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:fluttertoast/fluttertoast.dart';
-import 'dart:developer' as developer;
import 'package:image_picker/image_picker.dart';
+import 'package:permission_handler/permission_handler.dart';
import 'package:ridingpartner_flutter/src/models/record.dart';
import 'package:ridingpartner_flutter/src/provider/home_record_provider.dart';
import 'package:ridingpartner_flutter/src/service/firebase_database_service.dart';
-import 'package:permission_handler/permission_handler.dart';
import 'package:ridingpartner_flutter/src/service/shared_preference.dart';
import '../models/result.dart';
@@ -32,7 +31,7 @@ class RidingResultProvider with ChangeNotifier {
late Record _record;
Record get record => _record;
- late final List _images;
+ List _images = [];
List get images => _images;
List? _downloadImages;
@@ -75,7 +74,6 @@ class RidingResultProvider with ChangeNotifier {
if (imageXFiles.isNotEmpty) {
_images = imageXFiles;
_imageStatus = ImageStatus.imageSuccess;
- developer.log(_images.toString());
} else {
_imageStatus = ImageStatus.init;
}
@@ -93,9 +91,7 @@ class RidingResultProvider with ChangeNotifier {
Fluttertoast.showToast(msg: "사진은 최대 4장까지 선택 가능합니다.");
}
notifyListeners();
- } catch (e) {
- developer.log(e.toString());
- }
+ } catch (e) {}
}
Future confirmPermissionGranted() async {
diff --git a/lib/src/provider/sights_provider.dart b/lib/src/provider/sights_provider.dart
index c20f548..18d9f65 100644
--- a/lib/src/provider/sights_provider.dart
+++ b/lib/src/provider/sights_provider.dart
@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
-import 'package:google_maps_flutter/google_maps_flutter.dart';
+import 'package:flutter_naver_map/flutter_naver_map.dart';
import 'package:ridingpartner_flutter/src/service/firestore_service.dart';
import '../models/place.dart';
@@ -35,7 +35,7 @@ class SightsProvider with ChangeNotifier {
final routeFromJsonFile =
await rootBundle.loadString('assets/json/place.json');
_sightList = PlaceList.fromJson(routeFromJsonFile).places ?? [];
- _sightList = _sightList.where((element) => element.marker!="").toList();
+ _sightList = _sightList.where((element) => element.marker != "").toList();
if (_sightList.isEmpty) {
_state = MarkerListState.empty;
} else {
diff --git a/lib/src/service/firebase_database_service.dart b/lib/src/service/firebase_database_service.dart
index 6ac7ebb..65d7c02 100644
--- a/lib/src/service/firebase_database_service.dart
+++ b/lib/src/service/firebase_database_service.dart
@@ -1,5 +1,4 @@
import 'dart:convert';
-import 'dart:developer' as developer;
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_database/firebase_database.dart';
@@ -24,10 +23,8 @@ class FirebaseDatabaseService {
"kcal": record.kcal,
"images": record.images != null ? json.encode(record.images) : null
})
- .then((_) => {developer.log("firebase 기록 저장 성공 $record")})
- .catchError((onError) {
- print(onError.toString());
- });
+ .then((_) => {})
+ .catchError((onError) {});
PreferenceUtils.saveRecordPref(record);
}
@@ -35,10 +32,8 @@ class FirebaseDatabaseService {
DatabaseReference ref = _database.ref("$_uId/${record.date}");
await ref
.set({"memo": record.memo})
- .then((_) => {print("메모 내용: ${record.memo}")})
- .catchError((onError) {
- print(onError.toString());
- });
+ .then((_) => {})
+ .catchError((onError) {});
PreferenceUtils.saveRecordMemoPref(record);
}
@@ -71,7 +66,6 @@ class FirebaseDatabaseService {
final DataSnapshot snapshot = await ref.get();
if (snapshot.exists) {
- print("데이터 있음");
Map map = snapshot.value as Map;
// return map.values.map(Record.fromDB).toList();
records = map.values.map((recordEl) {
@@ -91,11 +85,9 @@ class FirebaseDatabaseService {
// .toList()
};
} else {
- print("데이터 없음");
return {'state': RecordState.none};
}
} catch (e) {
- print("catch!");
return {'state': RecordState.fail};
}
}
diff --git a/lib/src/service/firebase_storage_service.dart b/lib/src/service/firebase_storage_service.dart
index 72018c4..c0a0452 100644
--- a/lib/src/service/firebase_storage_service.dart
+++ b/lib/src/service/firebase_storage_service.dart
@@ -1,4 +1,3 @@
-import 'dart:developer' as developer;
import 'dart:io';
import 'package:firebase_storage/firebase_storage.dart';
@@ -16,7 +15,6 @@ class FirebaseStorageService {
return downloadUrl;
} catch (e) {
- developer.log(e.toString());
return "err";
}
}
diff --git a/lib/src/service/social_login_service.dart b/lib/src/service/social_login_service.dart
index 29e7034..6cdaa08 100644
--- a/lib/src/service/social_login_service.dart
+++ b/lib/src/service/social_login_service.dart
@@ -1,5 +1,3 @@
-import 'dart:developer' as developer;
-
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_naver_login/flutter_naver_login.dart' as naver_flutter;
@@ -31,7 +29,6 @@ class SocialLoginService {
saveUserInfo(user.user!);
return user.user!;
} catch (error) {
- developer.log(error.toString());
Fluttertoast.showToast(
msg: "error: 해당 계정의 이메일이 네이버 혹은 구글 로그인으로 이미 등록된 이메일인지 확인해주세요.",
toastLength: Toast.LENGTH_LONG);
@@ -42,7 +39,6 @@ class SocialLoginService {
await kakao_flutter.UserApi.instance.loginWithKakaoAccount();
kakao_flutter.User kakaoUser =
await kakao_flutter.UserApi.instance.me();
- developer.log('kakaoUser: $kakaoUser');
UserCredential user = await loginWithUser({
'platform': 'kakao',
'uId': kakaoUser.id.toString(),
@@ -52,7 +48,6 @@ class SocialLoginService {
saveUserInfo(user.user!);
return user.user;
} catch (error) {
- developer.log(error.toString());
Fluttertoast.showToast(
msg: "error: 해당 계정의 이메일이 네이버 혹은 구글 로그인으로 이미 등록된 이메일인지 확인해주세요.",
toastLength: Toast.LENGTH_LONG);
@@ -78,7 +73,6 @@ class SocialLoginService {
saveUserInfo(user.user!);
return user.user;
} catch (error) {
- developer.log(error.toString());
Fluttertoast.showToast(
msg: "error: 해당 계정의 이메일이 카카오톡 혹은 구글 로그인으로 이미 등록된 이메일인지 확인해주세요.",
toastLength: Toast.LENGTH_LONG);
@@ -94,7 +88,6 @@ class SocialLoginService {
credencial = await FirebaseAuth.instance.createUserWithEmailAndPassword(
email: user['email'], password: user['uId']);
} catch (error) {
- developer.log(error.toString());
} finally {
credencial = await FirebaseAuth.instance.signInWithEmailAndPassword(
email: user['email'], password: user['uId']);
@@ -146,7 +139,6 @@ class SocialLoginService {
Future saveUserInfo(User user) async {
final prefs = await SharedPreferences.getInstance();
- developer.log('save');
prefs.setString('name', user.displayName.toString());
prefs.setString('email', user.email.toString());
prefs.setString('token', user.getIdToken().toString());
@@ -157,27 +149,13 @@ class SocialLoginService {
final FirebaseDatabaseService _databaseService = FirebaseDatabaseService();
Future withdrawal() async {
- while (true) {
- final googleUser = await GoogleSignIn().signIn();
- final GoogleSignInAuthentication googleAuth =
- await googleUser!.authentication;
-
- final OAuthCredential credential = GoogleAuthProvider.credential(
- accessToken: googleAuth.accessToken,
- idToken: googleAuth.idToken,
- );
-
- await fAuth.currentUser?.reauthenticateWithCredential(credential);
- _databaseService.delRecord();
- try {
- await fAuth.currentUser?.delete();
- fAuth.signOut();
- break;
- } catch (e) {
- print('계정탈퇴에 실패했습니다.');
- }
- Future.delayed(const Duration(seconds: 3));
- }
+ _databaseService.delRecord();
+ try {
+ await fAuth.currentUser?.delete();
+ fAuth.signOut();
+ } catch (e) {}
+ Future.delayed(const Duration(seconds: 3));
+
return true;
}
@@ -186,7 +164,6 @@ class SocialLoginService {
await fAuth.signOut();
return true;
} catch (e) {
- print(e.toString());
return false;
}
}
diff --git a/lib/src/service/wether_service.dart b/lib/src/service/wether_service.dart
index 357a9c1..2b3ad81 100644
--- a/lib/src/service/wether_service.dart
+++ b/lib/src/service/wether_service.dart
@@ -1,5 +1,3 @@
-import 'dart:developer' as developer;
-
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:ridingpartner_flutter/src/models/result.dart';
import 'package:ridingpartner_flutter/src/network/network_helper.dart';
@@ -11,7 +9,6 @@ class OpenWeatherService {
Future getWeather() async {
MyLocation myLocation = MyLocation();
- developer.log("myLocation called in network");
try {
await myLocation.getMyCurrentLocation().timeout(Duration(seconds: 3));
@@ -22,102 +19,3 @@ class OpenWeatherService {
return result;
}
}
-
-// //class Network
-// class WeatherService {
-// final String _apiKey = dotenv.env['apiKey']!;
-// final String _path = dotenv.env['path']!;
-// final String _endpointUrl = dotenv.env['endPointUrl']!;
-// //getWeatherData
-// Future getWeatherData() async {
-// var weather = Weather();
-// MyLocation myLocation = MyLocation();
-// developer.log("myLocation called in network");
-// try {
-// await myLocation.getMyCurrentLocation();
-// } catch (e) {
-// developer.log("error : getLocation ${e.toString()}");
-// }
-// //get the current time
-// final now = DateTime.now();
-// var baseDate = DateFormat('yyyyMMdd').format(now);
-// var baseTime = DateFormat('HHmm').format(now);
-// baseTime = redefineBaseTime(baseTime);
-// if (baseTime.substring(0, 2) == '23') {
-// baseDate = DateFormat('yyyyMMdd').format(now.subtract(Duration(days: 1)));
-// }
-// final gridData =
-// ConvGridGps.gpsToGRID(myLocation.latitude!, myLocation.longitude!);
-// final Map queryParams = {
-// 'serviceKey': _apiKey,
-// 'pageNo': 1,
-// 'numOfRows': 60,
-// 'dataType': 'JSON',
-// 'base_date': baseDate,
-// 'base_time': baseTime,
-// 'nx': gridData['x'],
-// 'ny': gridData['y']
-// }.map((key, value) => MapEntry(key, value.toString()));
-// final requestUrl = Uri.https(_endpointUrl, _path, queryParams);
-// var response = await http.get(requestUrl);
-// developer.log(requestUrl.toString());
-// if (response.statusCode == 200) {
-// try {
-// var jsonResponse = jsonDecode(response.body);
-// var weatherData = WeatherData.fromJson(jsonResponse);
-// var weatherItems = weatherData.response!.body!.items!.item!;
-
-// for (var i = 0; i < weatherItems.length; i += 6) {
-// var weatherItem = weatherItems[i];
-
-// switch (weatherItem.category) {
-// case 'PTY':
-// weather.rainType ??=
-// WeatherInfoConverter.getRainType(weatherItem.fcstValue);
-// break;
-// case 'SKY':
-// weather.skyType ??=
-// WeatherInfoConverter.getSkyType(weatherItem.fcstValue);
-// break;
-// case 'T1H':
-// weather.temperature ??= weatherItem.fcstValue;
-// break;
-// case 'REH':
-// weather.humidity ??= weatherItem.fcstValue;
-// break;
-// }
-// }
-// developer.log(weather.temperature.toString());
-// return weather;
-// } catch (e) {
-// developer.log('getWeatherData 오류');
-// developer.log(e.toString());
-// return weather;
-// }
-// } else {
-// return weather;
-// }
-// }
-
-// redefineBaseTime(baseTime) {
-// String h = baseTime.substring(0, 2);
-// String m = baseTime.substring(2, 4);
-
-// int minute = int.parse(m);
-// //기상청 api가 최신 데이터를 못받아오는 일이 잦아 약 1시간전 데이터를 받아오는 것으로 고정
-// if (h == '00') {
-// h = '23';
-// } else {
-// h = (int.parse(h) - 1).toString();
-// }
-
-// if (minute < 45) {
-// m = '00';
-// } else {
-// m = '30';
-// }
-// return h + m;
-// }
-// }
-
-
diff --git a/lib/src/utils/custom_marker.dart b/lib/src/utils/custom_marker.dart
index f62cbff..daa03ca 100644
--- a/lib/src/utils/custom_marker.dart
+++ b/lib/src/utils/custom_marker.dart
@@ -7,7 +7,6 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:http/http.dart' as http;
-import 'package:google_maps_flutter/google_maps_flutter.dart';
class CustomMarker {
// 마커 asset 아이콘으로 넣기, width로 사이즈 조절
@@ -20,9 +19,4 @@ class CustomMarker {
.buffer
.asUint8List();
}
-
- Future getPictuerMarker(String path) async {
- Uint8List makerIconBytes = await getBytesFromAsset(path);
- return BitmapDescriptor.fromBytes(makerIconBytes);
- }
}
diff --git a/lib/src/utils/user_location.dart b/lib/src/utils/user_location.dart
index fb1fa93..26d6dc7 100644
--- a/lib/src/utils/user_location.dart
+++ b/lib/src/utils/user_location.dart
@@ -1,5 +1,3 @@
-import 'dart:developer' as developer;
-
import 'package:geolocator/geolocator.dart';
class MyLocation {
@@ -47,45 +45,9 @@ class MyLocation {
try {
position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high);
- developer.log(
- "latitude : ${position?.latitude} , longitude : ${position?.longitude}");
} catch (e) {
- developer.log("error : getMyCurrentLocation ${e.toString()}");
- position = await Geolocator.getLastKnownPosition().timeout(
- Duration(seconds: 3),
- onTimeout: () => position = const Position(
- longitude: 126.98935225645432,
- latitude: 37.579871128849334,
- timestamp: null,
- accuracy: 0.0,
- altitude: 0.0,
- heading: 0.0,
- speed: 0.0,
- speedAccuracy: 0.0));
+ position = await Geolocator.getLastKnownPosition()
+ .timeout(Duration(seconds: 3), onTimeout: () => position = null);
}
}
-
- // Future _cheakPermission() async {
- // bool serviceEnabled;
- // LocationPermission permission;
- // developer.log("안녕");
- // // Test if location services are enabled.
- // serviceEnabled = await Geolocator.isLocationServiceEnabled();
- // if (!serviceEnabled) {
- // return Future.error('Location services are disabled.');
- // }
-
- // permission = await Geolocator.checkPermission();
- // if (permission == LocationPermission.denied) {
- // permission = await Geolocator.requestPermission();
- // if (permission == LocationPermission.denied) {
- // return Future.error('Location permissions are denied');
- // }
- // }
-
- // if (permission == LocationPermission.deniedForever) {
- // return Future.error(
- // 'Location permissions are permanently denied, we cannot request permissions.');
- // }
- // }
}
diff --git a/pubspec.yaml b/pubspec.yaml
index 9aa3e7b..1dc99e9 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
-version: 1.0.0+1
+version: 1.0.0+2
environment:
sdk: '>=2.18.1 <3.0.0'
@@ -73,6 +73,8 @@ dependencies:
carousel_slider: ^4.2.1
smooth_page_indicator: ^1.0.0+2
logging: ^1.1.1
+ shared_preferences_ios: ^2.1.1
+ flutter_naver_map: ^0.10.6
dev_dependencies:
flutter_test: