{"id":18696060,"url":"https://github.com/jacobkosmart/weather-app-flutter","last_synced_at":"2026-04-18T14:03:38.041Z","repository":{"id":140609275,"uuid":"419922805","full_name":"jacobkosmart/weather-app-flutter","owner":"jacobkosmart","description":"Provide in real-time weather conditions like degree, weather, fine dust etc in current position. It's published on Google Play App Store and Web","archived":false,"fork":false,"pushed_at":"2021-11-16T10:36:38.000Z","size":2635,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-29T09:49:25.272Z","etag":null,"topics":["flutter","http","weather-api"],"latest_commit_sha":null,"homepage":"https://play.google.com/store/apps/details?id=info.jacobko.weather_app\u0026pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jacobkosmart.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-10-22T00:58:50.000Z","updated_at":"2023-07-12T11:13:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"c605fc33-727e-478a-9fa1-5ce20541ebd0","html_url":"https://github.com/jacobkosmart/weather-app-flutter","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jacobkosmart/weather-app-flutter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacobkosmart%2Fweather-app-flutter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacobkosmart%2Fweather-app-flutter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacobkosmart%2Fweather-app-flutter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacobkosmart%2Fweather-app-flutter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jacobkosmart","download_url":"https://codeload.github.com/jacobkosmart/weather-app-flutter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacobkosmart%2Fweather-app-flutter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31971491,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flutter","http","weather-api"],"created_at":"2024-11-07T11:17:01.935Z","updated_at":"2026-04-18T14:03:36.943Z","avatar_url":"https://github.com/jacobkosmart.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Weather App to build flutter web\n\n[Live Demo](https://weather.jacobko.info/#/)\n\n\u003ca href='https://play.google.com/store/apps/details?id=info.jacobko.weather_app\u0026pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'\u003e\u003cimg alt='다운로드하기 Google Play' src='https://play.google.com/intl/en_us/badges/static/images/badges/ko_badge_web_generic.png' width=\"200\"/\u003e\u003c/a\u003e\n\n\u003cimg src=\"https://user-images.githubusercontent.com/28912774/141926820-1a965804-7b63-457a-a857-b6668dfe047e.png\" width=\"500\"/\u003e\n\n## Version\n\n- v.1.0.0 : Android PlayStore App 출시 버전\n\n## 설치 페키지\n\n## Check Point !\n\n### geolocator\n\n\u003e [gelocator package](https://pub.dev/packages/geolocator)\n\n- 현재 위치 정보를 가지고 올수 있는 package 입니다\n\n#### 데이터 가져오기\n\n```dart\nimport 'package:geolocator/geolocator.dart';\n\n// GPS 로 나의 위치를 파악하는 position\nPosition position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);\n```\n\n- App 에서 나의 위치 정보를 사용하려면 반드시 동의 과정을 거쳐야 되기 때문에 각 device 마다 따로 설정을 해줘야 함\n\n#### Android 설정\n\n- 프로젝트 내에서 `android/app/src/main/AndroidManifest.xml` 파일 안에 \u003cmanifest\u003e 테그 안에 붙여 넣기 합니다\n\n```xml\n\n\u003c!-- Internet Permission --\u003e\n\u003cuses-permission android:name=\"android.permission.INTERNET\" /\u003e\n\n\u003c!-- Location Permission --\u003e\n\u003cuses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" /\u003e\n```\n\n- 위의 작업을 하고 다음과 같은 error 가 발생하면 android compileSDKversion 을 다음과 같이 바꿔 줘야 합니다\n\n\u003e (Execution failed for task ‘:geolocator_android:compileDebugJavaWithJavac’ in flutter)[https://fluttercorner.com/execution-failed-for-task-geolocator_androidcompiledebugjavawithjavac-in-flutter/]\n\n```gradle\n\u003c!-- in android/app/build.gradle --\u003e\n\nandroid {\n\n    compileSdkVersion 31\n    defaultConfig {\n        minSdkVersion 21\n        targetSdkVersion 29\n    }\n}\n```\n\n그리고 `gradle.properties` 에서 다음과 같이 설정해줍니다\n\n```gradle\nandroid.useAndroidX=true\nandroid.enableJetifier=true\n```\n\n#### iOS 설정\n\n- 프로젝트 내에 `ios/Runner/info.plist` 안에 `dict` 테그 안에 다음의 코드를 붙여 넣습니다\n\n```plist\n\u003ckey\u003eNSLocationWhenInUseUsageDescription\u003c/key\u003e\n\u003cstring\u003eThis app needs access to location when open.\u003c/string\u003e\n\u003ckey\u003eNSLocationAlwaysUsageDescription\u003c/key\u003e\n\u003cstring\u003eThis app needs access to location when in the background.\u003c/string\u003e\n```\n\n### initState()\n\n- 대부분의 날씨 앱은 사용자가 자기의 위치를 켜자 마자 자동으로 위치를 가져 와서 내가 있는 지역에 날씨 데이터를 보여주게 됩니다. 앱을 시작하자 마자 경도와 위도 위치 정보 가져오기\n\n```dart\n// in loading.dart\n\n  @override\n  // loding 이라는 stateful widget 이 생성되는 순간에 딱 한번만 호출되는 method\n  void initState() {\n    // TODO: implement initState\n    super.initState();\n    getLocation();\n  }\n```\n\n### try , catch\n\n- 사용자가 위치를 deny 하거나, internet, gps 가 잡히지 않아 위치 정보를 가져오지 못하는 경우에는 app 이 충돌되거나, freezing 될 수 있기 때문에 `try catch` 를 사용해서 실패 경우할 경우도 지정해줘야 합니다\n\n```dart\n void getLocation() async {\n    // GPS 로 나의 위치를 파악하는 position\n    try {\n      Position position = await Geolocator.getCurrentPosition(\n          desiredAccuracy: LocationAccuracy.high);\n      print(position);\n    } catch (e) {\n      print('There was a problem with the Internet connection');\n    }\n  }\n```\n\n#### HTTP package (fetch data)\n\n\u003e [Http Package](https://pub.dev/packages/http)\n\n\u003e [fetch data from the internet](https://flutter.dev/docs/cookbook/networking/fetch-data)\n\n```dart\n// in loading.dart\n\n// fetch data from the internet : as http package 라고 하기 위해 alias 사용\nimport 'package:http/http.dart' as http;\n\n// jsonDecode 사용을 위한 convert import\nimport 'dart:convert';\n\n  void initState() {\n    super.initState();\n    getLocation();\n    fetchData();\n  }\n\n\n  void fetchData() async {\n    // fetch data\n    final response = await http.get(Uri.parse(\n        'https://samples.openweathermap.org/data/2.5/weather?q=London\u0026appid=b1b15e88fa797225412429c1c50c122a1'));\n    // response data 가 성공적으로 받아 올경우 200 code 임 : String type 으로 변환\n    if (response.statusCode == 200) {\n      String jsonData = response.body;\n\n      // jsonDecode를 통해서 원하는 데이터 값 가져오기\n      var id = jsonDecode(jsonData)['id'];\n      var description = jsonDecode(jsonData)['weather'][0]['description'];\n      print(id);\n      print(description);\n    }\n  }\n```\n\n![image](https://user-images.githubusercontent.com/28912774/138393987-793b6291-3aea-4fe8-9266-334ac23499d1.png)\n\n### timer_builder 2.0.0 package : 현재 시간 불러 오는 package\n\n### : data format 객체로 return 하기 위한 package\n\n```dart\n\nimport 'package:timer_builder/timer_builder.dart';\nimport 'package:intl/intl.dart';\n\nString getSystemTime() {\n  var now = DateTime.now();\n  // DateFormat 을 받기 위해 intl 0.17. package 사용\n  return DateFormat(\"h:mm a\").format(now);\n}\n\n\n```\n\n- Provides internationalization and localization facilities, including message translation, plurals and genders, date/number formatting and parsing, and bidirectional text.\n\n\u003e [intl Package](https://pub.dev/packages/intl/install)\n\n## reference\n\nFlutter cookbook - [https://flutter.dev/docs/cookbook](https://flutter.dev/docs/cookbook)\n\ngeolocator package - [https://pub.dev/packages/geolocator](https://pub.dev/packages/geolocator)\n\nhttp package - [https://pub.dev/packages/http](https://pub.dev/packages/http)\n\n코딩 셰프 - [https://youtu.be/YqKMBQYZSmw](https://youtu.be/YqKMBQYZSmw)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjacobkosmart%2Fweather-app-flutter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjacobkosmart%2Fweather-app-flutter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjacobkosmart%2Fweather-app-flutter/lists"}