{"id":16401732,"url":"https://github.com/dev-hwang/flutter_dev_packages","last_synced_at":"2026-02-18T04:33:40.898Z","repository":{"id":116518128,"uuid":"509316809","full_name":"Dev-hwang/flutter_dev_packages","owner":"Dev-hwang","description":"[Flutter 3.0] This plugin includes components, utilities, and more to make it easier to develop the Flutter app.","archived":false,"fork":false,"pushed_at":"2022-07-01T04:15:40.000Z","size":113,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-07T19:58:26.696Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Dev-hwang.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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":"2022-07-01T04:12:39.000Z","updated_at":"2024-09-19T02:37:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"d1d56196-5d11-4680-9bb4-64051a5d7ed6","html_url":"https://github.com/Dev-hwang/flutter_dev_packages","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Dev-hwang/flutter_dev_packages","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dev-hwang%2Fflutter_dev_packages","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dev-hwang%2Fflutter_dev_packages/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dev-hwang%2Fflutter_dev_packages/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dev-hwang%2Fflutter_dev_packages/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Dev-hwang","download_url":"https://codeload.github.com/Dev-hwang/flutter_dev_packages/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dev-hwang%2Fflutter_dev_packages/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29568565,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T04:18:28.490Z","status":"ssl_error","status_checked_at":"2026-02-18T04:13:49.018Z","response_time":162,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2024-10-11T05:44:01.089Z","updated_at":"2026-02-18T04:33:35.881Z","avatar_url":"https://github.com/Dev-hwang.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"This plugin includes components, utilities, and more to make it easier to develop the Flutter app.\n\n## Directory\n\n``` bash\n├── logger\n│   ├── models\n│   │   ├── log_event.dart\n│   │   └── log_level.dart\n│   ├── logger.dart\n│   └── printer.dart\n├── network\n│   ├── exception\n│   │   └── api_exception.dart\n│   ├── models\n│   │   ├── charset.dart\n│   │   ├── http_media_type.dart\n│   │   ├── http_request_method.dart\n│   │   └── network_protocol.dart\n│   └── rest_api.dart\n├── permission\n│   ├── models\n│   │   ├── permission_data.dart\n│   │   ├── permission_type.dart\n│   │   └── permissions_status.dart\n│   ├── permission_check_page.dart\n│   └── permission_utils.dart\n├── ui\n│   ├── button\n│   │   ├── models\n│   │   │   └── button_size.dart\n│   │   ├── date_picker_button.dart\n│   │   ├── drop_down_button.dart\n│   │   ├── ghost_button.dart\n│   │   └── simple_button.dart\n│   ├── component\n│   │   ├── gradient_app_bar.dart\n│   │   └── speech_bubble.dart\n│   ├── dialog\n│   │   ├── android_toast.dart\n│   │   ├── custom_dialog.dart\n│   │   ├── modal_date_picker.dart\n│   │   └── system_dialog.dart\n│   └── views\n│       ├── with_drag_detector.dart\n│       ├── with_progress_screen.dart\n│       ├── with_scroll_up_button.dart\n│       ├── with_theme_manager.dart\n│       └── with_will_pop_scope.dart\n├── utils\n│   ├── date_time_utils.dart\n│   ├── device_info_utils.dart\n│   ├── exception_utils.dart\n│   ├── notification_utils.dart\n│   ├── system_utils.dart\n│   ├── text_format_utils.dart\n│   └── web_image_utils.dart\n└── flutter_dev_packages.dart\n```\n\n## Getting started\n\nTo use this plugin, add `flutter_dev_packages` as a [dependency in your pubspec.yaml file](https://flutter.io/platform-plugins/). For example:\n\n```yaml\ndependencies:\n  flutter_dev_packages:\n    git:\n      url: https://github.com/Dev-hwang/flutter_dev_packages.git\n      ref: master\n```\n\n## Usage\n\n플러그인에 포함된 패키지나 유틸리티를 사용하려면 플랫폼별 초기 설정이 필요하다.\n\n### :baby_chick: logger package\n\n1. [sentry.io](https://sentry.io/welcome/) 회원가입을 진행한다.\n\n2. 프로젝트를 생성하고 DSN 값을 얻는다.\n\n3. 프로젝트의 `main` 함수에 아래와 같이 `Sentry` 플러그인을 초기화한다.\n\n``` dart\nimport 'dart:async';\n\nimport 'package:flutter/material.dart';\nimport 'package:flutter_dev_packages/flutter_dev_packages.dart';\n\nconst String kSentryDsn = 'https://80ab98a9a0b448e0b591d2d5db20c47b@o332735.ingest.sentry.io/0';\n\nvoid main() {\n  runZonedGuarded(() async {\n    await Sentry.init((options) {\n      options.dsn = kSentryDsn;\n    });\n\n    runApp(const ExampleApp());\n  }, (error, stackTrace) async {\n    await Logger.f('FATAL EXCEPTION', error: error, stackTrace: stackTrace);\n  });\n}\n```\n\n### :baby_chick: network package\n\nnetwork 패키지 사용 시 아래 권한 추가 필요\n\n#### Android\n\n/android/app/src/main/AndroidManifest.xml\n\n``` xml\n\u003cuses-permission android:name=\"android.permission.INTERNET\" /\u003e\n\u003cuses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" /\u003e\n```\n\n#### iOS\n\n/ios/Runner/info.plist\n\n``` xml\n\u003ckey\u003eNSAppTransportSecurity\u003c/key\u003e\n\u003cdict\u003e\n  \u003ckey\u003eNSAllowsArbitraryLoads\u003c/key\u003e\n  \u003ctrue/\u003e\n  \u003ckey\u003eNSAllowsArbitraryLoadsInWebContent\u003c/key\u003e\n  \u003ctrue/\u003e\n\u003c/dict\u003e\n```\n\n### :baby_chick: permission package\n\npermission 패키지 사용 시 필요 권한 추가 필요\n\n#### Android\n\n/android/app/src/main/AndroidManifest.xml\n\n``` xml\n\u003c!-- 캘린더 --\u003e\n\u003cuses-permission android:name=\"android.permission.READ_CALENDAR\" /\u003e\n\u003cuses-permission android:name=\"android.permission.WRITE_CALENDAR\" /\u003e\n\n\u003c!-- 카메라 --\u003e\n\u003cuses-permission android:name=\"android.permission.CAMERA\" /\u003e\n\n\u003c!-- 연락처 --\u003e\n\u003cuses-permission android:name=\"android.permission.READ_CONTACTS\" /\u003e\n\u003cuses-permission android:name=\"android.permission.WRITE_CONTACTS\" /\u003e\n\u003cuses-permission android:name=\"android.permission.GET_ACCOUNTS\" /\u003e\n\n\u003c!-- 저장소 --\u003e\n\u003cuses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" /\u003e\n\u003cuses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" /\u003e\n\n\u003c!-- SMS --\u003e\n\u003cuses-permission android:name=\"android.permission.SEND_SMS\" /\u003e\n\u003cuses-permission android:name=\"android.permission.RECEIVE_SMS\" /\u003e\n\u003cuses-permission android:name=\"android.permission.READ_SMS\" /\u003e\n\u003cuses-permission android:name=\"android.permission.RECEIVE_WAP_PUSH\" /\u003e\n\u003cuses-permission android:name=\"android.permission.RECEIVE_MMS\" /\u003e\n\n\u003c!-- PHONE --\u003e\n\u003cuses-permission android:name=\"android.permission.READ_PHONE_STATE\" /\u003e\n\u003cuses-permission android:name=\"android.permission.CALL_PHONE\" /\u003e\n\u003cuses-permission android:name=\"android.permission.ADD_VOICEMAIL\" /\u003e\n\u003cuses-permission android:name=\"android.permission.USE_SIP\" /\u003e\n\u003cuses-permission android:name=\"android.permission.READ_CALL_LOG\" /\u003e\n\u003cuses-permission android:name=\"android.permission.WRITE_CALL_LOG\" /\u003e\n\u003cuses-permission android:name=\"android.permission.BIND_CALL_REDIRECTION_SERVICE\" /\u003e\n\n\u003c!-- 위치 --\u003e\n\u003cuses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" /\u003e\n\u003cuses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" /\u003e\n\u003cuses-permission android:name=\"android.permission.ACCESS_BACKGROUND_LOCATION\" /\u003e\n\n\u003c!-- 마이크 --\u003e\n\u003cuses-permission android:name=\"android.permission.RECORD_AUDIO\" /\u003e\n\n\u003c!-- 미디어 --\u003e\n\u003cuses-permission android:name=\"android.permission.ACCESS_MEDIA_LOCATION\" /\u003e\n\n\u003c!-- 모션센서 --\u003e\n\u003cuses-permission android:name=\"android.permission.BODY_SENSORS\" /\u003e\n\n\u003c!-- 활동인식 --\u003e\n\u003cuses-permission android:name=\"android.permission.ACTIVITY_RECOGNITION\" /\u003e\n\n\u003c!-- 블루투스 --\u003e\n\u003cuses-permission android:name=\"android.permission.BLUETOOTH\" /\u003e\n\u003cuses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\" /\u003e\n\u003cuses-permission android:name=\"android.permission.BLUETOOTH_CONNECT\" /\u003e\n\u003cuses-permission android:name=\"android.permission.BLUETOOTH_SCAN\" /\u003e\n\n\u003c!-- Overlay --\u003e\n\u003cuses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" /\u003e\n```\n\n#### iOS\n\n/ios/Runner/info.plist\n\n``` xml\n\u003c!-- 캘린더 --\u003e\n\u003ckey\u003eNSCalendarsUsageDescription\u003c/key\u003e\n\u003cstring\u003e\u003c/string\u003e\n\n\u003c!-- 카메라 --\u003e\n\u003ckey\u003eNSCameraUsageDescription\u003c/key\u003e\n\u003cstring\u003e\u003c/string\u003e\n\n\u003c!-- 연락처 --\u003e\n\u003ckey\u003eNSContactsUsageDescription\u003c/key\u003e\n\u003cstring\u003e\u003c/string\u003e\n\n\u003c!-- 위치 --\u003e\n\u003ckey\u003eNSLocationWhenInUseUsageDescription\u003c/key\u003e\n\u003cstring\u003e\u003c/string\u003e\n\u003ckey\u003eNSLocationAlwaysAndWhenInUseUsageDescription\u003c/key\u003e\n\u003cstring\u003e\u003c/string\u003e\n\u003ckey\u003eNSLocationUsageDescription\u003c/key\u003e\n\u003cstring\u003e\u003c/string\u003e\n\u003ckey\u003eNSLocationAlwaysUsageDescription\u003c/key\u003e\n\u003cstring\u003e\u003c/string\u003e\n\n\u003c!-- 마이크 --\u003e\n\u003ckey\u003eNSMicrophoneUsageDescription\u003c/key\u003e\n\u003cstring\u003e\u003c/string\u003e\n\n\u003c!-- 갤러리 --\u003e\n\u003ckey\u003eNSPhotoLibraryUsageDescription\u003c/key\u003e\n\u003cstring\u003e\u003c/string\u003e\n\n\u003c!-- 미디어 --\u003e\n\u003ckey\u003eNSAppleMusicUsageDescription\u003c/key\u003e\n\u003cstring\u003e\u003c/string\u003e\n\u003ckey\u003ekTCCServiceMediaLibrary\u003c/key\u003e\n\u003cstring\u003e\u003c/string\u003e\n\n\u003c!-- 모션센서 --\u003e\n\u003ckey\u003eNSMotionUsageDescription\u003c/key\u003e\n\u003cstring\u003e\u003c/string\u003e\n\n\u003c!-- 음성인식 --\u003e\n\u003ckey\u003eNSSpeechRecognitionUsageDescription\u003c/key\u003e\n\u003cstring\u003e\u003c/string\u003e\n\n\u003c!-- 리마인더 --\u003e\n\u003ckey\u003eNSRemindersUsageDescription\u003c/key\u003e\n\u003cstring\u003e\u003c/string\u003e\n```\n\n/ios/Podfile\n\n``` xml\npost_install do |installer|\n  installer.pods_project.targets.each do |target|\n    target.build_configurations.each do |config|\n      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [\n        '$(inherited)',\n\n        ## 아래 표를 참고하여 사용할 권한에 대한 매크로를 추가한다.\n        'PERMISSION_LOCATION=1',\n        'PERMISSION_NOTIFICATIONS=1'\n      ]\n    end\n\n    flutter_additional_ios_build_settings(target)\n  end\nend\n```\n\n| Permission                        | Info.plist                                                                                                    | Macro                                |\n| --------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------ |\n| PermissionType.calendar           | NSCalendarsUsageDescription                                                                                   | PERMISSION_EVENTS                    |\n| PermissionType.reminders          | NSRemindersUsageDescription                                                                                   | PERMISSION_REMINDERS                 |\n| PermissionType.contacts           | NSContactsUsageDescription                                                                                    | PERMISSION_CONTACTS                  |\n| PermissionType.camera             | NSCameraUsageDescription                                                                                      | PERMISSION_CAMERA                    |\n| PermissionType.microphone         | NSMicrophoneUsageDescription                                                                                  | PERMISSION_MICROPHONE                |\n| PermissionType.speech             | NSSpeechRecognitionUsageDescription                                                                           | PERMISSION_SPEECH_RECOGNIZER         |\n| PermissionType.photos             | NSPhotoLibraryUsageDescription                                                                                | PERMISSION_PHOTOS                    |\n| PermissionType.location           | NSLocationUsageDescription, NSLocationAlwaysAndWhenInUseUsageDescription, NSLocationWhenInUseUsageDescription | PERMISSION_LOCATION                  |\n| PermissionType.notification       | PermissionGroupNotification                                                                                   | PERMISSION_NOTIFICATIONS             |\n| PermissionType.mediaLibrary       | NSAppleMusicUsageDescription, kTCCServiceMediaLibrary                                                         | PERMISSION_MEDIA_LIBRARY             |\n| PermissionType.sensors            | NSMotionUsageDescription                                                                                      | PERMISSION_SENSORS                   |\n| PermissionType.bluetooth          | NSBluetoothAlwaysUsageDescription, NSBluetoothPeripheralUsageDescription                                      | PERMISSION_BLUETOOTH                 |\n\n### :baby_chick: notification_utils\n\n#### Android\n\n/android/app/src/main/AndroidManifest.xml\n\n``` xml\n\u003cuses-permission android:name=\"android.permission.VIBRATE\" /\u003e\n\u003cuses-permission android:name=\"android.permission.WAKE_LOCK\" /\u003e\n\u003cuses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" /\u003e\n```\n\n/android/app/proguard-rules.pro\n\n``` xml\n-keep class com.dexterous.** { *; }\n```\n\n#### iOS\n\n/ios/Runner/AppDelegate.swift\n\n``` xml\nimport UIKit\nimport Flutter\n\n@UIApplicationMain\n@objc class AppDelegate: FlutterAppDelegate {\n  override func application(\n    _ application: UIApplication,\n    didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?\n  ) -\u003e Bool {\n    GeneratedPluginRegistrant.register(with: self)\n    \n    // 노티피케이션 대리자를 등록하세요.\n    if #available(iOS 10.0, *) {\n      UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate\n    }\n    \n    return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n  }\n}\n```\n\n### :baby_chick: date_picker_button\n\n/project/pubspec.yaml\n\n```yaml\ndependencies:\n  flutter_localizations:\n    sdk: flutter\n```\n\n/project/lib/main.dart\n\n``` dart\nimport 'package:flutter/material.dart';\nimport 'package:flutter_localizations/flutter_localizations.dart';\n\n@override\nWidget build(BuildContext context) {\n  return MaterialApp(\n    localizationsDelegates: [\n      GlobalWidgetsLocalizations.delegate,\n      GlobalMaterialLocalizations.delegate,\n      GlobalCupertinoLocalizations.delegate,\n    ],\n    supportedLocales: [\n      const Locale('en'),\n      const Locale('ko'),\n    ],\n    ...\n  );\n}\n```\n\n## Prepare release\n\n### :star2: keystore 생성 및 서명 구성\n\n#### 1. 터미널에 아래 명령어를 입력하여 keystore 파일을 생성한다.\n\n맥/리눅스에서는 아래 명령어를 사용하세요:\n``` text\nkeytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key\n```\n\n윈도우에서는 아래 명령어를 사용하세요:\n``` text\nkeytool -genkey -v -keystore c:/Users/USER_NAME/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key\n```\n\n#### 2. /android/key.properties 파일을 생성하고 아래 내용을 입력한다.\n\n``` text\nstorePassword=\u003cpassword from previous step\u003e\nkeyPassword=\u003cpassword from previous step\u003e\nkeyAlias=key\nstoreFile=\u003ckey store 파일 위치, 예) /Users/\u003cuser name\u003e/key.jks\u003e\n```\n\n#### 3. /android/app/build.gradle 파일에 아래 코드를 추가한다.\n\n``` text\ndef keystoreProperties = new Properties()\ndef keystorePropertiesFile = rootProject.file('key.properties')\nif (keystorePropertiesFile.exists()) {\n    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))\n}\n\nandroid {\n    // 기본 코드 생략..\n\n    signingConfigs {\n        release {\n            keyAlias keystoreProperties['keyAlias']\n            keyPassword keystoreProperties['keyPassword']\n            storeFile file(keystoreProperties['storeFile'])\n            storePassword keystoreProperties['storePassword']\n        }\n    }\n\n    buildTypes {\n        release {\n            signingConfig signingConfigs.release\n        }\n    }\n}\n```\n\n### :star2: 코드 난독화\n\n#### 1. /android/app/proguard-rules.pro 파일을 생성하고 아래 내용을 입력한다.\n\n``` text\n-keep class io.flutter.app.** { *; }\n-keep class io.flutter.plugin.**  { *; }\n-keep class io.flutter.util.**  { *; }\n-keep class io.flutter.view.**  { *; }\n-keep class io.flutter.**  { *; }\n-keep class io.flutter.plugins.**  { *; }\n-dontwarn io.flutter.embedding.**\n```\n\n#### 2. /android/app/build.gradle 파일에 아래 코드를 추가한다.\n``` text\nandroid {\n    // 기본 코드 생략..\n\n    buildTypes {\n        release {\n            shrinkResources true\n            minifyEnabled true\n            signingConfig signingConfigs.release\n            proguardFiles getDefaultProguardFile(\n                    'proguard-android-optimize.txt'),\n                    'proguard-rules.pro'\n        }\n\n        debug {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile(\n                    'proguard-android-optimize.txt'),\n                    'proguard-rules.pro'\n        }\n    }\n}\n```\n\n자세한 내용은 [공식 홈페이지](https://flutter-ko.dev/docs/deployment/android) 참조\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdev-hwang%2Fflutter_dev_packages","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdev-hwang%2Fflutter_dev_packages","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdev-hwang%2Fflutter_dev_packages/lists"}