Full Code of ExpTechTW/DPIP for AI

main da81009f9ca6 cached
367 files
1.9 MB
538.3k tokens
1446 symbols
1 requests
Download .txt
Showing preview only (2,197K chars total). Download the full file or copy to clipboard to get everything.
Repository: ExpTechTW/DPIP
Branch: main
Commit: da81009f9ca6
Files: 367
Total size: 1.9 MB

Directory structure:
gitextract_ck59hnj4/

├── .crowdin/
│   ├── location_names.csv
│   ├── strings.pot
│   └── weather_station_names.csv
├── .cursorrules
├── .github/
│   ├── CODEOWNERS
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── Bug.yml
│   │   └── Idea.md
│   ├── pull_request_template.md
│   └── workflows/
│       ├── android.yml
│       ├── claude-code-review.yml
│       ├── claude.yml
│       ├── ios.yml
│       └── lock.yml
├── .gitignore
├── .idx/
│   └── dev.nix
├── .metadata
├── CHANGELOG.md
├── CLAUDE.md
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── analysis_options.yaml
├── android/
│   ├── .gitignore
│   ├── app/
│   │   ├── build.gradle
│   │   ├── google-services.json
│   │   └── src/
│   │       ├── debug/
│   │       │   └── AndroidManifest.xml
│   │       ├── main/
│   │       │   ├── AndroidManifest.xml
│   │       │   ├── kotlin/
│   │       │   │   └── com/
│   │       │   │       └── exptech/
│   │       │   │           └── dpip/
│   │       │   │               └── MainActivity.kt
│   │       │   └── res/
│   │       │       ├── drawable/
│   │       │       │   └── launch_background.xml
│   │       │       ├── mipmap-anydpi-v26/
│   │       │       │   ├── ic_launcher.xml
│   │       │       │   └── ic_launcher_round.xml
│   │       │       ├── raw/
│   │       │       │   ├── eew.ogg
│   │       │       │   ├── eew_alert.ogg
│   │       │       │   ├── eq.ogg
│   │       │       │   ├── info.ogg
│   │       │       │   ├── normal.ogg
│   │       │       │   ├── rain.ogg
│   │       │       │   ├── report.ogg
│   │       │       │   ├── tsunami.ogg
│   │       │       │   ├── warn.ogg
│   │       │       │   └── weather.ogg
│   │       │       ├── values/
│   │       │       │   ├── colors.xml
│   │       │       │   ├── strings.xml
│   │       │       │   └── styles.xml
│   │       │       ├── values-ja/
│   │       │       │   └── strings.xml
│   │       │       ├── values-ko/
│   │       │       │   └── strings.xml
│   │       │       ├── values-night/
│   │       │       │   ├── colors.xml
│   │       │       │   └── styles.xml
│   │       │       ├── values-night-v31/
│   │       │       │   └── styles.xml
│   │       │       ├── values-sw600dp/
│   │       │       │   └── styles.xml
│   │       │       ├── values-v31/
│   │       │       │   └── styles.xml
│   │       │       ├── values-zh/
│   │       │       │   └── strings.xml
│   │       │       ├── values-zh-rTW/
│   │       │       │   └── strings.xml
│   │       │       └── xml/
│   │       │           └── shortcuts.xml
│   │       └── profile/
│   │           └── AndroidManifest.xml
│   ├── build.gradle
│   ├── gradle/
│   │   └── wrapper/
│   │       └── gradle-wrapper.properties
│   ├── gradle.properties
│   └── settings.gradle
├── assets/
│   ├── box.json
│   ├── map/
│   │   └── town.json.zst
│   ├── notify_test.json
│   └── translations/
│       ├── en.po
│       ├── ja.po
│       ├── ko.po
│       ├── location_names.csv
│       ├── ru.po
│       ├── vi.po
│       ├── weather_station_names.csv
│       ├── zh-Hans.po
│       └── zh-Hant.po
├── crowdin.yml
├── devtools_options.yaml
├── docs/
│   └── sound.mdx
├── ios/
│   ├── .gitignore
│   ├── Flutter/
│   │   ├── AppFrameworkInfo.plist
│   │   ├── Debug.xcconfig
│   │   ├── Profile.xcconfig
│   │   └── Release.xcconfig
│   ├── Podfile
│   ├── Runner/
│   │   ├── AppDelegate.swift
│   │   ├── Assets.xcassets/
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   ├── 256.heic
│   │   │   │   ├── 512.heic
│   │   │   │   ├── Contents.json
│   │   │   │   └── Icon-App-1024x1024.heic
│   │   │   └── LaunchImage.imageset/
│   │   │       ├── Contents.json
│   │   │       └── README.md
│   │   ├── Base.lproj/
│   │   │   ├── InfoPlist.strings
│   │   │   ├── LaunchScreen.storyboard
│   │   │   └── Main.storyboard
│   │   ├── GoogleService-Info.plist
│   │   ├── Info.plist
│   │   ├── Runner-Bridging-Header.h
│   │   ├── Runner.entitlements
│   │   ├── RunnerProfile.entitlements
│   │   ├── eew.aiff
│   │   ├── eew_alert.aiff
│   │   ├── en.lproj/
│   │   │   └── Monitor.strings
│   │   ├── eq.aiff
│   │   ├── info.aiff
│   │   ├── ja.lproj/
│   │   │   ├── InfoPlist.strings
│   │   │   └── Monitor.strings
│   │   ├── ko.lproj/
│   │   │   ├── InfoPlist.strings
│   │   │   └── Monitor.strings
│   │   ├── normal.aiff
│   │   ├── rain.aiff
│   │   ├── report.aiff
│   │   ├── tsunami.aiff
│   │   ├── warn.aiff
│   │   ├── weather.aiff
│   │   ├── zh.lproj/
│   │   │   └── InfoPlist.strings
│   │   └── zh_TW.lproj/
│   │       ├── InfoPlist.strings
│   │       └── Monitor.intentdefinition
│   ├── Runner.xcodeproj/
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace/
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcshareddata/
│   │   │       ├── IDEWorkspaceChecks.plist
│   │   │       └── WorkspaceSettings.xcsettings
│   │   └── xcshareddata/
│   │       └── xcschemes/
│   │           └── Runner.xcscheme
│   ├── Runner.xcworkspace/
│   │   ├── contents.xcworkspacedata
│   │   └── xcshareddata/
│   │       ├── IDEWorkspaceChecks.plist
│   │       └── WorkspaceSettings.xcsettings
│   └── RunnerTests/
│       └── RunnerTests.swift
├── lib/
│   ├── api/
│   │   ├── _client.dart
│   │   ├── endpoints/
│   │   │   ├── app.dart
│   │   │   ├── device.dart
│   │   │   ├── earthquake.dart
│   │   │   ├── history.dart
│   │   │   ├── station.dart
│   │   │   ├── tsunami.dart
│   │   │   └── weather.dart
│   │   ├── exptech.dart
│   │   ├── model/
│   │   │   ├── announcement.dart
│   │   │   ├── changelog/
│   │   │   │   └── changelog.dart
│   │   │   ├── crowdin/
│   │   │   │   └── localization_progress.dart
│   │   │   ├── eew.dart
│   │   │   ├── eew_info.dart
│   │   │   ├── history/
│   │   │   │   ├── history.dart
│   │   │   │   ├── intensity_history.dart
│   │   │   │   └── report_history.dart
│   │   │   ├── intensity_listing.dart
│   │   │   ├── location/
│   │   │   │   └── location.dart
│   │   │   ├── meteor_station.dart
│   │   │   ├── notification_record.dart
│   │   │   ├── notify/
│   │   │   │   └── notify_settings.dart
│   │   │   ├── received_notification.dart
│   │   │   ├── report/
│   │   │   │   ├── area_intensity.dart
│   │   │   │   ├── earthquake_report.dart
│   │   │   │   └── partial_earthquake_report.dart
│   │   │   ├── rts/
│   │   │   │   ├── rts.dart
│   │   │   │   ├── rts_intensity.dart
│   │   │   │   └── rts_station.dart
│   │   │   ├── server_status.dart
│   │   │   ├── station.dart
│   │   │   ├── station_info.dart
│   │   │   ├── station_intensity.dart
│   │   │   ├── tsunami/
│   │   │   │   ├── tsunami.dart
│   │   │   │   ├── tsunami_actual.dart
│   │   │   │   ├── tsunami_earthquake.dart
│   │   │   │   ├── tsunami_estimate.dart
│   │   │   │   ├── tsunami_info.dart
│   │   │   │   └── tsunami_list.dart
│   │   │   ├── wave_time.dart
│   │   │   ├── weather/
│   │   │   │   ├── lightning.dart
│   │   │   │   ├── rain.dart
│   │   │   │   └── weather.dart
│   │   │   └── weather_schema.dart
│   │   └── route.dart
│   ├── app/
│   │   ├── changelog/
│   │   │   ├── _widgets/
│   │   │   │   └── update_card.dart
│   │   │   └── page.dart
│   │   ├── debug/
│   │   │   └── logs/
│   │   │       └── page.dart
│   │   ├── home/
│   │   │   ├── _models/
│   │   │   │   └── home_location.dart
│   │   │   ├── _widgets/
│   │   │   │   ├── blurred_button.dart
│   │   │   │   ├── date_timeline_item.dart
│   │   │   │   ├── eew_card.dart
│   │   │   │   ├── forecast_card.dart
│   │   │   │   ├── hero_weather.dart
│   │   │   │   ├── history_timeline_item.dart
│   │   │   │   ├── location_button.dart
│   │   │   │   ├── location_not_set_card.dart
│   │   │   │   ├── location_out_of_service.dart
│   │   │   │   ├── mode_toggle_button.dart
│   │   │   │   ├── radar_card.dart
│   │   │   │   ├── thunderstorm_card.dart
│   │   │   │   ├── weather_header.dart
│   │   │   │   └── wind_card.dart
│   │   │   ├── layout.dart
│   │   │   └── page.dart
│   │   ├── map/
│   │   │   ├── _lib/
│   │   │   │   ├── manager.dart
│   │   │   │   ├── managers/
│   │   │   │   │   ├── lightning.dart
│   │   │   │   │   ├── monitor.dart
│   │   │   │   │   ├── precipitation.dart
│   │   │   │   │   ├── radar.dart
│   │   │   │   │   ├── report.dart
│   │   │   │   │   ├── temperature.dart
│   │   │   │   │   ├── tsunami.dart
│   │   │   │   │   └── wind.dart
│   │   │   │   └── utils.dart
│   │   │   ├── _widgets/
│   │   │   │   ├── layer_toggle.dart
│   │   │   │   ├── layer_toggle_sheet.dart
│   │   │   │   ├── map_legend.dart
│   │   │   │   ├── sheet.dart
│   │   │   │   ├── tos_sheet.dart
│   │   │   │   └── ui/
│   │   │   │       ├── positioned_back_button.dart
│   │   │   │       └── positioned_layer_button.dart
│   │   │   └── page.dart
│   │   ├── settings/
│   │   │   ├── _widgets/
│   │   │   │   └── settings_header.dart
│   │   │   ├── donate/
│   │   │   │   └── page.dart
│   │   │   ├── experimental/
│   │   │   │   └── page.dart
│   │   │   ├── layout/
│   │   │   │   └── page.dart
│   │   │   ├── layout.dart
│   │   │   ├── locale/
│   │   │   │   ├── page.dart
│   │   │   │   └── select/
│   │   │   │       └── page.dart
│   │   │   ├── location/
│   │   │   │   ├── page.dart
│   │   │   │   └── select/
│   │   │   │       ├── [city]/
│   │   │   │       │   └── page.dart
│   │   │   │       └── page.dart
│   │   │   ├── map/
│   │   │   │   └── page.dart
│   │   │   ├── notify/
│   │   │   │   ├── (1.eew)/
│   │   │   │   │   └── eew/
│   │   │   │   │       └── page.dart
│   │   │   │   ├── (2.earthquake)/
│   │   │   │   │   ├── intensity/
│   │   │   │   │   │   └── page.dart
│   │   │   │   │   ├── monitor/
│   │   │   │   │   │   └── page.dart
│   │   │   │   │   └── report/
│   │   │   │   │       └── page.dart
│   │   │   │   ├── (3.weather)/
│   │   │   │   │   ├── advisory/
│   │   │   │   │   │   └── page.dart
│   │   │   │   │   ├── evacuation/
│   │   │   │   │   │   └── page.dart
│   │   │   │   │   └── thunderstorm/
│   │   │   │   │       └── page.dart
│   │   │   │   ├── (4.tsunami)/
│   │   │   │   │   └── tsunami/
│   │   │   │   │       └── page.dart
│   │   │   │   ├── (5.basic)/
│   │   │   │   │   └── announcement/
│   │   │   │   │       └── page.dart
│   │   │   │   ├── _lib/
│   │   │   │   │   └── utils.dart
│   │   │   │   ├── _widgets/
│   │   │   │   │   ├── basic_notify_section.dart
│   │   │   │   │   ├── earthquake_notify_section.dart
│   │   │   │   │   ├── eew_notify_section.dart
│   │   │   │   │   ├── sound_list_tile.dart
│   │   │   │   │   ├── tsunami_notify_section.dart
│   │   │   │   │   └── weather_notify_section.dart
│   │   │   │   └── page.dart
│   │   │   ├── page.dart
│   │   │   ├── proxy/
│   │   │   │   └── page.dart
│   │   │   ├── theme/
│   │   │   │   ├── color/
│   │   │   │   │   └── page.dart
│   │   │   │   ├── mode/
│   │   │   │   │   └── page.dart
│   │   │   │   └── page.dart
│   │   │   └── unit/
│   │   │       └── page.dart
│   │   └── welcome/
│   │       ├── 1-about/
│   │       │   └── page.dart
│   │       ├── 2-exptech/
│   │       │   └── page.dart
│   │       ├── 3-notice/
│   │       │   └── page.dart
│   │       ├── 4-permissions/
│   │       │   └── page.dart
│   │       └── layout.dart
│   ├── app.dart
│   ├── app_old/
│   │   └── page/
│   │       ├── map/
│   │       │   ├── map.dart
│   │       │   ├── meteor.dart
│   │       │   ├── tsunami/
│   │       │   │   ├── tsunami_estimate_list.dart
│   │       │   │   └── tsunami_observed_list.dart
│   │       │   ├── typhoon/
│   │       │   │   └── typhoon.dart
│   │       │   └── weather/
│   │       │       ├── humidity.dart
│   │       │       └── pressure.dart
│   │       ├── me/
│   │       │   ├── developer.dart
│   │       │   └── me.dart
│   │       └── more/
│   │           ├── more.dart
│   │           ├── ranking/
│   │           │   ├── ranking.dart
│   │           │   └── tabs/
│   │           │       ├── precipitation.dart
│   │           │       ├── temperature.dart
│   │           │       └── wind.dart
│   │           └── report_list/
│   │               └── report_list.dart
│   ├── core/
│   │   ├── compass.dart
│   │   ├── device_info.dart
│   │   ├── eew.dart
│   │   ├── fcm.dart
│   │   ├── gps_location.dart
│   │   ├── i18n.dart
│   │   ├── notify.dart
│   │   ├── preference.dart
│   │   ├── providers.dart
│   │   ├── rts.dart
│   │   ├── service.dart
│   │   └── update.dart
│   ├── dialog/
│   │   └── welcome/
│   │       ├── announcement.dart
│   │       └── changelog.dart
│   ├── global.dart
│   ├── main.dart
│   ├── models/
│   │   ├── data.dart
│   │   ├── map/
│   │   │   └── earthquake.dart
│   │   └── settings/
│   │       ├── location.dart
│   │       ├── map.dart
│   │       ├── notify.dart
│   │       └── ui.dart
│   ├── route/
│   │   ├── announcement/
│   │   │   └── announcement.dart
│   │   ├── event_viewer/
│   │   │   ├── intensity.dart
│   │   │   └── thunderstorm.dart
│   │   ├── image_viewer/
│   │   │   └── image_viewer.dart
│   │   ├── log/
│   │   │   └── log.dart
│   │   ├── notification/
│   │   │   └── notification.dart
│   │   ├── report/
│   │   │   ├── report.dart
│   │   │   └── report_sheet_content.dart
│   │   └── status/
│   │       └── status.dart
│   ├── router.dart
│   ├── utils/
│   │   ├── constants.dart
│   │   ├── depth_color.dart
│   │   ├── extensions/
│   │   │   ├── asset_bundle.dart
│   │   │   ├── build_context.dart
│   │   │   ├── color.dart
│   │   │   ├── color_scheme.dart
│   │   │   ├── datetime.dart
│   │   │   ├── go_router.dart
│   │   │   ├── iterable.dart
│   │   │   ├── latlng.dart
│   │   │   ├── locale.dart
│   │   │   ├── maplibre.dart
│   │   │   ├── number.dart
│   │   │   ├── preference.dart
│   │   │   ├── product_detail.dart
│   │   │   ├── string.dart
│   │   │   └── theme.dart
│   │   ├── functions.dart
│   │   ├── geojson.dart
│   │   ├── instrumental_intensity_color.dart
│   │   ├── intensity_color.dart
│   │   ├── intervals.dart
│   │   ├── list_icon.dart
│   │   ├── log.dart
│   │   ├── magnitude_color.dart
│   │   ├── map_utils.dart
│   │   ├── need_location.dart
│   │   ├── page_route_builder/
│   │   │   └── forward_back.dart
│   │   ├── radar_color.dart
│   │   ├── serialization.dart
│   │   ├── shader_selector.dart
│   │   ├── toast.dart
│   │   ├── wallpaper_selector.dart
│   │   └── weather_icon.dart
│   └── widgets/
│       ├── blurred_container.dart
│       ├── chip/
│       │   └── label_chip.dart
│       ├── error/
│       │   └── region_out_of_service.dart
│       ├── fog_shader_background.dart
│       ├── home/
│       │   ├── event_list_route.dart
│       │   └── forecast_weather_card.dart
│       ├── layout.dart
│       ├── list/
│       │   ├── detail_field_tile.dart
│       │   ├── rain_time_selector.dart
│       │   ├── segmented_list.dart
│       │   ├── tile_group_header.dart
│       │   ├── time_selector.dart
│       │   ├── timeline_tile.dart
│       │   └── typhoon_time_selector.dart
│       ├── map/
│       │   ├── intensity_legend.dart
│       │   ├── latlng_altitude.dart
│       │   ├── legend.dart
│       │   ├── map.dart
│       │   └── style.dart
│       ├── markdown.dart
│       ├── report/
│       │   ├── enlargeable_image.dart
│       │   ├── intensity_box.dart
│       │   └── list_item.dart
│       ├── responsive/
│       │   └── responsive_container.dart
│       ├── settings/
│       │   └── theme/
│       │       └── theme_radio_tile.dart
│       ├── sheet/
│       │   ├── bottom_sheet_drag_handle.dart
│       │   ├── morphing_sheet.dart
│       │   ├── morphing_sheet_controller.dart
│       │   └── sheet_container.dart
│       ├── shell_wrapper.dart
│       ├── thunderstorm_shader_background.dart
│       ├── typography.dart
│       └── ui/
│           ├── color_picker.dart
│           ├── icon_container.dart
│           ├── labeled_divider.dart
│           └── loading_icon.dart
├── pubspec.yaml
├── shaders/
│   ├── fog.frag
│   └── thunderstorm.frag
└── tools/
    └── update_translations.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .crowdin/location_names.csv
================================================
key,zh-Hant,en,ja,ko,ru,vi,zh-Hans
連江,連江,Lienchiang,,,,,
宜蘭,宜蘭,Yilan,,,,,
彰化,彰化,Changhua,,,,,
南投,南投,Nantou,,,,,
雲林,雲林,Yunlin,,,,,
屏東,屏東,Pingtung,,,,,
基隆,基隆,Keelung,,,,,
臺北,臺北,Taipei,,,,,
新北,新北,New Taipei,,,,,
臺南,臺南,Tainan,,,,,
桃園,桃園,Taoyuan,,,,,
嘉義,嘉義,Chiayi,,,,,
金門,金門,Kinmen,,,,,
高雄,高雄,Kaohsiung,,,,,
臺東,臺東,Taitung,,,,,
花蓮,花蓮,Hualien,,,,,
澎湖,澎湖,Penghu,,,,,
新竹,新竹,Hsinchu,,,,,
臺中,臺中,Taichung,,,,,
苗栗,苗栗,Miaoli,,,,,
成功,成功,Chenggong,,,,,
佳冬,佳冬,Jiadong,,,,,
麥寮,麥寮,Mailiao,,,,,
綠島,綠島,Lüdao,,,,,
蘭嶼,蘭嶼,Lanyu,,,,,
田中,田中,Tianzhong,,,,,
社頭,社頭,Shetou,,,,,
竹田,竹田,Zhutian,,,,,
萬丹,萬丹,Wandan,,,,,
三灣,三灣,Sanwan,,,,,
峨眉,峨眉,Emei,,,,,
南庄,南庄,Nanzhuang,,,,,
太保,太保,Taibao,,,,,
中埔,中埔,Zhongpu,,,,,
番路,番路,Fanlu,,,,,
水上,水上,Shuishang,,,,,
員林,員林,Yuanlin,,,,,
小港,小港,Xiaogang,,,,,
蘇澳,蘇澳,Su'ao,,,,,
五結,五結,Wujie,,,,,
壯圍,壯圍,Zhuangwei,,,,,
南竿,南竿,Nangan,,,,,
莒光,莒光,Juguang,,,,,
烏坵,烏坵,Wuqiu,,,,,
羅東,羅東,Luodong,,,,,
員山,員山,Yuanshan,,,,,
冬山,冬山,Dongshan,,,,,
三星,三星,Sanxing,,,,,
大同,大同,Datong,,,,,
竹東,竹東,Zhudong,,,,,
新埔,新埔,Xinpu,,,,,
關西,關西,Guanxi,,,,,
湖口,湖口,Hukou,,,,,
芎林,芎林,Qionglin,,,,,
橫山,橫山,Hengshan,,,,,
北埔,北埔,Beipu,,,,,
五峰,五峰,Wufeng,,,,,
龍井,龍井,Longjing,,,,,
大雅,大雅,Daya,,,,,
沙鹿,沙鹿,Shalu,,,,,
梧棲,梧棲,Wuqi,,,,,
湖西,湖西,Huxi,,,,,
金峰,金峰,Jinfeng,,,,,
太麻里,太麻里,Taimali,,,,,
卓蘭,卓蘭,Zhuolan,,,,,
大湖,大湖,Dahu,,,,,
公館,公館,Gongguan,,,,,
銅鑼,銅鑼,Tongluo,,,,,
頭屋,頭屋,Touwu,,,,,
三義,三義,Sanyi,,,,,
西湖,西湖,Xihu,,,,,
造橋,造橋,Zaoqiao,,,,,
獅潭,獅潭,Shitan,,,,,
和美,和美,Hemei,,,,,
線西,線西,Xianxi,,,,,
伸港,伸港,Shengang,,,,,
秀水,秀水,Xiushui,,,,,
花壇,花壇,Huatan,,,,,
芬園,芬園,Fenyuan,,,,,
溪湖,溪湖,Xihu,,,,,
東石,東石,Dongshi,,,,,
大村,大村,Dacun,,,,,
埔鹽,埔鹽,Puyan,,,,,
埔心,埔心,Puxin,,,,,
永靖,永靖,Yongjing,,,,,
二水,二水,Ershui,,,,,
二林,二林,Erlin,,,,,
埤頭,埤頭,Pitou,,,,,
芳苑,芳苑,Fangyuan,,,,,
大城,大城,Dacheng,,,,,
竹塘,竹塘,Zhutang,,,,,
溪州,溪州,Xizhou,,,,,
埔里,埔里,Puli,,,,,
草屯,草屯,Caotun,,,,,
竹山,竹山,Zhushan,,,,,
集集,集集,Jiji,,,,,
名間,名間,Mingjian,,,,,
鹿谷,鹿谷,Lugu,,,,,
中寮,中寮,Zhongliao,,,,,
魚池,魚池,Yuchi,,,,,
國姓,國姓,Guoxing,,,,,
水里,水里,Shuili,,,,,
信義,信義,Xinyi,,,,,
仁愛,仁愛,Ren'ai,,,,,
斗六,斗六,Douliu,,,,,
斗南,斗南,Dounan,,,,,
虎尾,虎尾,Huwei,,,,,
西螺,西螺,Xiluo,,,,,
土庫,土庫,Tuku,,,,,
北港,北港,Beigang,,,,,
古坑,古坑,Gukeng,,,,,
大埤,大埤,Dapi,,,,,
莿桐,莿桐,Citong,,,,,
林內,林內,Linnei,,,,,
二崙,二崙,Erlun,,,,,
崙背,崙背,Lunbei,,,,,
東勢,東勢,Dongshi,,,,,
褒忠,褒忠,Baozhong,,,,,
元長,元長,Yuanchang,,,,,
水林,水林,Shuilin,,,,,
朴子,朴子,Puzi,,,,,
大林,大林,Dalin,,,,,
民雄,民雄,Minxiong,,,,,
溪口,溪口,Xikou,,,,,
新港,新港,Xingang,,,,,
六腳,六腳,Liujiao,,,,,
義竹,義竹,Yizhu,,,,,
鹿草,鹿草,Lucao,,,,,
竹崎,竹崎,Zhuqi,,,,,
梅山,梅山,Meishan,,,,,
大埔,大埔,Dapu,,,,,
阿里山,阿里山,Alishan,,,,,
潮州,潮州,Chaozhou,,,,,
長治,長治,Changzhi,,,,,
麟洛,麟洛,Linluo,,,,,
九如,九如,Jiuru,,,,,
里港,里港,Ligang,,,,,
鹽埔,鹽埔,Yanpu,,,,,
高樹,高樹,Gaoshu,,,,,
萬巒,萬巒,Wanluan,,,,,
內埔,內埔,Neipu,,,,,
新埤,新埤,Xinpi,,,,,
崁頂,崁頂,Kanding,,,,,
南州,南州,Nanzhou,,,,,
琉球,琉球,Liuqiu,,,,,
三地門,三地門,Sandimen,,,,,
霧臺,霧臺,Wutai,,,,,
瑪家,瑪家,Majia,,,,,
泰武,泰武,Taiwu,,,,,
來義,來義,Laiyi,,,,,
春日,春日,Chunri,,,,,
獅子,獅子,Shizi,,,,,
鹿野,鹿野,Luye,,,,,
池上,池上,Chishang,,,,,
延平,延平,Yanping,,,,,
光復,光復,Guangfu,,,,,
瑞穗,瑞穗,Ruisui,,,,,
富里,富里,Fuli,,,,,
馬公,馬公,Magong,,,,,
白沙,白沙,Baisha,,,,,
西嶼,西嶼,Xiyu,,,,,
望安,望安,Wang'an,,,,,
七美,七美,Qimei,,,,,
暖暖,暖暖,Nuannuan,,,,,
大安,大安,Da'an,,,,,
文山,文山,Wenshan,,,,,
鹽埕,鹽埕,Yancheng,,,,,
新興,新興,Xinxing,,,,,
前金,前金,Qianjin,,,,,
前鎮,前鎮,Qianzhen,,,,,
頭城,頭城,Toucheng,,,,,
南澳,南澳,Nan'ao,,,,,
竹北,竹北,Zhubei,,,,,
新豐,新豐,Xinfeng,,,,,
苑裡,苑裡,Yuanli,,,,,
通霄,通霄,Tongxiao,,,,,
竹南,竹南,Zhunan,,,,,
後龍,後龍,Houlong,,,,,
鹿港,鹿港,Lukang,,,,,
福興,福興,Fuxing,,,,,
臺西,臺西,Taixi,,,,,
四湖,四湖,Sihu,,,,,
口湖,口湖,Kouhu,,,,,
布袋,布袋,Budai,,,,,
東港,東港,Donggang,,,,,
枋寮,枋寮,Fangliao,,,,,
新園,新園,Xinyuan,,,,,
林邊,林邊,Linbian,,,,,
車城,車城,Checheng,,,,,
滿州,滿州,Manzhou,,,,,
枋山,枋山,Fangshan,,,,,
牡丹,牡丹,Mudan,,,,,
卑南,卑南,Beinan,,,,,
東河,東河,Donghe,,,,,
吉安,吉安,Ji'an,,,,,
壽豐,壽豐,Shoufeng,,,,,
秀林,秀林,Xiulin,,,,,
楠梓,楠梓,Nanzi,,,,,
鳳山,鳳山,Fengshan,,,,,
大寮,大寮,Daliao,,,,,
大樹,大樹,Dashu,,,,,
大社,大社,Dashe,,,,,
仁武,仁武,Renwu,,,,,
鳥松,鳥松,Niaosong,,,,,
岡山,岡山,Gangshan,,,,,
橋頭,橋頭,Qiaotou,,,,,
燕巢,燕巢,Yanchao,,,,,
田寮,田寮,Tianliao,,,,,
阿蓮,阿蓮,Alian,,,,,
路竹,路竹,Luzhu,,,,,
湖內,湖內,Hunei,,,,,
旗山,旗山,Qishan,,,,,
美濃,美濃,Meinong,,,,,
六龜,六龜,Liugui,,,,,
甲仙,甲仙,Jiaxian,,,,,
杉林,杉林,Shanlin,,,,,
內門,內門,Neimen,,,,,
茂林,茂林,Maolin,,,,,
桃源,桃源,Taoyuan,,,,,
那瑪夏,那瑪夏,Namaxia,,,,,
永和,永和,Yonghe,,,,,
新店,新店,Xindian,,,,,
土城,土城,Tucheng,,,,,
蘆洲,蘆洲,Luzhou,,,,,
五股,五股,Wugu,,,,,
坪林,坪林,Pinglin,,,,,
平溪,平溪,Pingxi,,,,,
烏來,烏來,Wulai,,,,,
豐原,豐原,Fengyuan,,,,,
后里,后里,Houli,,,,,
神岡,神岡,Shengang,,,,,
新社,新社,Xinshe,,,,,
石岡,石岡,Shigang,,,,,
外埔,外埔,Waipu,,,,,
大肚,大肚,Dadu,,,,,
新營,新營,Xinying,,,,,
鹽水,鹽水,Yanshui,,,,,
白河,白河,Baihe,,,,,
後壁,後壁,Houbi,,,,,
麻豆,麻豆,Madou,,,,,
下營,下營,Xiaying,,,,,
六甲,六甲,Liujia,,,,,
官田,官田,Guantian,,,,,
大內,大內,Danei,,,,,
佳里,佳里,Jiali,,,,,
學甲,學甲,Xuejia,,,,,
西港,西港,Xigang,,,,,
新化,新化,Xinhua,,,,,
新市,新市,Xinshi,,,,,
安定,安定,Anding,,,,,
玉井,玉井,Yujing,,,,,
楠西,楠西,Nanxi,,,,,
南化,南化,Nanhua,,,,,
左鎮,左鎮,Zuozhen,,,,,
仁德,仁德,Rende,,,,,
歸仁,歸仁,Guiren,,,,,
關廟,關廟,Guanmiao,,,,,
龍崎,龍崎,Longqi,,,,,
永康,永康,Yongkang,,,,,
北,北,North,,,,,
林園,林園,Linyuan,,,,,
茄萣,茄萣,Qieding,,,,,
永安,永安,Yong'an,,,,,
彌陀,彌陀,Mituo,,,,,
梓官,梓官,Ziguan,,,,,
淡水,淡水,Tamsui,,,,,
瑞芳,瑞芳,Ruifang,,,,,
林口,林口,Linkou,,,,,
三芝,三芝,Sanzhi,,,,,
八里,八里,Bali,,,,,
大甲,大甲,Dajia,,,,,
北門,北門,Beimen,,,,,
安南,安南,Annan,,,,,
蘆竹,蘆竹,Luzhu,,,,,
龜山,龜山,Guishan,,,,,
復興,復興,Fuxing,,,,,
東,東,East,,,,,
西,西,West,,,,,
達仁,達仁,Daren,,,,,
大武,大武,Dawu,,,,,
關山,關山,Guanshan,,,,,
海端,海端,Haiduan,,,,,
香山,香山,Xiangshan,,,,,
礁溪,礁溪,Jiaoxi,,,,,
玉里,玉里,Yuli,,,,,
卓溪,卓溪,Zhuoxi,,,,,
頭份,頭份,Toufen,,,,,
清水,清水,Qingshui,,,,,
南,南,South,,,,,
安平,安平,Anping,,,,,
中西,中西,West Central,,,,,
大溪,大溪,Daxi,,,,,
八德,八德,Bade,,,,,
大園,大園,Dayuan,,,,,
楊梅,楊梅,Yangmei,,,,,
七堵,七堵,Qidu,,,,,
中正,中正,Zhongzheng,,,,,
中山,中山,Zhongshan,,,,,
安樂,安樂,Anle,,,,,
三峽,三峽,Sanxia,,,,,
鶯歌,鶯歌,Yingge,,,,,
中和,中和,Zhonghe,,,,,
樹林,樹林,Shulin,,,,,
深坑,深坑,Shenkeng,,,,,
板橋,板橋,Banqiao,,,,,
石碇,石碇,Shiding,,,,,
新莊,新莊,Xinzhuang,,,,,
泰山,泰山,Taishan,,,,,
三重,三重,Sanchong,,,,,
雙溪,雙溪,Shuangxi,,,,,
貢寮,貢寮,Gongliao,,,,,
汐止,汐止,Xizhi,,,,,
萬里,萬里,Wanli,,,,,
金山,金山,Jinshan,,,,,
石門,石門,Shimen,,,,,
苓雅,苓雅,Lingya,,,,,
三民,三民,Sanmin,,,,,
新屋,新屋,Xinwu,,,,,
觀音,觀音,Guanyin,,,,,
北竿,北竿,Beigan,,,,,
東引,東引,Dongyin,,,,,
烈嶼,烈嶼,Lieyu,,,,,
旗津,旗津,Qijin,,,,,
長濱,長濱,Changbin,,,,,
豐濱,豐濱,Fengbin,,,,,
霧峰,霧峰,Wufeng,,,,,
大里,大里,Dali,,,,,
烏日,烏日,Wuri,,,,,
中,中,Central,,,,,
南屯,南屯,Nantun,,,,,
西屯,西屯,Xitun,,,,,
北屯,北屯,Beitun,,,,,
潭子,潭子,Tanzi,,,,,
萬華,萬華,Wanhua,,,,,
松山,松山,Songshan,,,,,
士林,士林,Shilin,,,,,
北投,北投,Beitou,,,,,
新城,新城,Xincheng,,,,,
善化,善化,Shanhua,,,,,
山上,山上,Shanshang,,,,,
北斗,北斗,Beidou,,,,,
田尾,田尾,Tianwei,,,,,
金沙,金沙,Jinsha,,,,,
金湖,金湖,Jinhu,,,,,
柳營,柳營,Liuying,,,,,
東山,東山,Dongshan,,,,,
七股,七股,Qigu,,,,,
將軍,將軍,Jiangjun,,,,,
鼓山,鼓山,Gushan,,,,,
左營,左營,Zuoying,,,,,
中壢,中壢,Zhongli,,,,,
寶山,寶山,Baoshan,,,,,
恆春,恆春,Hengchun,,,,,
太平,太平,Taiping,,,,,
鳳林,鳳林,Fenglin,,,,,
萬榮,萬榮,Wanrong,,,,,
龍潭,龍潭,Longtan,,,,,
平鎮,平鎮,Pingzhen,,,,,
南港,南港,Nangang,,,,,
內湖,內湖,Neihu,,,,,
金寧,金寧,Jinning,,,,,
金城,金城,Jincheng,,,,,
尖石,尖石,Jianshi,,,,,
泰安,泰安,Tai'an,,,,,
和平,和平,Heping,,,,,
縣,縣,County,,,,,
鄉,鄉,Township,,,,,
鎮,鎮,Town,,,,,
市,市,City,,,,,
區,區,District,,,,,

================================================
FILE: .crowdin/strings.pot
================================================
#: ./lib/core/service.dart:291
msgid "正在更新位置"
msgstr ""

#: ./lib/core/service.dart:292
msgid "取得 GPS 位置中..."
msgstr ""

#: ./lib/app/settings/notify/page.dart:51
msgid "接收全部"
msgstr ""

#: ./lib/app/settings/notify/page.dart:50
msgid "關閉"
msgstr ""

#: ./lib/app/settings/notify/_widgets/eew_notify_section.dart:51
msgid "接收類別"
msgstr ""

#: ./lib/app/settings/notify/page.dart:35
msgid "所在地震度1以上"
msgstr ""

#: ./lib/app/settings/notify/page.dart:46
msgid "海嘯消息、海嘯警報"
msgstr ""

#: ./lib/app/settings/notify/page.dart:45
msgid "只接收海嘯警報"
msgstr ""

#: ./lib/app/settings/notify/page.dart:41
msgid "接收所在地"
msgstr ""

#: ./lib/app/settings/notify/page.dart:27
msgid "所在地震度4以上"
msgstr ""

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:28
msgid "音效測試"
msgstr ""

#: ./lib/route/announcement/announcement.dart:81
msgid "公告"
msgstr ""

#: ./lib/app/settings/notify/(5.basic)/announcement/page.dart:32
msgid "發送公告時"
msgstr ""

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:46
msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求"
msgstr ""

#: ./lib/app/settings/notify/page.dart:82
msgid "伺服器排隊中,請稍候…"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:166
msgid "通知"
msgstr ""

#: ./lib/app/settings/page.dart:182
msgid "推播通知設定與通知音效測試"
msgstr ""

#: ./lib/app/home/_widgets/location_not_set_card.dart:33
msgid "尚未設定所在地"
msgstr ""

#: ./lib/app/settings/notify/page.dart:201
msgid "請先設定所在地來使用通知功能"
msgstr ""

#: ./lib/app/settings/notify/page.dart:211
msgid "設定所在地"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:209
msgid "地震速報"
msgstr ""

#: ./lib/app/settings/notify/page.dart:232
msgid "緊急地震速報"
msgstr ""

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:113
msgid "地震"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:1579
msgid "強震監視器"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:1302
msgid "地震報告"
msgstr ""

#: ./lib/app/settings/notify/page.dart:290
msgid "震度速報"
msgstr ""

#: ./lib/app/settings/notify/page.dart:304
msgid "天氣"
msgstr ""

#: ./lib/app/home/_widgets/thunderstorm_card.dart:63
msgid "雷雨即時訊息"
msgstr ""

#: ./lib/app/settings/notify/page.dart:334
msgid "天氣警特報"
msgstr ""

#: ./lib/app/settings/notify/page.dart:354
msgid "防災資訊"
msgstr ""

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:129
msgid "海嘯"
msgstr ""

#: ./lib/app/settings/notify/page.dart:378
msgid "海嘯資訊"
msgstr ""

#: ./lib/app/settings/notify/page.dart:390
msgid "其他"
msgstr ""

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31
msgid "重大"
msgstr ""

#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:31
msgid "海嘯警報發布時"
msgstr ""

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:37
msgid "一般"
msgstr ""

#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:37
msgid "海嘯消息發布時"
msgstr ""

#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:41
msgid "太平洋海嘯消息(無聲通知)"
msgstr ""

#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:42
msgid "太平洋海嘯消息發布時"
msgstr ""

#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:30
msgid "強震監視器(一般)"
msgstr ""

#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:31
msgid "偵測到晃動"
msgstr ""

#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:30
msgid "震度速報(一般)"
msgstr ""

#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:31
msgid "所在地(鄉鎮)實測震度 3 以上"
msgstr ""

#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36
msgid "震度速報(無聲通知)"
msgstr ""

#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:37
msgid "所在地(鄉鎮)實測震度 1 以上"
msgstr ""

#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:30
msgid "地震報告(一般)"
msgstr ""

#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:31
msgid "所在地(縣市)實測震度 3 以上"
msgstr ""

#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:36
msgid "地震報告(無聲通知)"
msgstr ""

#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:37
msgid "所在地(縣市)實測震度 1 以上"
msgstr ""

#: ./lib/app/settings/notify/_lib/utils.dart:15
msgid "已更新通知設定"
msgstr ""

#: ./lib/app/settings/notify/_lib/utils.dart:22
msgid "更新通知設定失敗"
msgstr ""

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:30
msgid "緊急地震速報(重大)"
msgstr ""

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:31
msgid ""
"最大震度 5 弱以上 且\n"
"所在地(鄉鎮)預估震度 4 以上"
msgstr ""

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:36
msgid "緊急地震速報(一般)"
msgstr ""

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:37
msgid ""
"最大震度 5 弱以上 且\n"
"所在地(鄉鎮)預估震度 2 以上"
msgstr ""

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:41
msgid "緊急地震速報(無聲)"
msgstr ""

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:42
msgid ""
"最大震度 5 弱以上 且\n"
"所在地(鄉鎮)預估震度 1 以上"
msgstr ""

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:46
msgid "地震速報(重大)"
msgstr ""

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:47
msgid "所在地(鄉鎮)預估震度 4 以上"
msgstr ""

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:51
msgid "地震速報(一般)"
msgstr ""

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:52
msgid "所在地(鄉鎮)預估震度 2 以上"
msgstr ""

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:56
msgid "地震速報(無聲)"
msgstr ""

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:57
msgid "所在地(鄉鎮)預估震度 1 以上"
msgstr ""

#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:32
msgid "所在地(鄉鎮)發布防災警訊時"
msgstr ""

#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:38
msgid "所在地(鄉鎮)發布防災資訊時"
msgstr ""

#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:32
msgid ""
"所在地(鄉鎮)發布紅色燈號之\n"
"天氣警特報"
msgstr ""

#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:38
msgid ""
"所在地(鄉鎮)發布上述除外燈號之\n"
"天氣警特報"
msgstr ""

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:32
msgid "所在地(鄉鎮)發布山區暴雨時"
msgstr ""

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:38
msgid "所在地(鄉鎮)發布雷雨即時訊息時"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:197
msgid "啟動時進入強震監視器"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:57
msgid "地震速報不限制非 CWA 來源"
msgstr ""

#: ./lib/app/settings/page.dart:428
msgid "實驗性功能"
msgstr ""

#: ./lib/app/settings/page.dart:429
msgid "搶先體驗開發中的新功能"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:154
msgid "注意"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:162
msgid "這些功能仍在開發中,可能會不穩定或在未來的版本中變更。"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:188
msgid "啟動行為"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:198
msgid "開啟 App 時直接進入強震監視器地圖"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:218
msgid "不限制非 CWA 來源"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:219
msgid "顯示所有來源的地震速報資料"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:280
msgid "啟用實驗性功能"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:286
msgid "你即將啟用:"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:317
msgid "此功能為實驗性質,可能會造成應用程式不穩定或行為異常。如遇問題,請至設定中關閉此功能。"
msgstr ""

#: ./lib/route/image_viewer/image_viewer.dart:78
msgid "取消"
msgstr ""

#: ./lib/app/settings/layout/page.dart:272
msgid "啟用"
msgstr ""

#: ./lib/app/settings/page.dart:151
msgid "單位"
msgstr ""

#: ./lib/app/settings/page.dart:152
msgid "調整 DPIP 顯示數值時使用的單位"
msgstr ""

#: ./lib/app/settings/unit/page.dart:60
msgid "使用華氏度"
msgstr ""

#: ./lib/app/settings/unit/page.dart:61
msgid "切換溫度顯示單位為華氏度 (℉)"
msgstr ""

#: ./lib/app/settings/page.dart:141
msgid "語言"
msgstr ""

#: ./lib/app/settings/page.dart:142
msgid "調整 DPIP 的顯示語言"
msgstr ""

#: ./lib/app/settings/locale/page.dart:41
msgid "顯示語言"
msgstr ""

#: ./lib/app/settings/locale/page.dart:42
msgid "系統語言"
msgstr ""

#: ./lib/app/settings/locale/page.dart:52
msgid "協助翻譯"
msgstr ""

#: ./lib/app/settings/locale/page.dart:53
msgid "點擊這裡來幫助我們改進 DPIP 的翻譯"
msgstr ""

#: ./lib/app/settings/locale/select/page.dart:116
msgid "已翻譯 {translated}・已校對 {approved}"
msgstr ""

#: ./lib/app/settings/locale/select/page.dart:129
msgid "來源語言"
msgstr ""

#: ./lib/app/settings/locale/select/page.dart:163
msgid "選擇語言"
msgstr ""

#: ./lib/app/settings/donate/page.dart:52
msgid "無法連線至商店,請稍後再試"
msgstr ""

#: ./lib/app/settings/donate/page.dart:59
msgid "找不到商品,請稍候再試"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:521
msgid "重新載入"
msgstr ""

#: ./lib/app/settings/donate/page.dart:171
msgid "正在載入商店物品中"
msgstr ""

#: ./lib/app/settings/donate/page.dart:225
msgid "支持 DPIP"
msgstr ""

#: ./lib/app/settings/donate/page.dart:233
msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。您的支持將幫助我們維持伺服器運行與持續開發。"
msgstr ""

#: ./lib/app/settings/donate/page.dart:260
msgid "訂閱制"
msgstr ""

#: ./lib/app/settings/donate/page.dart:276
msgid "推薦"
msgstr ""

#: ./lib/app/settings/donate/page.dart:443
msgid "{price}/月"
msgstr ""

#: ./lib/app/settings/donate/page.dart:475
msgid "單次支援"
msgstr ""

#: ./lib/app/settings/donate/page.dart:615
msgid "恢復購買"
msgstr ""

#: ./lib/app/settings/donate/page.dart:628
msgid "無法連線至 {store},請稍後再試。"
msgstr ""

#: ./lib/app/settings/donate/page.dart:639
msgid "正在恢復您購買的訂閱"
msgstr ""

#: ./lib/app/settings/donate/page.dart:644
msgid "使用條款"
msgstr ""

#: ./lib/app/settings/donate/page.dart:648
msgid "隱私權政策"
msgstr ""

#: ./lib/app/settings/proxy/page.dart:51
msgid "設定已儲存"
msgstr ""

#: ./lib/app/settings/page.dart:200
msgid "HTTP 代理"
msgstr ""

#: ./lib/app/settings/page.dart:201
msgid "調整 HTTP 代理伺服器設定"
msgstr ""

#: ./lib/app/settings/proxy/page.dart:75
msgid "啟用代理"
msgstr ""

#: ./lib/app/settings/proxy/page.dart:76
msgid "透過代理伺服器發送所有網路請求"
msgstr ""

#: ./lib/app/settings/proxy/page.dart:88
msgid "代理主機"
msgstr ""

#: ./lib/app/settings/proxy/page.dart:102
msgid "代理端口"
msgstr ""

#: ./lib/app/settings/proxy/page.dart:117
msgid "設定儲存後,需要重新啟動應用程式才能生效"
msgstr ""

#: ./lib/route/image_viewer/image_viewer.dart:85
msgid "設定"
msgstr ""

#: ./lib/app/settings/page.dart:71
msgid "自訂你的 DPIP 使用體驗"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:174
msgid "位置"
msgstr ""

#: ./lib/app/settings/location/page.dart:417
msgid "所在地"
msgstr ""

#: ./lib/app/settings/location/page.dart:241
msgid "設定你的所在地來接收當地的即時資訊"
msgstr ""

#: ./lib/app/settings/page.dart:113
msgid "介面"
msgstr ""

#: ./lib/app/settings/layout/page.dart:47
msgid "版面"
msgstr ""

#: ./lib/app/settings/layout/page.dart:48
msgid "調整首頁的版面樣式"
msgstr ""

#: ./lib/app/settings/theme/page.dart:25
msgid "主題"
msgstr ""

#: ./lib/app/settings/theme/page.dart:26
msgid "調整 DPIP 整體的外觀與顏色"
msgstr ""

#: ./lib/app/settings/map/page.dart:49
msgid "地圖"
msgstr ""

#: ./lib/app/settings/map/page.dart:50
msgid "調整地圖的顯示樣式"
msgstr ""

#: ./lib/app/settings/page.dart:191
msgid "網路"
msgstr ""

#: ./lib/app/settings/page.dart:210
msgid "資訊"
msgstr ""

#: ./lib/app/changelog/page.dart:54
msgid "更新日誌"
msgstr ""

#: ./lib/app/settings/page.dart:230
msgid "瀏覽 DPIP 的歷次更新紀錄"
msgstr ""

#: ./lib/app/settings/page.dart:240
msgid "第三方套件授權"
msgstr ""

#: ./lib/app/settings/page.dart:241
msgid "DPIP 的實現歸功於開放原始碼"
msgstr ""

#: ./lib/app/settings/page.dart:264
msgid "贊助我們"
msgstr ""

#: ./lib/app/settings/page.dart:267
msgid "幫助我們維護伺服器的穩定和長久發展"
msgstr ""

#: ./lib/app/settings/page.dart:343
msgid "下載"
msgstr ""

#: ./lib/app/settings/page.dart:383
msgid "除錯"
msgstr ""

#: ./lib/app/settings/page.dart:391
msgid "應用程式版本"
msgstr ""

#: ./lib/app/settings/page.dart:400
msgid "裝置資訊"
msgstr ""

#: ./lib/app/settings/page.dart:409
msgid "複製通知 Token"
msgstr ""

#: ./lib/app/debug/logs/page.dart:16
msgid "App 日誌"
msgstr ""

#: ./lib/app/settings/page.dart:463
msgid "任何資訊應以中央氣象署發布之內容為準"
msgstr ""

#: ./lib/app/settings/location/page.dart:74
msgid "無法取得通知權限"
msgstr ""

#: ./lib/app/settings/location/page.dart:76
msgid "無法取得位置權限"
msgstr ""

#: ./lib/app/settings/location/page.dart:77
msgid "無法取得自啟動權限"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:180
msgid "省電策略"
msgstr ""

#: ./lib/route/image_viewer/image_viewer.dart:71
msgid "無法取得權限"
msgstr ""

#: ./lib/app/settings/location/page.dart:84
msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。"
msgstr ""

#: ./lib/app/settings/location/page.dart:86
msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。"
msgstr ""

#: ./lib/app/settings/location/page.dart:89
msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。"
msgstr ""

#: ./lib/app/settings/location/page.dart:91
msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。"
msgstr ""

#: ./lib/app/settings/location/page.dart:93
msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。"
msgstr ""

#: ./lib/app/settings/location/page.dart:95
msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。"
msgstr ""

#: ./lib/app/settings/location/page.dart:96
msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。"
msgstr ""

#: ./lib/app/settings/location/page.dart:174
msgid "自動啟動"
msgstr ""

#: ./lib/app/settings/location/page.dart:175
msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。"
msgstr ""

#: ./lib/app/settings/location/page.dart:199
msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。"
msgstr ""

#: ./lib/app/settings/location/page.dart:233
msgid "一律允許"
msgstr ""

#: ./lib/app/settings/location/page.dart:233
msgid "永遠"
msgstr ""

#: ./lib/app/settings/location/page.dart:253
msgid "自動更新"
msgstr ""

#: ./lib/app/settings/location/page.dart:254
msgid "定期更新目前的所在地"
msgstr ""

#: ./lib/app/settings/location/page.dart:263
msgid ""
"自動定位功能將使用您的裝置上的 GPS,即使 DPIP "
"關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。"
msgstr ""

#: ./lib/app/settings/location/page.dart:334
msgid "通知功能已被拒絕,請移至設定允許權限。"
msgstr ""

#: ./lib/app/settings/location/page.dart:395
msgid "省電策略已被拒絕,請移至設定允許權限。"
msgstr ""

#: ./lib/app/settings/location/select/[city]/page.dart:98
msgid "設定所在地時發生錯誤,請稍候再試一次。"
msgstr ""

#: ./lib/app/home/_widgets/location_button.dart:233
msgid "新增地點"
msgstr ""

#: ./lib/app/settings/location/select/page.dart:33
msgid "縣市"
msgstr ""

#: ./lib/app/settings/location/select/page.dart:44
msgid "目前所在地"
msgstr ""

#: ./lib/app/settings/layout/page.dart:56
msgid "拖曳調整順序"
msgstr ""

#: ./lib/app/settings/layout/page.dart:100
msgid "已停用"
msgstr ""

#: ./lib/app/settings/layout/page.dart:135
msgid "所有區塊皆已啟用"
msgstr ""

#: ./lib/app/settings/layout/page.dart:202
msgid "停用"
msgstr ""

#: ./lib/app/settings/map/page.dart:61
msgid "初始圖層"
msgstr ""

#: ./lib/app/settings/map/page.dart:62
msgid "調整地圖的底圖以及初始顯示的圖層"
msgstr ""

#: ./lib/app/settings/map/page.dart:74
msgid "自動縮放"
msgstr ""

#: ./lib/app/settings/map/page.dart:75
msgid "接收到檢知時自動縮放地圖"
msgstr ""

#: ./lib/app/settings/map/page.dart:101
msgid "動畫幀率"
msgstr ""

#: ./lib/app/settings/map/page.dart:102
msgid "調整強震監視器震波模擬動畫的流暢度"
msgstr ""

#: ./lib/app/settings/map/page.dart:136
msgid "過高的動畫幀率可能會造成卡頓或裝置發熱"
msgstr ""

#: ./lib/app/settings/theme/page.dart:46
msgid "主題模式"
msgstr ""

#: ./lib/app/settings/theme/mode/page.dart:63
msgid "淺色"
msgstr ""

#: ./lib/app/settings/theme/mode/page.dart:64
msgid "深色"
msgstr ""

#: ./lib/app/settings/theme/mode/page.dart:59
msgid "跟隨系統主題"
msgstr ""

#: ./lib/app/settings/theme/color/page.dart:22
msgid "主題色彩"
msgstr ""

#: ./lib/app/settings/theme/color/page.dart:43
msgid "使用系統配色"
msgstr ""

#: ./lib/app/settings/theme/color/page.dart:62
msgid "自訂"
msgstr ""

#: ./lib/app/settings/theme/color/page.dart:72
msgid "自訂色彩"
msgstr ""

#: ./lib/app/home/_widgets/thunderstorm_card.dart:84
msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 <bold>{time}</bold> 。"
msgstr ""

#: ./lib/app/home/_widgets/forecast_card.dart:59
msgid "天氣預報(24h)"
msgstr ""

#: ./lib/app/home/_widgets/location_out_of_service.dart:28
msgid "服務區域外,僅在臺灣各地可用"
msgstr ""

#: ./lib/app/map/_lib/managers/radar.dart:587
msgid "雷達回波"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:497
msgid "無資料"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:372
msgid "{wind}級 {Desc}"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:389
msgid "陣風 {speed} m/s"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:471
msgid "無法測量"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:492
msgid "指北針不可靠"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:494
msgid "指北針準確度下降"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:495
msgid "指北針正常"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:502
msgid "方向精確度"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:521
msgid "正常範圍:±0-15°"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:538
msgid "附近有強磁場干擾,指北針方向可能完全不準確。請遠離磁鐵、電子裝置或金屬物品。"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:539
msgid "附近可能有磁場干擾,指北針方向可能有偏差。"
msgstr ""

#: ./lib/route/image_viewer/image_viewer.dart:145
msgid "確定"
msgstr ""

#: ./lib/app/home/_widgets/location_button.dart:29
msgid "尚未設定"
msgstr ""

#: ./lib/app/home/_widgets/location_button.dart:138
msgid "切換區域"
msgstr ""

#: ./lib/app/home/_widgets/location_button.dart:144
msgid "位置設定"
msgstr ""

#: ./lib/app/home/_widgets/location_button.dart:195
msgid "快速切換"
msgstr ""

#: ./lib/app/home/_widgets/location_button.dart:240
msgid "選擇縣市"
msgstr ""

#: ./lib/app/home/_widgets/location_button.dart:250
msgid "目前選擇"
msgstr ""

#: ./lib/app/home/page.dart:888
msgid "濕度"
msgstr ""

#: ./lib/app/home/page.dart:916
msgid "風速"
msgstr ""

#: ./lib/app/home/_widgets/weather_header.dart:181
msgid "風向"
msgstr ""

#: ./lib/app/home/_widgets/weather_header.dart:190
msgid "風級"
msgstr ""

#: ./lib/app/home/page.dart:895
msgid "氣壓"
msgstr ""

#: ./lib/app/home/page.dart:902
msgid "降雨"
msgstr ""

#: ./lib/app/home/page.dart:909
msgid "能見度"
msgstr ""

#: ./lib/app/home/page.dart:923
msgid "陣風"
msgstr ""

#: ./lib/app/home/_widgets/weather_header.dart:233
msgid "陣風級"
msgstr ""

#: ./lib/app/home/_widgets/weather_header.dart:241
msgid "日照"
msgstr ""

#: ./lib/app/home/_widgets/hero_weather.dart:142
msgid "體感 {feelsLike}°"
msgstr ""

#: ./lib/app/home/_widgets/hero_weather.dart:185
msgid "無天氣資料"
msgstr ""

#: ./lib/app/home/_widgets/mode_toggle_button.dart:14
msgid "全國 · 生效中"
msgstr ""

#: ./lib/app/home/_widgets/mode_toggle_button.dart:16
msgid "全國 · 歷史"
msgstr ""

#: ./lib/app/home/_widgets/mode_toggle_button.dart:18
msgid "所在地 · 生效中"
msgstr ""

#: ./lib/app/home/_widgets/mode_toggle_button.dart:20
msgid "所在地 · 歷史"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:1258
msgid "EEW"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:1397
msgid "第 {serial} 報"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:1415
msgid ""
"{time} 左右,<bold>{location}</bold>附近發生有感地震,預估規模 "
"<bold>M{magnitude}</bold>、所在地最大震度<bold>{intensity}</bold>。"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:1423
msgid ""
"{time} 左右,<bold>{location}</bold>附近發生有感地震,預估規模 "
"<bold>M{magnitude}</bold>、深度<bold>{depth}</bold>公里。"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:1469
msgid "所在地預估"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:1505
msgid "震波"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:1527
msgid " 秒"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:1544
msgid "抵達"
msgstr ""

#: ./lib/app/home/page.dart:195
msgid "已更新至 {version}"
msgstr ""

#: ./lib/utils/weather_icon.dart:284
msgid "取得天氣異常"
msgstr ""

#: ./lib/app/home/page.dart:366
msgid "取得歷史資訊異常"
msgstr ""

#: ./lib/app/home/page.dart:777
msgid "上午"
msgstr ""

#: ./lib/app/home/page.dart:777
msgid "下午"
msgstr ""

#: ./lib/app/changelog/page.dart:76
msgid "發生錯誤"
msgstr ""

#: ./lib/route/image_viewer/image_viewer.dart:85
msgid "再試一次"
msgstr ""

#: ./lib/app/changelog/page.dart:203
msgid "目前版本"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:403
msgid "下一步"
msgstr ""

#: ./lib/app/welcome/1-about/page.dart:68
msgid "防災資訊平台"
msgstr ""

#: ./lib/app/welcome/2-exptech/page.dart:93
msgid "我們是誰?"
msgstr ""

#: ./lib/app/welcome/2-exptech/page.dart:100
msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。"
msgstr ""

#: ./lib/app/welcome/2-exptech/page.dart:106
msgid "我們的初衷"
msgstr ""

#: ./lib/app/welcome/2-exptech/page.dart:113
msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。"
msgstr ""

#: ./lib/app/welcome/3-notice/page.dart:45
msgid "注意事項"
msgstr ""

#: ./lib/app/welcome/3-notice/page.dart:65
msgid "任何資訊應以中央氣象署發布之內容為準。"
msgstr ""

#: ./lib/app/welcome/3-notice/page.dart:82
msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。"
msgstr ""

#: ./lib/app/welcome/3-notice/page.dart:97
msgid "強烈搖晃有機率比通知早抵達使用者所在地。"
msgstr ""

#: ./lib/app/welcome/3-notice/page.dart:111
msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。"
msgstr ""

#: ./lib/app/welcome/3-notice/page.dart:125
msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。"
msgstr ""

#: ./lib/app/welcome/1-about/page.dart:46
msgid "歡迎使用 DPIP"
msgstr ""

#: ./lib/app/welcome/1-about/page.dart:91
msgid ""
"DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) "
"之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:167
msgid "在重大災害發生時以通知來傳遞即時防災資訊"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:175
msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:181
msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。"
msgstr ""

#: ./lib/route/image_viewer/image_viewer.dart:255
msgid "儲存"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:188
msgid "用於儲存中央氣象署或 ExpTech 提供之資料視覺化圖片"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:352
msgid "權限請求"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:353
msgid "需要使用者手動到設定開啟相關權限。"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:376
msgid "需要背景位置權限"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:378
msgid ""
"為了在背景持續提供即時防災資訊,DPIP 需要「永遠允許」位置權限。\n"
"\n"
"接下來系統會引導您到設定頁面,請選擇「永遠允許」選項。"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:384
msgid "稍後"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:388
msgid "前往設定"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:426
msgid "權限"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:439
msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。"
msgstr ""

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:84
msgid "地圖圖層"
msgstr ""

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:85
msgid "選擇要顯示的地圖圖層"
msgstr ""

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:91
msgid "底圖"
msgstr ""

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:97
msgid "簡單"
msgstr ""

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:119
msgid "監視器"
msgstr ""

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:124
msgid "報告"
msgstr ""

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:135
msgid "氣象"
msgstr ""

#: ./lib/app/map/_lib/managers/temperature.dart:453
msgid "氣溫"
msgstr ""

#: ./lib/app/map/_lib/managers/precipitation.dart:577
msgid "降水"
msgstr ""

#: ./lib/app/map/_lib/managers/wind.dart:320
msgid "風向/風速"
msgstr ""

#: ./lib/app/map/_lib/managers/lightning.dart:294
msgid "閃電"
msgstr ""

#: ./lib/app/map/_widgets/map_legend.dart:202
msgid "單位:{unit}"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:485
msgid "近期無海嘯資訊"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:486
msgid "海嘯警報"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:496
msgid "{id}號 第{serial}報"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:551
msgid "發布"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:553
msgid "更新"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:554
msgid "解除"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:607
msgid "預估海嘯到達時間及波高"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:626
msgid "各地觀測到的海嘯"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:641
msgid "地震資訊"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:654
msgid "發生時間"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:1072
msgid "位於"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:736
msgid "規模"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:765
msgid "深度"
msgstr ""

#: ./lib/app/map/_lib/managers/radar.dart:744
msgid "長按設定播放起點"
msgstr ""

#: ./lib/app/map/_lib/managers/radar.dart:760
msgid "目前時間"
msgstr ""

#: ./lib/app/map/_lib/managers/radar.dart:765
msgid "播放起點"
msgstr ""

#: ./lib/app/map/_lib/managers/radar.dart:1099
msgid "播放進度"
msgstr ""

#: ./lib/app/map/_lib/managers/lightning.dart:393
msgid "5 分鐘內對地閃電"
msgstr ""

#: ./lib/app/map/_lib/managers/lightning.dart:401
msgid "10 分鐘內對地閃電"
msgstr ""

#: ./lib/app/map/_lib/managers/lightning.dart:409
msgid "30 分鐘內對地閃電"
msgstr ""

#: ./lib/app/map/_lib/managers/lightning.dart:417
msgid "60 分鐘內對地閃電"
msgstr ""

#: ./lib/app/map/_lib/managers/lightning.dart:425
msgid "5 分鐘內雲間閃電"
msgstr ""

#: ./lib/app/map/_lib/managers/lightning.dart:433
msgid "10 分鐘內雲間閃電"
msgstr ""

#: ./lib/app/map/_lib/managers/lightning.dart:441
msgid "30 分鐘內雲間閃電"
msgstr ""

#: ./lib/app/map/_lib/managers/lightning.dart:449
msgid "60 分鐘內雲間閃電"
msgstr ""

#: ./lib/app/map/_lib/managers/precipitation.dart:396
msgid "今日"
msgstr ""

#: ./lib/app/map/_lib/managers/precipitation.dart:397
msgid "10 分鐘"
msgstr ""

#: ./lib/app/map/_lib/managers/precipitation.dart:398
msgid "1 小時"
msgstr ""

#: ./lib/app/map/_lib/managers/precipitation.dart:399
msgid "3 小時"
msgstr ""

#: ./lib/app/map/_lib/managers/precipitation.dart:400
msgid "6 小時"
msgstr ""

#: ./lib/app/map/_lib/managers/precipitation.dart:401
msgid "12 小時"
msgstr ""

#: ./lib/app/map/_lib/managers/precipitation.dart:402
msgid "24 小時"
msgstr ""

#: ./lib/app/map/_lib/managers/precipitation.dart:403
msgid "2 天"
msgstr ""

#: ./lib/app/map/_lib/managers/precipitation.dart:404
msgid "3 天"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:474
msgid "海外測站"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:494
msgid "即時震度:"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:517
msgid "地動加速度:"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:541
msgid "地動速度:"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:1331
msgid "規模 <bold>M{magnitude}</bold>,所在地預估<bold>{intensity}</bold>"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:1349
msgid "{countdown}秒後抵達"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:1352
msgid "已抵達"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:1364
msgid "規模 <bold>M{magnitude}</bold>,深度<bold>{depth}</bold>公里"
msgstr ""

#: ./lib/app/map/_lib/managers/monitor.dart:1591
msgid "目前沒有生效中的地震速報"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:516
msgid "CWA 正在製圖中"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:639
msgid "近期的地震報告"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:647
msgid "更多"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:995
msgid "編號 {number} 顯著有感地震"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:998
msgid "小區域有感地震"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:1083
msgid "地震規模"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:1110
msgid "震源深度"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:886
msgid "沒有更多資料"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:1030
msgid "報告頁面"
msgstr ""

#: ./lib/route/report/report_sheet_content.dart:90
msgid "重播"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:1064
msgid "發震時間"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:1132
msgid "各地震度"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:1212
msgid "地震報告圖"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:1228
msgid "震度圖"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:1248
msgid "最大地動加速度圖"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:1268
msgid "最大地動速度圖"
msgstr ""

#: ./lib/route/announcement/announcement.dart:10
msgid "錯誤"
msgstr ""

#: ./lib/route/announcement/announcement.dart:11
msgid "已解決"
msgstr ""

#: ./lib/route/announcement/announcement.dart:12
msgid "影響:小"
msgstr ""

#: ./lib/route/announcement/announcement.dart:13
msgid "影響:中"
msgstr ""

#: ./lib/route/announcement/announcement.dart:14
msgid "影響:大"
msgstr ""

#: ./lib/route/announcement/announcement.dart:16
msgid "維修"
msgstr ""

#: ./lib/route/announcement/announcement.dart:17
msgid "測試"
msgstr ""

#: ./lib/route/announcement/announcement.dart:18
msgid "變更"
msgstr ""

#: ./lib/route/announcement/announcement.dart:19
msgid "完成"
msgstr ""

#: ./lib/route/announcement/announcement.dart:20
msgid "地震相關"
msgstr ""

#: ./lib/route/announcement/announcement.dart:21
msgid "氣象相關"
msgstr ""

#: ./lib/route/announcement/announcement.dart:27
msgid "未知"
msgstr ""

#: ./lib/route/announcement/announcement.dart:105
msgid "目前沒有公告"
msgstr ""

#: ./lib/route/announcement/announcement.dart:246
msgid "公告詳情"
msgstr ""

#: ./lib/route/image_viewer/image_viewer.dart:73
msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。"
msgstr ""

#: ./lib/route/image_viewer/image_viewer.dart:123
msgid "已儲存圖片"
msgstr ""

#: ./lib/route/image_viewer/image_viewer.dart:141
msgid "儲存圖片時發生錯誤"
msgstr ""

#: ./lib/utils/extensions/number.dart:26
msgid "0級"
msgstr ""

#: ./lib/utils/extensions/number.dart:27
msgid "1級"
msgstr ""

#: ./lib/utils/extensions/number.dart:28
msgid "2級"
msgstr ""

#: ./lib/utils/extensions/number.dart:29
msgid "3級"
msgstr ""

#: ./lib/utils/extensions/number.dart:30
msgid "4級"
msgstr ""

#: ./lib/utils/extensions/number.dart:31
msgid "5弱"
msgstr ""

#: ./lib/utils/extensions/number.dart:32
msgid "5強"
msgstr ""

#: ./lib/utils/extensions/number.dart:33
msgid "6弱"
msgstr ""

#: ./lib/utils/extensions/number.dart:34
msgid "6強"
msgstr ""

#: ./lib/utils/extensions/number.dart:35
msgid "7級"
msgstr ""

#: ./lib/utils/weather_icon.dart:285
msgid "晴"
msgstr ""

#: ./lib/utils/weather_icon.dart:286
msgid "晴有霾"
msgstr ""

#: ./lib/utils/weather_icon.dart:287
msgid "晴有靄"
msgstr ""

#: ./lib/utils/weather_icon.dart:288
msgid "晴有閃電"
msgstr ""

#: ./lib/utils/weather_icon.dart:304
msgid "晴天伴有雷"
msgstr ""

#: ./lib/utils/weather_icon.dart:290
msgid "晴有霧"
msgstr ""

#: ./lib/utils/weather_icon.dart:291
msgid "晴有雨"
msgstr ""

#: ./lib/utils/weather_icon.dart:292
msgid "晴有雨雪"
msgstr ""

#: ./lib/utils/weather_icon.dart:293
msgid "晴有大雪"
msgstr ""

#: ./lib/utils/weather_icon.dart:294
msgid "晴有雪珠"
msgstr ""

#: ./lib/utils/weather_icon.dart:295
msgid "晴有冰珠"
msgstr ""

#: ./lib/utils/weather_icon.dart:296
msgid "晴有陣雪"
msgstr ""

#: ./lib/utils/weather_icon.dart:297
msgid "晴陣雨雪"
msgstr ""

#: ./lib/utils/weather_icon.dart:298
msgid "晴有雹"
msgstr ""

#: ./lib/utils/weather_icon.dart:299
msgid "晴有雷雨"
msgstr ""

#: ./lib/utils/weather_icon.dart:300
msgid "晴有雷雪"
msgstr ""

#: ./lib/utils/weather_icon.dart:301
msgid "晴有雷雹"
msgstr ""

#: ./lib/utils/weather_icon.dart:302
msgid "晴大雷雨"
msgstr ""

#: ./lib/utils/weather_icon.dart:303
msgid "晴大雷雹"
msgstr ""

#: ./lib/utils/weather_icon.dart:305
msgid "多雲"
msgstr ""

#: ./lib/utils/weather_icon.dart:306
msgid "多雲有霾"
msgstr ""

#: ./lib/utils/weather_icon.dart:307
msgid "多雲有靄"
msgstr ""

#: ./lib/utils/weather_icon.dart:308
msgid "多雲有閃電"
msgstr ""

#: ./lib/utils/weather_icon.dart:324
msgid "多雲伴有雷"
msgstr ""

#: ./lib/utils/weather_icon.dart:310
msgid "多雲有霧"
msgstr ""

#: ./lib/utils/weather_icon.dart:311
msgid "多雲有雨"
msgstr ""

#: ./lib/utils/weather_icon.dart:312
msgid "多雲有雨雪"
msgstr ""

#: ./lib/utils/weather_icon.dart:313
msgid "多雲有大雪"
msgstr ""

#: ./lib/utils/weather_icon.dart:314
msgid "多雲有雪珠"
msgstr ""

#: ./lib/utils/weather_icon.dart:315
msgid "多雲有冰珠"
msgstr ""

#: ./lib/utils/weather_icon.dart:316
msgid "多雲有陣雪"
msgstr ""

#: ./lib/utils/weather_icon.dart:317
msgid "多雲陣雨雪"
msgstr ""

#: ./lib/utils/weather_icon.dart:318
msgid "多雲有雹"
msgstr ""

#: ./lib/utils/weather_icon.dart:319
msgid "多雲有雷雨"
msgstr ""

#: ./lib/utils/weather_icon.dart:320
msgid "多雲有雷雪"
msgstr ""

#: ./lib/utils/weather_icon.dart:321
msgid "多雲有雷雹"
msgstr ""

#: ./lib/utils/weather_icon.dart:322
msgid "多雲大雷雨"
msgstr ""

#: ./lib/utils/weather_icon.dart:323
msgid "多雲大雷雹"
msgstr ""

#: ./lib/utils/weather_icon.dart:325
msgid "陰"
msgstr ""

#: ./lib/utils/weather_icon.dart:326
msgid "陰有霾"
msgstr ""

#: ./lib/utils/weather_icon.dart:327
msgid "陰有靄"
msgstr ""

#: ./lib/utils/weather_icon.dart:328
msgid "陰有閃電"
msgstr ""

#: ./lib/utils/weather_icon.dart:344
msgid "陰天伴有雷"
msgstr ""

#: ./lib/utils/weather_icon.dart:330
msgid "陰有霧"
msgstr ""

#: ./lib/utils/weather_icon.dart:331
msgid "陰有雨"
msgstr ""

#: ./lib/utils/weather_icon.dart:332
msgid "陰有雨雪"
msgstr ""

#: ./lib/utils/weather_icon.dart:333
msgid "陰有大雪"
msgstr ""

#: ./lib/utils/weather_icon.dart:334
msgid "陰有雪珠"
msgstr ""

#: ./lib/utils/weather_icon.dart:335
msgid "陰有冰珠"
msgstr ""

#: ./lib/utils/weather_icon.dart:336
msgid "陰有陣雪"
msgstr ""

#: ./lib/utils/weather_icon.dart:337
msgid "陰陣雨雪"
msgstr ""

#: ./lib/utils/weather_icon.dart:338
msgid "陰有雹"
msgstr ""

#: ./lib/utils/weather_icon.dart:339
msgid "陰有雷雨"
msgstr ""

#: ./lib/utils/weather_icon.dart:340
msgid "陰有雷雪"
msgstr ""

#: ./lib/utils/weather_icon.dart:341
msgid "陰有雷雹"
msgstr ""

#: ./lib/utils/weather_icon.dart:342
msgid "陰大雷雨"
msgstr ""

#: ./lib/utils/weather_icon.dart:343
msgid "陰大雷雹"
msgstr ""

#: ./lib/api/model/location/location.dart:85
msgid "{city}{cityLevel} {town}{townLevel}"
msgstr ""

#: ./lib/api/model/location/location.dart:98
msgid "{city} {town}"
msgstr ""

#: ./lib/api/model/location/location.dart:113
msgid "{city}{cityLevel}"
msgstr ""

#: ./lib/api/model/location/location.dart:130
msgid "{town}{townLevel}"
msgstr ""

#: ./lib/widgets/ui/color_picker.dart:363
msgid "色相"
msgstr ""

#: ./lib/widgets/ui/color_picker.dart:379
msgid "彩度"
msgstr ""

#: ./lib/widgets/ui/color_picker.dart:395
msgid "明度"
msgstr ""

#: ./lib/widgets/ui/color_picker.dart:415
msgid "十六進位值"
msgstr ""

================================================
FILE: .crowdin/weather_station_names.csv
================================================
key,zh-Hant,en,ja,ko,ru,vi,zh-Hans
466850,五分山雷達站,Wufenshan,,,,,
466881,新北,New Taipei,,,,,
466900,淡水,Tamsui,,,,,
466910,鞍部,Anbu,,,,,
466920,臺北,Taipei,,,,,
466930,竹子湖,Zhuzihu,,,,,
466940,基隆,Keelung,,,,,
466950,彭佳嶼,Pengjiayu,,,,,
466990,花蓮,Hualien,,,,,
467050,新屋,Xinwu,,,,,
467080,宜蘭,Yilan,,,,,
467110,金門,Kinmen,,,,,
467270,田中,Tianzhong,,,,,
467280,後龍,Houlong,,,,,
467290,古坑,Gukeng,,,,,
467300,東吉島,Dongjidao,,,,,
467350,澎湖,Penghu,,,,,
467410,臺南,Tainan,,,,,
467420,永康,Yongkang,,,,,
467441,高雄,Kaohsiung,,,,,
467480,嘉義,Chiayi,,,,,
467490,臺中,Taichung,,,,,
467530,阿里山,Alishan,,,,,
467540,大武,Dawu,,,,,
467550,玉山,Yushan,,,,,
467571,新竹,Hsinchu,,,,,
467590,恆春,Hengchun,,,,,
467610,成功,Chenggong,,,,,
467620,蘭嶼,Lanyu,,,,,
467650,日月潭,Sun Moon Lake,,,,,
467660,臺東,Taitung,,,,,
467790,墾丁雷達站,Kenting,,,,,
467990,馬祖,Matsu,,,,,
12J990,口湖工作站,Kouhu Branch Station,,,,,
12Q970,東港工作站,Donggang Branch,,,,,
12Q980,恆春工作站,Hengchun Branch,,,,,
42HA10,萬大發電廠,Wanta Hydro,,,,,
72AI40,桃改樹林分場,Shulin Sub-station Of Taoyuan ARES,,,,,
72C440,桃園農改場,,,,,,
72D080,桃改五峰分場,Wufeng Sub-station Of Taoyuan ARES,,,,,
72D680,桃改新埔分場,Sinpu Sub-station Of Taoyuan ARES,,,,,
72G600,臺中農改場,Ta Tsun,,,,,
72HA00,中改埔里分場,Puli Sub-station Of Taichung ARES,,,,,
72K220,南改斗南分場,Dounan Sub-station Of Tainan ARES,,,,,
72M360,南改義竹分場,Yichu Sub-station Of Tainan ARES,,,,,
72M700,南改鹿草分場,Lucao Sub-station Of Tainan ARES,,,,,
72N100,臺南農改場,Tainan,,,,,
72N240,七股研究中心,Qigu Research Center,,,,,
72Q010,高雄農改場,Pingtung,,,,,
72S200,東改班鳩分場,Banjuou Sub-station Of Taitung ARES ,,,,,
72S590,東改賓朗果園,Binlung Orchard Sub-station Of Taitung ARES ,,,,,
72T250,花蓮農改場,Gi An,,,,,
72U480,花改蘭陽分場,Lanyang Sub-station Of Hualien ARES,,,,,
72V140,高改旗南分場,Chinan Sub-station Of Kaohsiung ARES,,,,,
82A750,茶改北部分場,North Branch Of TBRS,,,,,
82C160,茶改場,Tea And Beverage Research Station,,,,,
82H320,茶改中部分場,Middle Branch Of TRES,,,,,
82H840,茶改南部分場,South Branch Of TBRS,,,,,
82S580,茶改東部分場,East Branch Of TBRS,,,,,
A2C560,農工中心,,,,,,
A2K360,水試臺西試驗場,Taixi Experimental Fishing Ground,,,,,
A2K630,臺大雲林校區,Yunlin Branch Of NTU,,,,,
A2N290,臺南蘭花園區,Taiwan Orchid,,,,,
B2E890,畜試北區分所,North Branch Of TLRI,,,,,
B2N890,畜產試驗所,Hsin Hua,,,,,
B2Q810,畜試南區分所,South Branch Of TLRI,,,,,
B2U990,畜試東區分所,East Branch Of TLRI,,,,,
C2A540,四堵,Sihdu,,,,,
C2A560,福山,Fushan,,,,,
C2A650,火燒寮,Huoshaoliao,,,,,
C2A660,瑞芳,Rueifang,,,,,
C2A880,福隆,Fulong,,,,,
C2A920,富貴角,Fugueijiao,,,,,
C2C410,中央大學,Ncu,,,,,
C2D720,關西工作站,Guanxi Experiment Station,,,,,
C2D730,寶山農場,Baoshan Farm,,,,,
C2D740,屯原,Tunyuan,,,,,
C2E520,大湖,Dahu,,,,,
C2E540,龍溪,Longxi,,,,,
C2E880,三義,Sanyi,,,,,
C2E970,八甲,Bajia,,,,,
C2F000,大肚,Dadu,,,,,
C2F860,梨山,Lishan,,,,,
C2F930,大甲,Dajia,,,,,
C2F990,摩天嶺,Motianling,,,,,
C2F9A0,中竹林,Zhongzhulin,,,,,
C2FA00,烏石坑,Wushihkeng,,,,,
C2FB50,出雲,Chuyun,,,,,
C2FB60,頭櫃山,Touguishan,,,,,
C2G640,鹿港,Lukang,,,,,
C2G840,北斗,Beidou,,,,,
C2G870,芳苑,Fangyuan,,,,,
C2G980,田頭村,Toutian Village,,,,,
C2G9A0,畜試所彰化,Changhua Branch Of TLRI,,,,,
C2H950,中寮,Zhongliao,,,,,
C2H9D0,三隻寮,Sanziliao,,,,,
C2H9E0,國姓南港,Guoxing Nangang,,,,,
C2H9F0,柑林,Ganlin,,,,,
C2H9G0,百勝,Bosheng,,,,,
C2H9H0,苗改南投蜂場,Nantou Bee Farm Of Miaoli TARI,,,,,
C2H9J0,中台,Zhongtai,,,,,
C2H9L0,馬烈霸,Malieba,,,,,
C2H9M0,發祥,Faxiang,,,,,
C2H9N0,仁愛東眼,Renaidong,,,,,
C2H9P0,伊拿谷,Yinagu,,,,,
C2H9Q0,北東眼山,Beidongyanshan,,,,,
C2H9R0,卓社,Zhuoshe,,,,,
C2H9S0,龍南,Longnan,,,,,
C2H9T0,名間竹圍,Mingjianzhuwei,,,,,
C2H9U0,鳳鵬,Fengpeng,,,,,
C2H9W0,大坪頂農水,Dapingding Station,,,,,
C2I090,鳳凰,Fenghuang,,,,,
C2K240,草嶺,Caoling,,,,,
C2K610,草嶺石壁,Caolingshibi,,,,,
C2K620,馬光農場,Maguang Organic Agriculture Circular Park,,,,,
C2K630,荷苞,Hebao,,,,,
C2M410,馬頭山,Matoushan,,,,,
C2M620,瑞里,Ruili,,,,,
C2M910,嘉義大學,Chiayi University,,,,,
C2M920,朴子農改,Pozi DARES,,,,,
C2M930,石卓,Shizhuo,,,,,
C2M940,日野賀,Riyehe,,,,,
C2M950,太和,Taihe,,,,,
C2M960,外寮,Wailiao,,,,,
C2M970,碧湖,Bihu,,,,,
C2N160,西拉雅風管處,Siraya NSAH,,,,,
C2O810,曾文,Cengwen,,,,,
C2O930,玉井,Yujing,,,,,
C2O950,安南,Annan,,,,,
C2R170,屏東,Pingdong,,,,,
C2R970,屏科大,National Pingtung University,,,,,
C2V250,甲仙,Jiaxian,,,,,
C2V260,月眉,Yuemei,,,,,
C2V310,美濃,Meinong,,,,,
C2W030,金門農試所,Kimmann,,,,,
C2W230,畜試所澎湖,Penghu Field Area Of TLRI,,,,,
CAG100,王功漁港,Wanggong Fishing Port,,,,,
CAH030,茶改場竹圍站,TRES Chuwei Station,,,,,
CAJ050,海口故事園區,Haikou Story Camping Park,,,,,
CAL110,布袋國中,Budai Junior High School,,,,,
CAN130,水試所海水繁養殖中心,Mariculture Research Center,,,,,
CAN140,六官養殖協會,Liuguan Aquaculture,,,,,
CAQ030,崎峰國小,Cifong Elementary School,,,,,
E2H360,蓮華池,Lienhuchih,,,,,
E2HA20,林試畢祿溪站,Pilushi,,,,,
E2K600,四湖植物園,Sihu Botanical Garden,,,,,
E2P980,林試六龜中心,Lioukuei Research Center ,,,,,
E2P990,林試扇平站,Shanping,,,,,
E2S960,林試太麻里2,Taimalee2,,,,,
E2S980,林試太麻里1,Taimalee Research Center 1,,,,,
G2AI50,關渡,Guandu,,,,,
G2F820,農試所(霧峰),Taichung,,,,,
G2L020,農試嘉義分所,Chiayi Sub-station Of TARI,,,,,
G2M350,農試溪口農場,Xikou Farm Of TARI,,,,,
G2P820,農試鳳山分所,Fengshan Tropical Horticultural Of TARI,,,,,
K2E360,苗栗農改場,,,,,,
K2E710,苗改生物防治研究中心,Biological Control Branch Of Miaoli TARI,,,,,
K2F750,種苗改良場,Shin She,,,,,
U2H480,溪頭,Hsi Tou,,,,,
U2HA30,臺大和社,NTU Exfohoshe,,,,,
U2HA40,臺大內茅埔,NTU Exfoneimoupu,,,,,
U2HA50,臺大竹山,NTU Experimental Forest,,,,,
V2C250,八德合作社,Bade Cooperative,,,,,
V2C260,八德蔬果,Bade Fruit And Vegetable,,,,,
V2K610,大庄合作社,Dazhuang Cooperative,,,,,
V2K620,麥寮合作社,Mailiao Cooperative,,,,,
C0A520,山佳,Shanjia,,,,,
C0A530,坪林,Pinglin,,,,,
C0A550,泰平,Taiping,,,,,
C0A570,桶後,Tonghou,,,,,
C0A640,石碇,Shihding,,,,,
C0A770,科教館,Science Education Center ,,,,,
C0A860,大坪,Daping,,,,,
C0A870,五指山,Wujhihshan,,,,,
C0A890,雙溪,Shuangsi,,,,,
C0A931,三和,Sanhe,,,,,
C0A940,金山,Jinshan,,,,,
C0A950,鼻頭角,Bitoujiao,,,,,
C0A970,三貂角,Sandiaojiao,,,,,
C0A980,社子,Shezih,,,,,
C0A9C0,天母,Tianmu,,,,,
C0A9F0,內湖,Neihu,,,,,
C0AC40,大屯山,Datunshan,,,,,
C0AC60,三峽,Sanshia,,,,,
C0AC70,信義,Xinyi,,,,,
C0AC80,文山,Wenshan,,,,,
C0ACA0,新莊,Xinzhuang,,,,,
C0AD10,八里,Bali,,,,,
C0AD30,蘆洲,Lujhou,,,,,
C0AD40,土城,Tucheng,,,,,
C0AD50,鶯歌,Yingge,,,,,
C0AG80,中和,Zhonghe,,,,,
C0AH00,汐止,Xizhi,,,,,
C0AH10,永和,Yonghe,,,,,
C0AH30,五分山,Wufengshan,,,,,
C0AH40,平等,Pingdeng,,,,,
C0AH50,林口,Linkou,,,,,
C0AH70,松山,Songshan,,,,,
C0AH80,深坑,Shenkeng,,,,,
C0AH90,福山植物園,Fushan Botanical Garden,,,,,
C0AI00,五股,Wugu,,,,,
C0AI10,屈尺,Quchi,,,,,
C0AI20,白沙灣,Baishawan,,,,,
C0AI30,三重,Sanchong,,,,,
C0AI40,石牌,Shipai,,,,,
C0AJ20,野柳,Yehliou,,,,,
C0AJ30,淡水觀海,Danshuei Guanhai,,,,,
C0AJ40,石門,Shimen,,,,,
C0AJ50,水湳洞,Shuinandong,,,,,
C0AJ60,六塊厝,Lioukuaitsuo,,,,,
C0AJ70,田寮,Tianliao,,,,,
C0AJ80,板橋,Banchiao,,,,,
C0AJ90,澳底,Aodi,,,,,
C0AK10,太平里,Taiping Vil.,,,,,
C0AK30,硬漢嶺,Yinghanling,,,,,
C0B010,七堵,Qidu,,,,,
C0B020,基隆嶼,Keelung Islet,,,,,
C0B040,大武崙,Dawulun,,,,,
C0B050,八斗子,Badouzi,,,,,
C0B060,暖暖,Nuannuan,,,,,
C0C460,復興,Fuxing,,,,,
C0C480,桃園,Taoyuan,,,,,
C0C490,八德,Bade,,,,,
C0C590,觀音,Guanyin,,,,,
C0C620,蘆竹,Luzhu,,,,,
C0C630,大溪,Dasi,,,,,
C0C650,平鎮,Pingjhen,,,,,
C0C660,楊梅,Yangmei,,,,,
C0C670,龍潭,Longtan,,,,,
C0C680,龜山,Guishan,,,,,
C0C700,中壢,Zhongli,,,,,
C0C710,大溪永福,Yongfu Daxi,,,,,
C0C720,竹圍,Jhuwei,,,,,
C0C730,中大臨海站,Jhongda Coastal Station,,,,,
C0C740,觀音工業區,Guanyin Industrial Area,,,,,
C0C750,新興坑尾,Sinsingkengwei,,,,,
C0C790,東眼山,Dongyanshan,,,,,
C0C800,四稜,Sileng,,,,,
C0D360,梅花,Meihua,,,,,
C0D430,峨眉,Emei,,,,,
C0D480,打鐵坑,Datiekeng,,,,,
C0D540,橫山,Hengshan,,,,,
C0D550,雪霸,Xueba,,,,,
C0D560,竹東,Zhudong,,,,,
C0D580,寶山,Baoshan,,,,,
C0D590,新豐,Sinfong,,,,,
C0D650,湖口,Hukou,,,,,
C0D660,新竹市東區,Dongqu Hsinshu City,,,,,
C0D670,海天一線,Haitianyisian,,,,,
C0D680,香山濕地,Siangshan Wetland,,,,,
C0D690,外湖,Waihu,,,,,
C0D700,關西,Guanxi,,,,,
C0D750,樂山林道6k,Leshan 6k,,,,,
C0D760,大坪苗圃,Daping Nurserygarden,,,,,
C0E420,竹南,Jhunan,,,,,
C0E430,南庄,Nanzhuang,,,,,
C0E550,明德,Mingde,,,,,
C0E570,白沙屯,Baishatun,,,,,
C0E590,通霄,Tongxiao,,,,,
C0E610,馬都安,Madu-An,,,,,
C0E730,頭份,Toufen,,,,,
C0E740,造橋,Zaoqiao,,,,,
C0E750,苗栗,Miaoli,,,,,
C0E780,銅鑼,Tongluo,,,,,
C0E791,卓蘭,Zhuolan,,,,,
C0E810,西湖,Xihu,,,,,
C0E820,獅潭,Shitan,,,,,
C0E830,苑裡,Yuanli,,,,,
C0E850,大河,Dahe,,,,,
C0E870,高鐵苗栗,THSR Miaoli,,,,,
C0E910,海埔,Haipu,,,,,
C0E920,通霄漁港,Tongsiao Fishing Harbor,,,,,
C0E930,龍鳳,Longfong,,,,,
C0E940,雪見,Shiuejian,,,,,
C0E950,松安,Songan,,,,,
C0E960,觀霧分站,Guanwu,,,,,
C0F0A0,雪山圈谷,Xueshanjuangu,,,,,
C0F0B0,石岡,Shigang,,,,,
C0F0C0,中坑,Zhongkeng,,,,,
C0F0D0,審馬陣,Shenmazhen,,,,,
C0F0E0,南湖圈谷,Nanhuquangu,,,,,
C0F850,東勢,Dongshi,,,,,
C0F970,大坑,Dakeng,,,,,
C0F9I0,神岡,Shengang,,,,,
C0F9K0,大安,Da-An,,,,,
C0F9L0,后里,Houli,,,,,
C0F9M0,豐原,Fengyuan,,,,,
C0F9N0,大里,Dali,,,,,
C0F9O0,潭子,Tanzi,,,,,
C0F9P0,清水,Qingshui,,,,,
C0F9Q0,外埔,Waipu,,,,,
C0F9R0,龍井,Longjing,,,,,
C0F9S0,烏日,Wuri,,,,,
C0F9T0,西屯,Xitun,,,,,
C0F9U0,南屯,Nantun,,,,,
C0F9V0,新社,Xinshe,,,,,
C0F9X0,大雅(中科園區),Daya,,,,,
C0F9Y0,桃山,Taoshan,,,,,
C0F9Z0,雪山東峰,Xueshandongfeng,,,,,
C0FA10,松柏,Songbai,,,,,
C0FA20,溫寮,Wunliao,,,,,
C0FA30,梧棲,Wuqi,,,,,
C0FA40,臺中電廠,Taichung?Power Plant,,,,,
C0FA50,霧峰,Wufeng,,,,,
C0FA60,鞍馬山工作站,Anmashan Office,,,,,
C0FA70,大雪山埡口,Dashiueshan Yakou,,,,,
C0FA80,小雪山天池,Shiaushiueshan Tianchr,,,,,
C0FA90,小雪山林道,Shiaushiueshan,,,,,
C0FB00,大雪山,Dashiueshan,,,,,
C0FB10,出雲山苗圃,Chuyunshan,,,,,
C0FB20,雪山橋,Shiueshanchiau,,,,,
C0FB30,八仙山苗圃,Bashianshan,,,,,
C0FB40,中橫21.6k,Chungheng 21.6k,,,,,
C0FB70,大甲溪埔,"Dajia, Xipu",,,,,
C0G620,芬園,Fenyuan,,,,,
C0G650,員林,Yuanlin,,,,,
C0G660,溪湖,Xihu,,,,,
C0G720,溪州,Xizhou,,,,,
C0G730,二林,Erlin,,,,,
C0G740,大城,Dacheng,,,,,
C0G770,福興,Fuxing,,,,,
C0G780,秀水,Xiushui,,,,,
C0G800,埔鹽,Puyan,,,,,
C0G810,埔心,Puxin,,,,,
C0G820,田尾,Tianwei,,,,,
C0G830,埤頭,Pitou,,,,,
C0G860,社頭,Shetou,,,,,
C0G880,二水,Ershui,,,,,
C0G890,伸港,Shenggang,,,,,
C0G900,線西,Xianxi,,,,,
C0G910,花壇,Huatan,,,,,
C0G920,永靖,Yongjing ,,,,,
C0G940,竹塘,Zhutang,,,,,
C0G950,防潮門,Fangchaomen,,,,,
C0G960,福寶,Fubao,,,,,
C0G970,三豐,Sanfong,,,,,
C0G9B0,和美,Hemei,,,,,
C0H890,埔里,Puli,,,,,
C0H960,草屯,Caotun,,,,,
C0H990,昆陽,Kunyang,,,,,
C0H9A0,神木村,Shenmu Village,,,,,
C0H9C0,合歡山,Hehuan Mountain,,,,,
C0I010,廬山,Lushan,,,,,
C0I080,信義,Xinyi,,,,,
C0I110,竹山,Zhushan,,,,,
C0I360,水里,Shuili,,,,,
C0I370,魚池,Yuchi,,,,,
C0I380,集集,Jiji,,,,,
C0I390,仁愛,Ren'Ai,,,,,
C0I410,名間,Mingjian,,,,,
C0I420,國姓,Guoxing,,,,,
C0I460,南投,Nantou,,,,,
C0I480,梅峰,Meifeng,,,,,
C0I490,萬大林道,Wandalindao,,,,,
C0I520,玉山風口,Yushanfengkou,,,,,
C0I530,小奇萊,Xiaoqilai,,,,,
C0I540,奇萊稜線,Qilailengxian,,,,,
C0K250,崙背,Lunbei,,,,,
C0K280,四湖,Sihu,,,,,
C0K291,宜梧,Yiwu,,,,,
C0K330,虎尾,Huwei,,,,,
C0K390,土庫,Tuku,,,,,
C0K400,斗六,Douliu,,,,,
C0K410,北港,Beigang,,,,,
C0K420,西螺,Xiluo,,,,,
C0K430,褒忠,Baozhong,,,,,
C0K440,二崙,Erlun,,,,,
C0K450,大埤,Dapi,,,,,
C0K460,斗南,Dounan,,,,,
C0K470,林內,Linnei,,,,,
C0K480,莿桐,Citong,,,,,
C0K500,元長,Yuanchang,,,,,
C0K510,水林,Shuilin,,,,,
C0K530,臺西,Taixi,,,,,
C0K550,蔦松,Niaosong,,,,,
C0K560,棋山,Qishan,,,,,
C0K580,高鐵雲林,THSR Yunlin,,,,,
C0K590,雲林東勢,"Dongshi, Yunlin County",,,,,
C0K600,箔子寮,Bozihliao,,,,,
C0M520,東後寮,Donghouliao,,,,,
C0M530,奮起湖,Fenqihu,,,,,
C0M640,中埔,Zhongpu,,,,,
C0M650,朴子,Puzi,,,,,
C0M660,溪口,Xikou,,,,,
C0M670,大林,Dalin,,,,,
C0M680,太保,Taibao,,,,,
C0M690,水上,Shuishang,,,,,
C0M700,竹崎,Zhuqi,,,,,
C0M710,東石,Dongshi,,,,,
C0M720,番路,Fanlu,,,,,
C0M730,嘉義市東區,Dongqu Chiayi City,,,,,
C0M740,六腳,Liujiao,,,,,
C0M750,布袋,Budai,,,,,
C0M760,民雄,Minxiong,,,,,
C0M770,嘉義梅山,Meishan Chiayi County,,,,,
C0M780,鹿草,Lucao,,,,,
C0M790,新港,Xingang,,,,,
C0M800,茶山,Chashan,,,,,
C0M810,里佳,Lijia,,,,,
C0M820,達邦,Dabang,,,,,
C0M850,表湖,Biaohu,,,,,
C0M860,新美,Shinmei,,,,,
C0M880,好美里,Haomeili,,,,,
C0N010,鯤鯓國小,Kunshen Elementary School,,,,,
C0N020,城西,Chengsi,,,,,
C0N030,四草,Sihtsao,,,,,
C0N040,蘆竹溝,Lujhugou,,,,,
C0N050,蚵寮,Eliao,,,,,
C0O830,北寮,Beiliao,,,,,
C0O840,王爺宮,Wangyegong,,,,,
C0O860,大內,Danei,,,,,
C0O900,善化,Shanhua,,,,,
C0O960,崎頂,Qiding,,,,,
C0O970,虎頭埤,Hutoupi,,,,,
C0O980,新市,Xinshi,,,,,
C0O990,媽廟,Mamiao,,,,,
C0R100,尾寮山,Weiliaoshan,,,,,
C0R130,阿禮,Ali,,,,,
C0R140,瑪家,Majia,,,,,
C0R150,三地門,Sandimen,,,,,
C0R160,鹽埔,Yanpuxinwei,,,,,
C0R190,赤山,Chishan,,,,,
C0R220,潮州,Chaojhou,,,,,
C0R240,來義,Laiyi,,,,,
C0R260,春日,Chunri,,,,,
C0R270,琉球嶼,Liouciouyu,,,,,
C0R280,檳榔,Binlang,,,,,
C0R320,車城,Checheng,,,,,
C0R341,牡丹,Mudan,,,,,
C0R350,貓鼻頭,Maobitou,,,,,
C0R440,大漢山,Dahanshan,,,,,
C0R470,高樹,Gaoshu,,,,,
C0R480,長治,Changzhi,,,,,
C0R490,九如,Jiuru,,,,,
C0R520,崁頂,Kanding,,,,,
C0R540,佳冬,Jiadong,,,,,
C0R550,新埤,Xinpi,,,,,
C0R560,新園,Xinyuan,,,,,
C0R570,麟洛,Linluo,,,,,
C0R580,南州,Nanzhou,,,,,
C0R590,里港,Ligang,,,,,
C0R600,舊泰武,Jiutaiwu,,,,,
C0R620,墾雷,Kenlei,,,,,
C0R640,東港,Donggang,,,,,
C0R650,竹田,Zhutian,,,,,
C0R660,枋寮,Fangliao,,,,,
C0R670,楓港,Fenggang,,,,,
C0R680,佳樂水,Jialeshui,,,,,
C0R690,墾丁,Kenting,,,,,
C0R700,枋山,Fangshan,,,,,
C0R710,龍磐,Longpan,,,,,
C0R720,旭海,Xuhai,,,,,
C0R730,大坪頂,Dapingding,,,,,
C0R741,獅子,Shizi,,,,,
C0R750,四林格山,Silingeshan,,,,,
C0R760,南仁湖,Nanrenhu,,,,,
C0R770,保力,Baoli,,,,,
C0R780,滿州,Manzhou,,,,,
C0R790,九棚,Jiupeng,,,,,
C0R800,丹路,Danlu,,,,,
C0R810,內獅,Neishi,,,,,
C0R820,白鷺,Bailu,,,,,
C0R830,高士,Gaoshi,,,,,
C0R840,牡丹池山,Mudanchisahn,,,,,
C0R850,林邊,Linbian,,,,,
C0R860,鼻頭,Bitou,,,,,
C0R870,興海,Singhai,,,,,
C0R880,後壁湖,Houbihu,,,,,
C0R890,山海,Shanhai,,,,,
C0R900,竹坑,Jhukeng,,,,,
C0R910,下寮,Sialiao,,,,,
C0R920,塭仔,Wunzai,,,,,
C0R930,萬丹,Wandan,,,,,
C0R940,加祿堂,Jialutang,,,,,
C0R950,萬隆國小,Wanlongguoxiao,,,,,
C0R960,內埔,Neipu,,,,,
C0S660,下馬,Xiama,,,,,
C0S690,太麻里,Taimali,,,,,
C0S700,知本,Jhihben,,,,,
C0S710,鹿野,Luye,,,,,
C0S730,綠島,Ludao,,,,,
C0S740,池上,Chihshang,,,,,
C0S750,向陽,Siangyang,,,,,
C0S760,紅石,Hongshih,,,,,
C0S770,大溪山,Dasishan,,,,,
C0S790,金崙,Jinlun,,,,,
C0S810,東河,Donghe,,,,,
C0S830,長濱,Changbin,,,,,
C0S840,南田,Nantian,,,,,
C0S890,關山,Guanshan,,,,,
C0S900,蘭嶼高中,Lanyu High School,,,,,
C0S910,蘭嶼燈塔,Lanyu Lighthouse,,,,,
C0S920,金峰嘉蘭,Jialan Jinfeng,,,,,
C0S930,延平,Yanping,,,,,
C0S940,石寧山,Shiningshan,,,,,
C0S950,七塊厝,Qikuaicuo,,,,,
C0S960,香蘭,Xianglan,,,,,
C0S970,加津林,Jiajinlin,,,,,
C0S980,勝林山,Shenglinshan,,,,,
C0S990,山豬窟,Shanzhuku,,,,,
C0SA00,歷坵,Liqiu,,,,,
C0SA10,檳榔四格山,Binlangsigeshan,,,,,
C0SA20,金崙山,Jinlunshan,,,,,
C0SA30,都歷,Duli,,,,,
C0SA40,瑞和,Ruihe,,,,,
C0SA60,知本(水試所),Zhiben (FRI),,,,,
C0SA80,土坂,Tuban,,,,,
C0SA90,達仁林場,Darenlinchang,,,,,
C0SB10,美和,Meihe,,,,,
C0SB20,富岡,Fugang,,,,,
C0SB30,新蘭,Dulan Fire Brigade,,,,,
C0SB40,興隆, Xinglong,,,,,
C0SB50,叭嗡嗡,Baweng,,,,,
C0SB60,白守蓮,Baishoulian,,,,,
C0SB70,小港漁港,Xiaogang Fishing Harbor,,,,,
C0SB80,長濱漁港,Changbin Fishing Harbor,,,,,
C0T790,大禹嶺,Dayuling,,,,,
C0T820,天祥,Tianxiang,,,,,
C0T870,鯉魚潭,Liyutan,,,,,
C0T900,西林,Xilin,,,,,
C0T960,光復,Guangfu,,,,,
C0T9A0,月眉山,Yuemeishan,,,,,
C0T9B0,水源,Shuiyuan,,,,,
C0T9D0,和中,Hezhong,,,,,
C0T9E0,大坑,Dakeng,,,,,
C0T9F0,水璉,Shuilian,,,,,
C0T9G0,鳳林山,Fenglinshan,,,,,
C0T9H0,加路蘭山,Jialulanshan,,,,,
C0T9I0,豐濱,Fengbin,,,,,
C0T9M0,靜浦,Jingpu,,,,,
C0T9N0,富里,Fuli,,,,,
C0TA10,花蓮漁港,Hualien Fishing Harbor,,,,,
C0TA20,加灣,Jiawan,,,,,
C0TA30,鹽寮,Yanliao,,,,,
C0TA40,秀林,Xiulin,,,,,
C0TA50,和仁,Heren,,,,,
C0TA80,立霧山,Liwushan,,,,,
C0U520,雙連埤,Shuanglianpi,,,,,
C0U600,礁溪,Chiaoshi,,,,,
C0U650,玉蘭,Yulan,,,,,
C0U710,太平山,Taipingshan,,,,,
C0U720,南山,Nanshan,,,,,
C0U750,龜山島,Gueishandao,,,,,
C0U760,東澳,Dong-Ao,,,,,
C0U770,南澳,Nanao,,,,,
C0U780,五結,Wujie,,,,,
C0U860,頭城,Toucheng,,,,,
C0U870,大礁溪,Dajiaoxi,,,,,
C0U880,北關,Beiguan,,,,,
C0U890,三星,Sanxing,,,,,
C0U900,內城,Neicheng,,,,,
C0U910,冬山,Dongshan,,,,,
C0U940,羅東,Luodong,,,,,
C0U950,鶯子嶺,Yingziling,,,,,
C0U960,翠峰湖,Cuifenghu,,,,,
C0U970,大福,Dafu,,,,,
C0U980,坪林石牌,Shipai Pinglin,,,,,
C0U990,員山,Yuanshan,,,,,
C0UA00,土場,Tuchang,,,,,
C0UA10,鴛鴦湖,Yuanyanghu,,,,,
C0UA20,多加屯,Duojiatun,,,,,
C0UA30,白嶺,Bailing,,,,,
C0UA40,西德山,Xideshan,,,,,
C0UA50,西帽山,Ximaoshan,,,,,
C0UA60,樟樹山,Zhangshushan,,,,,
C0UA70,桃源谷,Taoyuangu,,,,,
C0UA80,大溪漁港,Dasi Fishing Harbor,,,,,
C0UA90,石城,Shihcheng,,,,,
C0UB00,淡江大學蘭陽校園,Tamkang Lanyang Campus,,,,,
C0UB10,蘇澳,Suao,,,,,
C0UB20,壯圍,Jhuangwei,,,,,
C0UB60,明池,Mingchr,,,,,
C0UB70,太平山中間站,Jhongjian,,,,,
C0UB80,翠峰林道6K,Trifong 6k,,,,,
C0UB90,太平山莊,Taipingshan Villa,,,,,
C0V210,復興,Fuxing,,,,,
C0V350,溪埔,Xipu,,,,,
C0V360,內門,Neimen,,,,,
C0V370,古亭坑,Gutingkeng,,,,,
C0V400,阿公店,Agongdian,,,,,
C0V440,鳳山,Fengshan,,,,,
C0V450,鳳森,Fengsen,,,,,
C0V490,新興,Sinsing,,,,,
C0V530,阿蓮,Alian,,,,,
C0V610,梓官,Ziguan,,,,,
C0V620,永安,Yong'An,,,,,
C0V630,茄萣,Qieding,,,,,
C0V640,湖內,Hunei,,,,,
C0V650,彌陀,Mituo,,,,,
C0V660,岡山,Gangshan,,,,,
C0V680,仁武,Renwu,,,,,
C0V690,鼓山,Gushan,,,,,
C0V700,三民,Sanmin,,,,,
C0V710,苓雅,Lingya,,,,,
C0V720,林園,Linyuan,,,,,
C0V730,大寮,Daliao,,,,,
C0V740,旗山,Qishan,,,,,
C0V750,路竹,Luzhu,,,,,
C0V760,橋頭,Qiaotou,,,,,
C0V770,大社,Dashe,,,,,
C0V790,萬山,Wanshan,,,,,
C0V800,六龜,Liugui,,,,,
C0V810,左營,Zuoying,,,,,
C0V820,小林,Xiaolin,,,,,
C0V840,鳳鼻頭,Fongbitou,,,,,
C0V850,蚵仔寮,Kezailiao,,,,,
C0V860,南寮,Nanliao,,,,,
C0V870,文安,Wunan,,,,,
C0V880,興達,Singda,,,,,
C0V890,前鎮,Chian Jhen,,,,,
C0V900,汕尾,Shanwei,,,,,
C0V910,大樹,Dashu,,,,,
C0W110,東莒,Dongju,,,,,
C0W120,西嶼,Xiyu,,,,,
C0W130,花嶼,Huayu,,,,,
C0W140,金沙,Jinsha ,,,,,
C0W150,金寧,Jinning,,,,,
C0W160,烏坵,Wuqiu,,,,,
C0W180,七美,Qimei,,,,,
C0W190,望安,Wangan,,,,,
C0W200,湖西,Husi,,,,,
C0W220,北竿,Beigan,,,,,
C0W240,九宮,Jiugong ,,,,,
C0X050,東河,Donghe,,,,,
C0X060,下營,Xiaying,,,,,
C0X080,佳里,Jiali,,,,,
C0X100,臺南市北區,Beiqu Tainan City,,,,,
C0X110,臺南市南區,Nanqu Tainan City,,,,,
C0X120,麻豆,Madou,,,,,
C0X130,官田,Guantian,,,,,
C0X140,西港,Xigang,,,,,
C0X150,安定,Anding,,,,,
C0X160,仁德,Rende,,,,,
C0X170,關廟,Guanmiao,,,,,
C0X180,山上,Shanshang,,,,,
C0X190,安平,Anping,,,,,
C0X200,左鎮,Zuozhen,,,,,
C0X210,白河,Baihe,,,,,
C0X220,學甲,Xuejia,,,,,
C0X230,鹽水,Yanshui,,,,,
C0X240,關子嶺,Guanziling,,,,,
C0X250,新營,Xinying,,,,,
C0X260,後壁,Houbi,,,,,
C0X280,將軍,Jiangjun,,,,,
C0X290,北門,Beimen,,,,,
C0X300,鹿寮,Luliao,,,,,
C0X320,柳營,Liuying,,,,,
C0Z020,明里,Mingli,,,,,
C0Z050,佳心,Jiaxin,,,,,
C0Z061,玉里,Yuli,,,,,
C0Z070,舞鶴,Wuhe,,,,,
C0Z080,富源,Fuyuan,,,,,
C0Z100,東華,Donghwa,,,,,
C0Z150,吉安光華,Guanghua Ji-An,,,,,
C0Z160,鳳林,Fenglin,,,,,
C0Z170,卓溪,Zhuoxi,,,,,
C0Z180,新城,Xincheng,,,,,
C0Z190,富世,Fushi,,,,,
C0Z200,萬榮,Wanrong,,,,,
C0Z210,瑞穗,Ruisui,,,,,
C0Z220,和平林道,Hepinglindao,,,,,
C0Z230,和平,Heping,,,,,
C0Z250,瑞穗林道,Ruisuilindao,,,,,
C0Z270,蕃薯寮,Fanshuliao,,,,,
C0Z280,德武,Dewu,,,,,
C0Z290,赤柯山,Chikeshan,,,,,
C0Z300,東里,Dongli,,,,,
C0Z310,清水斷崖,Qingshui Cliff,,,,,
C0Z320,清水林道,Qingshuilindao,,,,,
C0Z330,安通山,Antongshan,,,,,
C1A630,下盆,Siapen,,,,,
C1A750,石碇服務區,Shiding Service Area,,,,,
C1A760,坪林交控,Pinglin Traffic Control Center,,,,,
C1A9N0,四十份,Sihshihfen,,,,,
C1AC50,關渡,Guandu,,,,,
C1AI50,國三N016K,Freeway No. 3 - Rain - N016k,,,,,
C1AI60,國一39K邊坡,Freeway No. 1 - Rain – N039k,,,,,
C1C510,水尾,Shueiwei,,,,,
C1D380,新埔,Sinpu,,,,,
C1D400,鳥嘴山,Niaozueishan,,,,,
C1D410,白蘭,Bailan,,,,,
C1D420,太閣南,Taigenan,,,,,
C1D630,飛鳳山,Fei Feng Mountain,,,,,
C1D640,外坪(五指山),Waiping(Wuzhihshan),,,,,
C1E451,象鼻,Xiangbi,,,,,
C1E461,松安,Song-An,,,,,
C1E480,鳳美,Fongmei,,,,,
C1E511,新開,Xinkai,,,,,
C1E601,南勢,Nanshi,,,,,
C1E670,南礦,Nankuang,,,,,
C1E681,南勢山,Nanshishan,,,,,
C1E691,南湖,Nanhu,,,,,
C1E701,八卦,Bagua,,,,,
C1E711,馬拉邦山,Malabangshan,,,,,
C1E721,泰安,Tai-An,,,,,
C1E770,公館,Gongguan,,,,,
C1E890,國三N149K,Freeway No. 1 - Rain – N149k,,,,,
C1E900,國一N128K,Freeway No. 1 - Rain – N128k,,,,,
C1F871,上谷關,Shangguguan,,,,,
C1F891,稍來,Shaolai,,,,,
C1F911,新伯公,Xinbogong,,,,,
C1F941,雪嶺,Xueling,,,,,
C1F9B1,桐林,Tonglin,,,,,
C1F9C1,白冷,Baileng,,,,,
C1F9D1,白毛台,Baimaotai,,,,,
C1F9E1,龍安,Long-An,,,,,
C1F9F1,伯公龍,Bogonglong,,,,,
C1F9G1,慶福山,Cingfushan,,,,,
C1F9J1,清水林,Qingshuilin,,,,,
C1F9W0,德基,Deji,,,,,
C1G691,下水埔,Xiashuipu,,,,,
C1G9D0,國一S218K,Freeway No. 1 - Rain – S218k,,,,,
C1H000,翠峰,Cuifeng,,,,,
C1H840,國三N238K,Freeway No. 3 - Rain –N238k,,,,,
C1H900,清流,Qingliu,,,,,
C1H920,長豐,Changfeng,,,,,
C1H941,雙冬,Shuangdong,,,,,
C1H971,六分寮,Liufenliao,,,,,
C1H9B1,阿眉,Amei,,,,,
C1I020,萬大,Wanda,,,,,
C1I030,武界,Wujie,,,,,
C1I050,丹大,Danda,,,,,
C1I070,和社,Heshe,,,,,
C1I101,溪頭,Xitou,,,,,
C1I121,大鞍,Da-An,,,,,
C1I131,桶頭,Tongtou,,,,,
C1I140,卡奈托灣,Kanaituowan,,,,,
C1I150,青雲,Qingyun,,,,,
C1I201,中心崙,Zhongxinlun,,,,,
C1I211,蘆竹湳,Luzhunan,,,,,
C1I220,樟湖,Zhanghu,,,,,
C1I230,九份二山,Jiufen'Ershan,,,,,
C1I240,外大坪,Waidaping,,,,,
C1I250,鯉潭,Litan,,,,,
C1I260,北坑,Beikeng,,,,,
C1I280,埔中,Puzhong,,,,,
C1I290,豐丘,Fengqiu,,,,,
C1I310,西巒,Xiluan,,,,,
C1I320,奧萬大,Aowanda,,,,,
C1I330,楓樹林,Fengshulin,,,,,
C1I340,新興橋,Xinxingqiao,,,,,
C1I400,凌霄,Lingxiao,,,,,
C1I430,翠華,Cuihua,,,,,
C1I440,新高口,Xingaokou,,,,,
C1I450,望鄉山,Wangxiangshan,,,,,
C1I470,杉林溪,Shanlinxi,,,,,
C1I500,大尖山,Dajianshan,,,,,
C1I510,線浸林道,Xianjinlindao,,,,,
C1I550,國六W023K,Freeway No. 6 - Rain – W023k,,,,,
C1K540,口湖,Kouhu,,,,,
C1M390,龍美,Longmei,,,,,
C1M400,菜瓜坪,Caiguaping,,,,,
C1M480,獨立山,Dulishan,,,,,
C1M600,頭凍,Toudong,,,,,
C1M610,石磐龍,Shipanlong,,,,,
C1M640,十字,Shizi,,,,,
C1M870,國三N285K,Freeway No. 3 - Rain –N285k,,,,,
C1N001,沙崙,Shalun,,,,,
C1O850,環湖,Huanhu,,,,,
C1O870,大棟山,Dadongshan,,,,,
C1O880,關山,Guanshan,,,,,
C1O921,楠西,Nanxi,,,,,
C1O940,東山服務區,Dongshan Service Area,,,,,
C1R110,口社,Gusia,,,,,
C1R120,上德文,Shangdewun,,,,,
C1R250,力里,Lili,,,,,
C1R290,石門山,Shihmenshan,,,,,
C1R610,西大武山,Xidawushan,,,,,
C1R630,龍泉,Longquan,,,,,
C1S670,摩天,Motian,,,,,
C1S800,華源,Huayuan,,,,,
C1S820,金峰,Jinfeng,,,,,
C1S850,豐南,Funan,,,,,
C1S860,利嘉,Lichai,,,,,
C1S870,南美山,Nanmaisan,,,,,
C1S880,壽卡,Shouka,,,,,
C1SA50,利嘉林道,Lijialindao,,,,,
C1SA70,都蘭,Dulan,,,,,
C1T800,洛韶,Luoshao,,,,,
C1T810,慈恩,Ci-En,,,,,
C1T830,布洛灣,Buluowan,,,,,
C1T920,中興,Zhongxing,,,,,
C1T940,大觀,Daguan,,,,,
C1T950,太安,Tai-An,,,,,
C1T970,大農,Danong,,,,,
C1T980,龍澗,Longjian,,,,,
C1T990,高寮,Gaoliao,,,,,
C1TA00,太魯閣,Taroko,,,,,
C1U501,牛鬥,Nioudou,,,,,
C1U670,寒溪,Hanxi,,,,,
C1U840,東澳嶺,Dongaoling,,,,,
C1U850,觀音海岸,Guanyin Coast,,,,,
C1U920,思源,Siyuan,,,,,
C1U930,粉鳥林,Fenniaolin,,,,,
C1V160,達卡努瓦,Dakanuwa,,,,,
C1V170,排雲,Paiyun,,,,,
C1V190,南天池,Nantianchi,,,,,
C1V200,梅山,Meishan,,,,,
C1V220,小關山,Xiaoguanshan,,,,,
C1V231,高中,Gaozhong,,,,,
C1V300,御油山,Yuyoushan,,,,,
C1V340,大津,Dajin,,,,,
C1V390,尖山,Jianshan,,,,,
C1V570,吉東,Jiadong,,,,,
C1V580,溪南(特生中心),Xinan,,,,,
C1V590,新發,Xinfa,,,,,
C1V600,藤枝,Tengzhi,,,,,
C1V780,多納林道,Duonalindao,,,,,
C1V830,國三S383K,Freeway No. 3 - Rain – S383k,,,,,
C1X040,東原,Dongyuan,,,,,
C1Z030,紅葉,Hongye,,,,,
C1Z040,立山,Lishan,,,,,
C1Z110,三棧,Sanzhan,,,,,
C1Z120,壽豐,Shoufeng,,,,,
C1Z130,銅門,Tongmen,,,,,
C1Z140,荖溪,Laoxi,,,,,
C1Z240,中平林道,Zhongpinglindao,,,,,

================================================
FILE: .cursorrules
================================================
# Cursor AI Rules

Last Modified: 2025-12-29

Check for staleness: If this file is older than 2 months, ask the user to confirm the instructions are still valid before proceeding.

## Communication Style

Make responses concise and only reply with necessary information. Avoid verbose explanations unless specifically requested.

## Git Workflow

- Check worktree status before any work: Refuse to process any prompts if the git worktree is not clean. Ask the user to commit or stash changes first.
- Automatically commit any edits done by AI with AI co-authorship:
  Co-Authored-By: Cursor <cursor@cursor.com>

## AI Usage Policy

**IMPORTANT:** AI usage is **prohibited** in this repository except for **documentation purposes only**. All documentation must follow Effective Dart (https://dart.dev/effective-dart) style guidelines.

- Do NOT use AI to generate or modify code
- Documentation is the ONLY acceptable use case for AI
- All documentation must adhere to Effective Dart conventions

## Project: DPIP

Flutter-based disaster prevention app for earthquake early warnings and weather alerts.
- Target: Android/iOS
- Flutter >=3.38.0, Dart >=3.10.0
- State Management: Provider
- Routing: go_router (type-safe)

## Essential Commands

```bash
# Install dependencies
flutter pub get --no-example

# Generate code (after model/route changes)
dart run build_runner build

# Build
flutter build apk --release
flutter build ios --release
```

## Code Standards

- Lint: package:lint/strict.yaml
- Format: 80 char width, preserve trailing commas
- public_member_api_docs: warning level
- Generated files (**.g.dart, **.freezed.dart) excluded from analysis

## Architecture

### Global State (lib/core/providers.dart)
- DpipDataModel - Earthquake/weather data
- SettingsLocationModel - Location preferences
- SettingsMapModel - Map settings
- SettingsNotificationModel - Notification config
- SettingsUserInterfaceModel - UI/i18n

### Key Directories
- lib/api/ - API client, models (freezed/json_annotation)
- lib/app/ - Feature modules by screen
- lib/core/ - Services (FCM, GPS, notifications, EEW logic)
- lib/models/ - ChangeNotifier models
- lib/utils/ - Extensions and helpers
- lib/widgets/ - Reusable components

### Code Generation
Run `dart run build_runner build` after changes to:
- router.dart (go_router_builder)
- @JsonSerializable() models
- @freezed classes

## Important Notes

- No test suite exists
- Settings paths use numbered prefixes: (1.eew), (2.earthquake), etc.
- API uses load balancing across multiple endpoints
- Compressed assets: *.json.gz files decompressed at runtime
- Localizations: i18n_extension with Crowdin integration
- Map: MapLibre GL with multiple layer managers


================================================
FILE: .github/CODEOWNERS
================================================
/.github/ @exptechtw/dpip-developers

/lib/app/ @kamiya10
/lib/models/ @kamiya10
/lib/core/service.dart @kamiya10
/tools/update_translations.sh @kamiya10


================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: exptech # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']


================================================
FILE: .github/ISSUE_TEMPLATE/Bug.yml
================================================
name: "🚧問題回報"
labels: ["錯誤"]
projects: ["ExpTechTW/12"]
description: |
  請詳細描述你遇到的問題協助我們排除問題
title: '[Bug]: '
body:
- type: dropdown
  id: platform
  attributes:
    label: 平台
    options:
    - iOS
    - Android
    default: 0
  validations:
    required: true
- type: input
  attributes:
    label: 版本
    description: 填入版本
  validations:
    required: true
- type: input
  attributes:
    label: 裝置
    description: 填入裝置名稱
  validations:
    required: true
- type: textarea
  attributes:
    label: 內文
    description: 請輸入內容
  validations:
    required: true
- type: textarea
  attributes:
    label: 重現步驟
    description: 如果有的話請輸入重現步驟
    placeholder: |
      1. ...
      2. ...
      3. ...
  validations:
    required: false
- type: textarea
  attributes:
    label: 影片/照片
    description: 如果有的話請上傳影片或照片
  validations:
    required: false
- type: textarea
  attributes:
    label: 日誌
    description: 如果有的話請輸入日誌內容
  validations:
    required: false
- type: markdown
  attributes:
    value: "### 此檔案由 ExpTech Studio 設計製作"


================================================
FILE: .github/ISSUE_TEMPLATE/Idea.md
================================================
---
name: "\U0001F50C想法補充"
about: 快來說說你的想法吧
title: ''
labels: ''
assignees: ''

---

### 🌟想法補充
* 補充說明:

#### 此檔案由 ExpTech.tw 設計製作


================================================
FILE: .github/pull_request_template.md
================================================
<!--
  如果是正在進行中的 Pull Request,請使用草稿 PR 功能,
  詳情請參見:https://github.blog/2019-02-14-introducing-draft-pull-requests/

  為了能更即時地審核/回應,請避免強制推送其他 commit 至已經收到 Review 的 PR。

  在提交 Pull Request 之前,請確保您已完成以下事項:
  - 👷‍♀️ 在大多數情況下,建立小型的 PR 是可以的。
  - ✅ 為您的更改提供測試。
  - 📝 使用具有描述性的 commit 訊息。
  - 📗 更新相關技術文件並包含相關截圖。
-->

## 這是什麼類型的 PR?

> 選擇所有符合的項目

- [ ] 重構
- [ ] 新功能
- [ ] 錯誤修復
- [ ] 最佳化
- [ ] 技術文件更新

## 描述

<!-- 請在這裡描述這個 PR 修改的內容 -->

## 相關 issue

<!--
對於與某個問題相關或關閉某個問題的 Pull Request,請在下方註記它們。
我們遵循 Github 的 [將問題鏈接到 Pull Request](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) 指南。

例如,「closes #1234」將把目前的 PR 與 issue#1234 連接起來。
當我們合併 PR 時,Github 就會自動關閉對應的 issue 。
-->

- 相關問題 #
- closes #

## QA 指南、截圖、錄像

> _請將這行替換成:如何測試您的 PR 的步驟,已測試的裝置註釋,以及任何相關的 UI 更改圖片。_

### UI 無障礙清單

> _如果您的 PR 包含 UI 更改,請使用此清單:_

- [ ] 變數名稱實現語意化命名?
- [ ] 測試通過 AA 顏色對比?


================================================
FILE: .github/workflows/android.yml
================================================
name: Build Android

on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]

jobs:
  changes:
    runs-on: ubuntu-latest
    permissions:
      contents: read
    outputs:
      android: ${{ steps.filter.outputs.android }}
    steps:
      - uses: actions/checkout@v4
      - uses: dorny/paths-filter@v3
        id: filter
        with:
          filters: |
            android:
              - 'android/**'
              - 'assets/**'
              - 'lib/**'
              - 'pubspec.yaml'

  Android:
    needs: changes
    if: ${{ needs.changes.outputs.android == 'true' }}
    runs-on: ubuntu-latest
    permissions:
      contents: read

    steps:
      - uses: actions/checkout@v4

      - name: Setup Java
        uses: actions/setup-java@v4
        with:
          distribution: "temurin"
          java-version: "25"
          cache: "gradle"

      - name: Setup Flutter
        uses: subosito/flutter-action@v2
        with:
          channel: "stable"
          cache: true

      - name: Cache Gradle
        uses: actions/cache@v3
        env:
          cache-name: cache-gradle
        with:
          path: |
            ~/.gradle/caches
            ~/.gradle/wrapper
          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/wrapper/gradle-wrapper.properties', '**/build.gradle') }}
          restore-keys: |
            ${{ runner.os }}-build-${{ env.cache-name }}-
            ${{ runner.os }}-build-

      - name: Cache Android NDK
        uses: actions/cache@v4
        with:
          path: |
            /usr/local/lib/android/sdk/ndk/27.0.12077973
            /usr/local/lib/android/sdk/ndk/28.2.13676358
          key: ${{ runner.os }}-ndk-27-28

      - name: Cache Android sdk
        uses: actions/cache@v3
        env:
          cache-name: cache-Android-sdk
        with:
          path: |
            /usr/local/lib/android/sdk/platforms/android-31
            /usr/local/lib/android/sdk/platforms/android-33
          key: ${{ runner.os }}-android-platforms-${{ env.cache-name }}-${{ hashFiles('android/gradle.properties') }}
          restore-keys: |
            ${{ runner.os }}-build-${{ env.cache-name }}-
            ${{ runner.os }}-build-

      - name: Install dependencies and run build_runner
        run: |
          flutter pub get
          dart run build_runner build --delete-conflicting-outputs

      - name: Decode keystore
        run: |
          echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > android/app/my-release-key.jks

      - name: Create key.properties
        run: |
          cat > android/key.properties << EOF
          storePassword=${{ secrets.KEYSTORE_PASSWORD }}
          keyPassword=${{ secrets.KEY_PASSWORD }}
          keyAlias=${{ secrets.KEY_ALIAS }}
          storeFile=my-release-key.jks
          EOF

      - name: Build Release APK
        run: flutter build apk --release --target-platform android-arm64,android-x64

      - name: Upload Artifacts
        uses: actions/upload-artifact@v4
        with:
          name: DPIP-Android-Release
          path: build/app/outputs/flutter-apk/*.apk
          retention-days: 7
          compression-level: 6


================================================
FILE: .github/workflows/claude-code-review.yml
================================================
name: Claude Code Review

on:
  pull_request:
    types: [opened]
    paths:
      - '.crowdin/**'
      - 'android/**'
      - 'assets/**'
      - 'ios/**'
      - 'lib/**'
      - 'tools/**'
      - 'analysis_options.yaml'
      - 'crowdin.yml'
      - 'pubspec.yaml'
      - 'CHANGELOG.md'
      - 'README.md'
    branches:
      - '**'
      - '!i18n'

jobs:
  claude-review:
    runs-on: ubuntu-latest
    environment: pr-actions
    permissions:
      contents: read
      pull-requests: write
      id-token: write
    
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 1

      - name: Run Claude Code Review
        id: claude-review
        uses: anthropics/claude-code-action@v1
        with:
          claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
          track_progress: true
          prompt: |
            Please review this pull request and provide feedback on:
            - Code quality and best practices
            - Potential bugs or issues
            - Performance considerations
            - Security concerns
            - Test coverage
            
            This is a flutter project, please review the PR with flutter best practices in mind.
            Be constructive and helpful in your feedback.
            Please suggest changes in the PR review comments if there are any important issues or improvements.

            Note: The PR Branch is already checked out.
          
          # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
          # or https://docs.claude.com/en/docs/claude-code/sdk#command-line for available options
          claude_args: '--allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"'



================================================
FILE: .github/workflows/claude.yml
================================================
name: Claude Code

on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]
  issues:
    types: [opened, assigned]
  pull_request_review:
    types: [submitted]

jobs:
  claude:
    if: |
      (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
      (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: read
      issues: read
      id-token: write
      actions: read # Required for Claude to read CI results on PRs
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 1

      - name: Run Claude Code
        id: claude
        uses: anthropics/claude-code-action@v1
        with:
          claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
          # This is an optional setting that allows Claude to read CI results on PRs
          additional_permissions: |
            actions: read

          # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
          # prompt: 'Update the pull request description to include a summary of changes.'

          # Optional: Add claude_args to customize behavior and configuration
          # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
          # or https://docs.claude.com/en/docs/claude-code/sdk#command-line for available options
          # claude_args: '--model claude-opus-4-1-20250805 --allowed-tools Bash(gh pr:*)'


================================================
FILE: .github/workflows/ios.yml
================================================
name: Build iOS

on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]

jobs:
  changes:
    runs-on: ubuntu-latest
    permissions:
      contents: read
    outputs:
      ios: ${{ steps.filter.outputs.ios }}
    steps:
      - uses: actions/checkout@v4
      - uses: dorny/paths-filter@v3
        id: filter
        with:
          filters: |
            ios:
              - 'ios/**'
              - 'assets/**'
              - 'lib/**'
              - 'pubspec.yaml'

  iOS:
    needs: changes
    if: ${{ needs.changes.outputs.ios == 'true' }}
    runs-on: macos-latest
    permissions:
      contents: read

    steps:
      - uses: actions/checkout@v4

      - name: Setup Flutter
        uses: subosito/flutter-action@v2
        with:
          channel: "stable"
          cache: true

      - name: Cache CocoaPods
        uses: actions/cache@v4
        with:
          path: |
            ios/Pods
            ~/Library/Caches/CocoaPods
          key: ${{ runner.os }}-pods-${{ hashFiles('ios/Podfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-pods-

      - name: Install dependencies and run build_runner
        run: |
          flutter pub get
          dart run build_runner build --delete-conflicting-outputs

      - name: Install iOS Pods
        working-directory: ios
        run: pod install --repo-update

      - name: Build iOS App and create IPA
        run: |
          flutter build ios --debug --no-codesign
          mkdir -p Payload
          cp -R build/ios/iphoneos/Runner.app Payload/Runner.app
          zip -qr DPIP.ipa Payload

      - name: Upload Artifacts
        uses: actions/upload-artifact@v4
        with:
          name: DPIP-iOS
          path: |
            build/ios/iphoneos/Runner.app
            DPIP.ipa
          retention-days: 7
          compression-level: 6


================================================
FILE: .github/workflows/lock.yml
================================================
# Configuration for Lock Threads - https://github.com/dessant/lock-threads

name: "Lock Threads"

# By specifying the access of one of the scopes, all of those that are not
# specified are set to 'none'.
permissions:
  issues: write

on:
  schedule:
    - cron: "0 0 * * *"

jobs:
  lock:
    permissions:
      issues: write
    runs-on: ubuntu-latest
    steps:
      - uses: dessant/lock-threads@1bf7ec25051fe7c00bdd17e6a7cf3d7bfb7dc771
        with:
          process-only: "issues"
          github-token: ${{ github.token }}
          # Number of days of inactivity before a closed issue is locked.
          issue-inactive-days: "14"
          issue-comment: >
            This thread has been automatically locked since there has not been
            any recent activity after it was closed. If you are still experiencing a
            similar issue, please open a new bug, including logs and a minimal
            reproduction of the issue.


================================================
FILE: .gitignore
================================================
# Flutter/Dart specific
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
build/
*.g.dart
*.freezed.dart
*.mocks.dart

# Android related
**/android/**/gradle-wrapper.jar
**/android/.kotlin
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
**/android/app/.cxx/

# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/ephemeral
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/**/GeneratedPluginRegistrant.*

# macOS
**/macos/Flutter/ephemeral
**/macos/Flutter/GeneratedPluginRegistrant.swift
**/macos/Flutter/Flutter-Debug.xcconfig
**/macos/Flutter/Flutter-Release.xcconfig
**/macos/Flutter/Flutter-Profile.xcconfig

# Coverage
coverage/
*.lcov

# IDE
.idea/
.vscode/
*.iml
*.ipr
*.iws
.DS_Store

# Localization
lib/l10n/
*.mo

# Temporary files
*.log
*.tmp
*.temp


================================================
FILE: .idx/dev.nix
================================================
{pkgs}: {
  channel = "stable-24.05";
  packages = [
    pkgs.jdk17
    pkgs.unzip
  ];
  idx.extensions = [
    
  ];
  idx.previews = {
    previews = {
      web = {
        command = [
          "flutter"
          "run"
          "--machine"
          "-d"
          "web-server"
          "--web-hostname"
          "0.0.0.0"
          "--web-port"
          "$PORT"
        ];
        manager = "flutter";
      };
      android = {
        command = [
          "flutter"
          "run"
          "--machine"
          "-d"
          "android"
          "-d"
          "localhost:5555"
        ];
        manager = "flutter";
      };
    };
  };
}

================================================
FILE: .metadata
================================================
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.

version:
  revision: "b45fa18946ecc2d9b4009952c636ba7e2ffbb787"
  channel: "stable"

project_type: app

# Tracks metadata for the flutter migrate command
migration:
  platforms:
    - platform: root
      create_revision: b45fa18946ecc2d9b4009952c636ba7e2ffbb787
      base_revision: b45fa18946ecc2d9b4009952c636ba7e2ffbb787
    - platform: android
      create_revision: b45fa18946ecc2d9b4009952c636ba7e2ffbb787
      base_revision: b45fa18946ecc2d9b4009952c636ba7e2ffbb787
    - platform: ios
      create_revision: b45fa18946ecc2d9b4009952c636ba7e2ffbb787
      base_revision: b45fa18946ecc2d9b4009952c636ba7e2ffbb787

  # User provided section

  # List of Local paths (relative to this file) that should be
  # ignored by the migrate tool.
  #
  # Files that are not part of the templates will be ignored by default.
  unmanaged_files:
    - 'lib/main.dart'
    - 'ios/Runner.xcodeproj/project.pbxproj'


================================================
FILE: CHANGELOG.md
================================================
# 更新日誌

本專案的所有重要更改都將記錄在此文件中。

格式基於 [如何維護更新日誌](https://keepachangelog.com/zh-TW/1.1.0/),
並且本專案遵循 [語意化版本](https://semver.org/lang/zh-TW/spec/v2.0.0.html)。

## [未發布]

### 新增

### 更改

### 修正

## [3.1.402]

### 新增
- EEW 震度色塊
- 風向圖卡
- 捷徑功能

### 更改
- 介面樣式設定
- 改善 App 啟動速度 (Android) (#490)
- 地震報告取得更多資料
- 更改首頁版面排序設定
- 更新伺服器端點

### 修正
- 部分地點所在地預估震度問題
- 地震報告詳細頁面返回問題

## [3.1.401]

### 新增
- 地震重播

### 更改
- 支援平板介面
- 部分網路用量降低

### 修正
- 地震報告框問題
- 首頁底部點不到問題

## [3.1.310]

### 新增
- 新增首頁樣式設定 (#478)

### 更改
- 重構天氣測站資訊 (#470)
- 改善 App 啟動速度 (#475)

### 修正
- 手動定位 部分地點問題 (#474) (#477)
- 自動定位異常掛掉問題 (#473) (Android)

## [3.1.306]

### 新增
- 新增「事件切換」功能,可在全國/所在地,以及生效中/歷史之間切換查看 (#459)

### 更改
- 重構 GPS 定位邏輯以降低電量消耗,有助於提升使用者續航體驗 (#458) (Android)
- 核心框架更新,提升穩定性

### 修正
- 修正歷史事件未定義,現在可以看到事件了(#459)
- 天氣類圖層可以直接點選切換,圖層長按即可疊加顯示(例如雷達回波)
- 大(豪)雨特報頁面左上角顯示時間問題 (#464)


## [3.1.104] - 2025-11-11

### 新增
- 新增閃電圖層 (#435)
- 新增強震監視器延遲顯示,可顯示資料延遲狀態 (#442)

### 更改
- 改善強震監視器頁面效能。
- 重構 installId 初始化邏輯。 (#432)

### 修正
- 修正 P、S 波動畫在 FPS 設定下的順暢度問題。
- 修正 EEW 資料未正確過濾 CWA 來源的問題。 (#428)
- 修正字體網址問題。 (#434)
- 修正關閉自動定位設定後,仍會異常執行自動定位的問題。(Android) (#432)

## [3.1.103] - 2025-11-05

### 新增

- 新增通知設定提示。 (#409)
- 新增自動縮放監視器地圖的設定開關。 (#426)

### 更改

- 核心框架更新。
- 移除部分套件以減少封裝大小。
- 更新依賴套件。

### 修正

- 修正部分頁面地點沒有區的問題。 (#402)
- 修正背景自動定位沒有被執行的問題。 (#413) (#417)
- 修正地震速報時 box 顯示問題。 (#415)
- 修正大(豪)雨特報圖層順序問題。 (#418)
- 修正檢知時 box 圖層順序問題。 (#421)

## [3.1.001] - 2025-08-18

### 修正

- iOS手勢返回頁面問題。
- 緊急地震資訊倒數異常。

## [3.1.0] - 2025-08-14

### 新增

- 現在可以點擊通知跳轉地震報告頁面。

### 更改

- 一部分翻新測試通知本文(防災資訊)。
- 更新翻譯。

### 修正

- 修正系統主題色變更問題。
- 修正地震速報倒數顯示異常。
- 修正歷史事件異常。
- 修正重新載入取得最新資料。

## [3.0.2] - 2025-08-13

### 新增

- 新增地圖圖例。
- 地圖放大後現在會顯示每個觀測點的資料。
- 手動設定所在地現在可以設定多個地點來快速切換。

### 更改

- 贊助頁面邏輯。

### 修正

- 首頁歷史事件時間線順序和時間軸連接線。
- 強震監視器顯示時間數值位移的問題。
- 雷達迴波被世界地圖圖層覆蓋的問題。

## [3.0.014] - 2025-07-23

### 新增

- 新增初始圖層設定。
- 強震監視器時間顯示。

### 更改

- 移除歷史頁面(雷雨、震度速報等)多餘的圖示包層。
- 移除部分套件以減少封裝大小。

### 修正

- 部分 Android 裝置通知權限取得異常的問題。
- Mac 上的 iOS 應用程式無法取得通知權限的問題。

## [3.0.013] - 2025-07-14

### 新增

- 新增雷達回波播放功能。
- 新增地圖動畫幀率設定。

### 更改

- 地區語系選擇改為使用圖示代替國旗。

### 修正

- 震度顯示文字錯誤。
- 繁體中文語系選擇未顯示勾選狀態。
- 部份測試通知無法運作。
- 通知設定未正確同步的問題。
- 事件頁面中 雷達圖層 顯示錯誤的問題。
- 事件頁面中 GPS 圖層顯示錯誤的問題。
- 雷達迴波圖層被底圖樣式遮蓋的問題。
- 修正其他小問題。

## [3.0.012] - 2025-07-09

### 新增

- 新增地圖基礎選擇器功能。
- 新增強震監視器圖層。
- 新增點擊強震監視器通知跳轉到頁面。

### 更改

- 改善 Apple 平台啟動效能,跳過不必要的 FCM 初始化流程。
- 改善 town.json 座標資料。

### 修正

- 修正降雨圖層顯示與隱藏問題。
- 修正 iOS 自動定位功能。
- 修正切換自動定位開關的問題。
- 修正圖片下載錯誤。
- 修正雷雨圖卡導航。
- 修正其他小問題。

## [3.0.011] - 2025-05-31

### 新增

- 新地圖架構 (e28c1bb7dca509cb5878af77c61faabcc34016e2) (4cc4c8f477d19aeb72b1fe274e34be2c0c0bc8a6)
- 新增地震報告 (cf66e3f)

### 更改

- 所在地頁面中隱藏所有 Android 的自啟動提示警告。
- Apple 裝置啟動畫面 icon 改為螢幕寬度的 30%。 (75800b3)
- 重構 Apple 裝置型號對應邏輯。 (f784217)

## [3.0.010] - 2025-05-23

### 更改

- 地圖圖標改使用 sprite (ff3977692fa354d00912d99474e755d512e70421)

### 修正

- 修正即時天氣 API 資料格式變動 (40bc10030706a609e3aef499e5ed9bc61d3ef81d)
- 修正 Android 12+ 裝置啟動畫面重複顯示的問題。

## [3.0.009] - 2025-05-20

### 更改

- 國旗圖示改用內建圖片,App 更輕盈。

### 修正

- 修正 iOS 交易取消後無法再次發起購買的問題。

## [3.0.008] - 2025-05-18

### 新增

- 新增 iOS 啟動畫面 icon。
- 新增 Play 商店更新功能。 (d367c01f2f10395ad7d04e28c8b335d7779779d5)

### 更改

- 移除部分套件以減少封裝大小。
- 移除 iOS 停用 icon 資源。

### 修正

- 修正 Android 自動定位服務 icon 問題。
- 修正 iOS 交易完成後未正確結束導致無法再次購買的問題。
- 修正震度文字顯示錯誤。 (7ff61e6f89be32d95ebe2769d03006e3e39b67de)

## [3.0.007] - 2025-05-12

### 新增

- 合併推播通知設定和通知音效測試頁面。 (4fc8e4f88cfbbed7914020c7a0da347084fe034f)

### 更改

- 更改贊助免責聲明文字。

### 修正

- 修正首頁「雷雨即時訊息」卡片顯示邏輯。
- 修正 iOS 裝置資訊顯示異常。
- 修正通知測試文字描述。

## [3.0.006] - 2025-05-08

### 新增

- 新增贊助免責聲明文字。
- 重新設計更新日誌頁面。
- 新增雷雨即時訊息卡片。
- 新增首頁所在地未設定/服務區域外提示卡片。

### 更改

- 優化贊助頁面。

### 修正

- 首頁所在地按鈕位置未對齊其他按鈕。

## [3.0.005] - 2025-05-06

### 修正

- 修正使用較大顯示器裝置時無法接受監控條款的問題。
- 分開消耗性和非消耗性贊助項目。
- 移除贊助價格中多餘的貨幣符號。
- (iOS) 修正裝置資訊值溢出的問題。

## [3.0.004] - 2025-05-05

### 更改

- 將贊助改為使用應用內購買。
- 重構通知聲音測試頁面。

## [3.0.003] - 2025-05-05

## [3.0.002] - 2025-05-03

## [3.0.001] - 2025-05-01

[未發布]: https://github.com/exptechtw/dpip-pocket/compare/v3.1.402...HEAD
[3.1.402]: https://github.com/exptechtw/dpip-pocket/compare/v3.1.401...v3.1.402
[3.1.401]: https://github.com/exptechtw/dpip-pocket/compare/v3.1.310...v3.1.401
[3.1.310]: https://github.com/exptechtw/dpip-pocket/compare/v3.1.3...v3.1.310
[3.1.306]: https://github.com/exptechtw/dpip-pocket/compare/v3.1.004...v3.1.306
[3.1.104]: https://github.com/exptechtw/dpip-pocket/compare/v3.1.003...v3.1.104
[3.1.103]: https://github.com/exptechtw/dpip-pocket/compare/v3.1.001...v3.1.103
[3.1.001]: https://github.com/exptechtw/dpip-pocket/compare/v3.1.0...v3.1.001
[3.1.0]: https://github.com/exptechtw/dpip-pocket/compare/v3.0.2...v3.1.0
[3.0.2]: https://github.com/exptechtw/dpip-pocket/compare/v3.0.014...v3.0.2
[3.0.014]: https://github.com/exptechtw/dpip-pocket/compare/v3.0.013(2)...v3.0.014
[3.0.013]: https://github.com/exptechtw/dpip-pocket/compare/v3.0.012(1)...v3.0.013(2)
[3.0.012]: https://github.com/exptechtw/dpip-pocket/compare/v3.0.011...v3.0.012(1)
[3.0.011]: https://github.com/exptechtw/dpip-pocket/compare/v3.0.010...v3.0.011
[3.0.010]: https://github.com/exptechtw/dpip-pocket/compare/v3.0.009...v3.0.010
[3.0.009]: https://github.com/exptechtw/dpip-pocket/compare/v3.0.008...v3.0.009
[3.0.008]: https://github.com/exptechtw/dpip-pocket/compare/v3.0.007...v3.0.008
[3.0.007]: https://github.com/exptechtw/dpip-pocket/compare/v3.0.006...v3.0.007
[3.0.006]: https://github.com/exptechtw/dpip-pocket/compare/v3.0.005...v3.0.006
[3.0.005]: https://github.com/exptechtw/dpip-pocket/compare/v3.0.004...v3.0.005
[3.0.004]: https://github.com/exptechtw/dpip-pocket/compare/v3.0.003...v3.0.004
[3.0.003]: https://github.com/exptechtw/dpip-pocket/compare/v3.0.002...v3.0.003
[3.0.002]: https://github.com/exptechtw/dpip-pocket/compare/v3.0.001...v3.0.002
[3.0.001]: https://github.com/exptechtw/dpip-pocket/compare/2.5.500...v3.0.001


================================================
FILE: CLAUDE.md
================================================
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project

DPIP (Disaster Prevention Information Platform) — a Flutter app for Taiwan earthquake early warning and disaster information, integrating TREM-Net and CWA data.

## Commands

```bash
# Install dependencies
flutter pub get --no-example

# Format
dart format .

# Lint
dart analyze .

# Code generation (required after editing routes, @JsonSerializable, or @freezed models)
dart run build_runner build

# Update translations
bash tools/update_translations.sh

# Run
flutter run

# Build
flutter build apk --release
flutter build ios --release
```

There is no test suite.

## Architecture

**State management:** Provider (`ChangeNotifier`). Global providers are registered in `lib/core/providers.dart`:
- `DpipDataModel` — earthquake/weather data
- `SettingsLocationModel`, `SettingsMapModel`, `SettingsNotificationModel`, `SettingsUserInterfaceModel`

**Routing:** go_router with type-safe routes via `@TypedGoRoute`. Routes are defined in `router.dart` and code-generated into `router.g.dart`. Run `build_runner` after route changes.

**Feature modules** live under `lib/app/` (home, map, settings, changelog, debug, welcome). Each is self-contained with its own widgets subfolder.

**API layer** (`lib/api/`): Dio HTTP client with caching. Models use `@JsonSerializable` + `@freezed` — regenerate with `build_runner` after changes.

**Core services** (`lib/core/`): FCM, GPS, local notifications, EEW logic (`eew.dart`), compass, i18n, device info.

**Assets:** JSON data files are gzip-compressed (`*.json.gz`) and decompressed at runtime. GLSL shaders (`fog.frag`, `thunderstorm.frag`) are used for map effects.

## Key Conventions

- **Settings naming:** Notification settings use numbered prefixes — `(1.eew)`, `(2.earthquake)`, `(3.weather)`, `(4.tsunami)`, `(5.basic)` — to control display order.
- **Linting:** Extends `package:lint/strict.yaml`. Line width 100, preserve trailing commas, prefer single quotes.
- **Documentation:** Every public member must have a doc comment (`///`). Every file must have a top-level library doc comment (`/// ...` before any `library` or first declaration). Follow Effective Dart: document usage and behavior from the caller's perspective, not internal implementation. Use `[...]` for code references, avoid restating the name.
- **Dot shorthand:** Always use Dart dot shorthand (e.g., `.value` instead of `EnumType.value`) wherever the type can be inferred from context.
- **Widget extraction:** When a build method nests too deeply, extract the subtree into a private widget class (`_FooWidget`) in the same file rather than keeping it inline.
- **Class member order** (top to bottom), within each group sort alphabetically `A→Z` then `a→z`:
  1. Class fields
  2. Primary constructor
  3. Named constructors
  4. Uninitialized variables / private fields
  5. Private methods
  6. Public methods
  7. Overriding methods — widgets follow lifecycle order: `initState` → `build` → `dispose`
  8. Static fields
  9. Static members
- **Extensions:** Always prefer extension methods from `lib/utils/extensions/` over verbose equivalents. Avoid `.of(context)` calls — use `BuildContext` extensions instead:
  - `context.theme` → `Theme.of(context)`
  - `context.colors` → `Theme.of(context).colorScheme`
  - `context.texts` → `Theme.of(context).textTheme`
  - `context.dimension` → `MediaQuery.sizeOf(context)`
  - `context.padding` → `MediaQuery.paddingOf(context)`
  - `context.brightness` → `MediaQuery.platformBrightnessOf(context)`
  - `context.navigator` → `Navigator.of(context)`
  - `context.scaffoldMessenger` → `ScaffoldMessenger.of(context)`
  - `context.router` → `GoRouter.of(context)`
  - `context.popUntil(path)` → `GoRouter.of(context).popUntil(path)`
  - `context.bottomSheetConstraints` → Material 3 bottom sheet constraints
- **Generated files** (`**.freezed.dart`, `**.g.dart`) are excluded from analysis — do not edit them manually.
- **Localization:** Uses `i18n_extension`. Translations are managed via Crowdin; only zh-Hant is updated locally via the translation script.
- **Maps:** MapLibre GL with multiple layer managers. Dynamic color (Material You) via `dynamic_color`.


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# 貢獻者公約

## 我們的承諾

為了促進一個開放透明且受歡迎的環境,我們作為貢獻者和維護者保證,無論年齡、種族、民族、性別認同和表達、體型、殘疾、經驗水平、國籍、個人表現、宗教或性別取向,在我們的專案以及社群的參與者都有不被騷擾的體驗。

## 我們的準則

舉例來說有助於創造正面環境的行為包括:

* 使用歡迎和包容性語言
* 尊重不同的觀點和經驗
* 優雅地接受建設性批評
* 關注在對於社群最好的事情上
* 對其他社群成員的表現友善

舉例來說身為參與者不能接受的行為包括:

* 使用與性有關的言語或是圖像,以及不受歡迎的性騷擾
* 酸民/反串/釣魚行為或進行侮辱/貶損的評論,人身攻擊及政治攻擊
* 公開或私下的騷擾
* 未經許可地發布他人的個人資料,例如住址或是電子地址
* 其他可以被合理地認定為不恰當或者違反職業操守的行為

## 我們的責任

專案維護者有責任為「可接受的行為」準則做出詮釋,以及對已發生的不被接受的行為採取恰當且公平的糾正措施。

專案維護者有權力及責任去刪除、編輯、拒絕與本行為準則有所違背的評論(comments)、提交(commits)、程式碼、wiki 編輯、問題(issues)和其他貢獻,以及專案維護者可暫時或永久性的禁止任何他們認為有不適當、威脅、冒犯、有害行為的貢獻者。

## 使用範圍

當一個人代表該專案或是其社群時,本行為準則適用於其專案平台和公共平台。

代表專案或是社群的情況,舉例來說包括使用官方專案的電子郵件地址、通過官方的社群媒體帳號發布或線上或線下事件中擔任指定代表。

該專案的呈現方式可由其專案維護者進行進一步的定義及解釋。

## 強制執行

可以透過 [support@exptech.dev](mailto:support@exptech.dev) 聯繫專案團隊來報告濫用、騷擾或其他不被接受的行為。

任何維護團隊認為有必要且適合的所有投訴都將進行審查及調查,並做出相對應的回應。專案小組有對事件回報者有保密的義務。具體執行的方針近一步細節可能會單獨公佈。

沒有真誠的遵守或是執行本行為準則的專案維護人員,可能會因專案領導人或是其他成員的決定,暫時或是永久的取消其身份。

## 來源

本行為準則改編自[貢獻者公約][首頁],版本 1.4
可在此觀看 https://www.contributor-covenant.org/zh-tw/version/1/4/code-of-conduct.html

[首頁]: https://www.contributor-covenant.org


================================================
FILE: LICENSE
================================================
DPIP Public License
Copyright (C) 2026 ExpTech Studio. All rights reserved.

                        TERMS AND CONDITIONS

0. DEFINITIONS

   "The Software" refers to DPIP - Disaster Prevention Information Platform
   and all associated source code, assets, and documentation.

   "You" refers to any individual or organization exercising rights under
   this License.

   "Distribute" means to make the Software, or any modified version of it,
   available to any third party by any means, including but not limited to
   publishing, uploading, or shipping.

   "Modified Version" means any work based on or derived from the Software
   in which one or more portions have been changed, added, or removed.

   "Source Code" means the preferred form of the Software for making
   modifications to it, including all associated build scripts, assets,
   and configuration files required to produce and run the Software.

   "Commercial Use" means any use of the Software or a Modified Version
   primarily intended for or directed toward commercial advantage or
   monetary compensation.

1. GRANT OF RIGHTS

   Subject to the terms of this License, you are granted a worldwide,
   royalty-free, non-sublicensable right to:

   a) View and study the Source Code.
   b) Run the Software for personal, educational, and non-commercial purposes.
   c) Modify the Software for personal, educational, and non-commercial purposes.
   d) Distribute verbatim or Modified Versions of the Software, subject to
      the conditions in Section 2.

2. CONDITIONS FOR DISTRIBUTION

   If you Distribute the Software or any Modified Version, you must:

   a) INCLUDE SOURCE CODE. Provide the complete corresponding Source Code,
      either alongside the distribution or via a publicly accessible location.
      You may not distribute compiled or binary forms without the Source Code.

   b) PRESERVE NOTICES. Retain all copyright notices, license notices, and
      attributions present in the original Software. If the Software displays
      copyright or license notices to users, Modified Versions must do the same.

   c) MARK MODIFICATIONS. Clearly state that you have modified the Software
      and include a description of the changes made and the date of modification.

   d) USE THIS LICENSE. The entire distribution, including all Modified Versions,
      must be licensed under this License. You may not apply any additional
      restrictions or grant any additional permissions beyond those in this License.

   e) NO SUBLICENSING. You may not sublicense the Software. Each recipient
      receives their rights directly under this License.

3. NO COMPETING USE

   You may not use the Software, or any Modified Version of it, to offer
   a product or service that competes, directly or indirectly, with the
   Software or with any product or service offered by ExpTech Studio.

   This includes, but is not limited to:

   a) Rebranding the Software and offering it as your own product.
   b) Using the Software as the foundation of a competing disaster
      prevention information platform or alert service.
   c) Offering a hosted or managed version of the Software to third
      parties as a standalone product.

4. NO COMMERCIAL USE

   You may not use the Software, or any Modified Version of it, for Commercial
   Use. This includes, but is not limited to:

   a) Selling the Software or Modified Versions, in whole or in part.
   b) Offering the Software or Modified Versions as a paid product or service.
   c) Incorporating the Software or Modified Versions into a commercial product.
   d) Using the Software or Modified Versions to provide a service for which
      you charge a fee.

   If you wish to use the Software for commercial purposes, you must obtain
   a separate written license from ExpTech Studio.

5. PATENT RIGHTS

   Each contributor grants you a non-exclusive, worldwide, royalty-free license
   under their essential patent claims to make, use, and distribute the Software
   in accordance with this License. If you initiate patent litigation against
   any party claiming that the Software infringes a patent, your rights under
   this License terminate immediately.

6. TERMINATION

   Your rights under this License terminate automatically if you violate any of
   its terms. Upon termination, you must cease all distribution of the Software
   and any Modified Versions.

   If you cure the violation within 30 days of becoming aware of it, your rights
   may be reinstated permanently, provided this is the first time you have
   violated this License.

7. NO WARRANTY

   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. EXPTECH STUDIO DOES
   NOT WARRANT THAT THE SOFTWARE WILL BE ERROR-FREE OR THAT ANY ERRORS WILL BE
   CORRECTED.

8. LIMITATION OF LIABILITY

   IN NO EVENT SHALL EXPTECH STUDIO OR ANY CONTRIBUTOR BE LIABLE FOR ANY DIRECT,
   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ARISING
   OUT OF OR IN CONNECTION WITH THE USE OR INABILITY TO USE THE SOFTWARE, EVEN
   IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

                        END OF TERMS AND CONDITIONS


================================================
FILE: README.md
================================================
[![splash](/.github/assets/splash.png)](#下載)

<div align="center">
<a href="https://github.com/ExpTechTW/DPIP-Pocket/tree/main"><img alt="status" src="https://img.shields.io/badge/status-stable-blue.svg"></a>
<a href="https://github.com/ExpTechTW/DPIP-Pocket/releases/latest"><img alt="Release" src="https://img.shields.io/github/v/release/exptechtw/dpip-pocket"></a>
<a href="https://github.com/ExpTechTW/DPIP-Pocket/actions/workflows/android.yml"><img alt="Android Build Status" src="https://github.com/ExpTechTW/DPIP-Pocket/actions/workflows/android.yml/badge.svg"></a>
<a href="https://github.com/ExpTechTW/DPIP-Pocket/actions/workflows/ios.yml"><img alt="iOS Build Status" src="https://github.com/ExpTechTW/DPIP-Pocket/actions/workflows/ios.yml/badge.svg"></a>
<a title="Crowdin" target="_blank" href="https://crowdin.com/project/dpip"><img alt="Crowdin Localization" src="https://badges.crowdin.net/dpip/localized.svg"></a>
<a href="https://good-labs.github.io/greater-good-affirmation"><img alt="Greater Good" src="https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg"></a>
<img alt="GitHub License" src="https://img.shields.io/github/license/exptechtw/dpip-pocket">
<a href="https://exptech.dev"><img alt="website" src="https://img.shields.io/badge/website-exptech.dev-purple.svg"></a>
<a href="https://discord.gg/5dbHqV8ees"><img alt="TREM Discord"  src="https://img.shields.io/discord/926545182407688273?color=%235865F2&logo=discord&logoColor=white"></a>
</div>

DPIP(Disaster Prevention Information Platform)是由臺灣本土團隊開發的行動應用程式,整合了 TREM-Net(臺灣即時地震觀測網)的強震即時警報與地震資訊,以及中央氣象署的資料,為使用者提供一個整合、便捷的防災資訊平台。

### 強震即時警報

強震即時警報(Earthquake Early Warning, EEW)系統透過部署於各地的地震波觀測站,在地震發生時即時回傳地震波數據至伺服器進行分析,並產生地震速報。這項技術能為使用者爭取數秒至數十秒的寶貴時間,讓民眾能及時採取防災應變及避難措施。

### TREM-Net 臺灣即時地震觀測網

TREM-Net 是一個自 2022 年 6 月起開始在全臺各地部署的觀測網專案,由兩個子系統組成:**SE-Net**(強震觀測網,使用加速度儀)及 **MS-Net**(微震觀測網,使用速度儀),共同記錄地震發生時的完整數據。

## 合作夥伴

我們很榮幸能與以下優秀的企業合作,共同推動防災資訊的普及:

<h3>
  <a href="https://www.geoscience.com.tw/">
    巨科資訊有限公司
    <img src="https://github.com/user-attachments/assets/34875ff1-ace2-4e92-ac32-d98e5717b62e" alt="巨科資訊有限公司" width="auto" height="28" align="right">
  </a>
</h3>

巨科資訊有限公司是一家專注於地理資訊系統的專業公司,為我們的開發工作提供了寶貴的設備支援。他們的專業知識和資源對專案的發展起到了重要作用。

<h3>
  <a href="https://www.twds.com.tw/">
    台灣數位串流有限公司
    <img src="https://branding.twds.com.tw/assets/twds_text_standard.svg" alt="台灣數位串流有限公司" width="auto" height="28" align="right">
  </a>
</h3>

台灣數位串流有限公司為我們提供了強大的雲端運算資源和網路頻寬支援,同時也提供了寶貴的技術諮詢。他們的支援確保了我們的服務能夠穩定且高效地運行。

我們由衷感謝這些合作夥伴對開源社群的支持與貢獻。正是有了他們的協助,我們才能持續為使用者提供更好的服務。

## 資料來源

本應用程式的資料來源包括:

### 官方來源

- [交通部中央氣象署](https://www.cwa.gov.tw/)
- [國家災害防救科技中心](https://www.ncdr.nat.gov.tw/)

### 非官方來源

- TREM-Net by [ExpTech Studio](https://exptech.dev/)

## 下載

你可以在 [Play Store](https://play.google.com/store/apps/details?id=com.exptech.dpip) 和 [App Store](https://apps.apple.com/tw/app/dpip-%E7%81%BD%E5%AE%B3%E5%A4%A9%E6%B0%A3%E8%88%87%E5%9C%B0%E9%9C%87%E9%80%9F%E5%A0%B1/id6468026362) 上取得 DPIP。

你也可以從我們的 [Release 頁面](https://github.com/ExpTechTW/DPIP-Pocket/releases/latest)上取得 DPIP 的安裝包進行手動安裝。

## 翻譯

DPIP 支援多語言,我們正在 Crowdin 平台上進行翻譯。如果你願意協助我們將這個專案翻譯成其他語言,歡迎加入我們的 Crowdin 翻譯社群。

你可以[點擊這裡前往我們的 Crowdin 專案頁面](https://crowdin.com/project/dpip),選擇你熟悉的語言並開始翻譯。每一份貢獻都將幫助我們將防災資訊傳遞給更多的人!

如果你沒有看到你熟悉的語言,歡迎在我們的 [Issue](https://github.com/ExpTechTW/DPIP-Pocket/issues) 中提出新的語言請求,我們會盡快為你開啟。

## 從原始碼建置

### 環境需求

在開始建置之前,請確保你的開發環境已安裝並配置以下軟體:

- **Flutter SDK**: [安裝指引](https://docs.flutter.dev/get-started/install)
- **Dart SDK**: 已包含在 Flutter SDK 中
- [**Android Studio**](https://developer.android.com/studio?hl=ja) 或 [**Xcode**](https://developer.apple.com/jp/xcode/)(iOS 開發用)
  - 也可以使用 [VSCode](https://code.visualstudio.com/) 或其他你喜歡的 IDE
- _\*可選\*_ [**Git**](https://git-scm.com/): 用於複製存儲庫

```console
Flutter 3.35.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 20f8274939 • 2025-08-14 10:53:09 -0700
Engine • hash 6cd51c08a88e7bbe848a762c20ad3ecb8b063c0e • 2025-08-13 23:35:25.000Z
Tools • Dart 3.9.0 • DevTools 2.48.0
```

### 建置步驟

1. 取得原始碼

   - **下載壓縮檔**

     你可以直接在 Github 上下載存儲庫壓縮檔

     ![Download Source ZIP](/.github/assets/download_source.png)

   - **使用 Git**

     使用以下指令複製專案:

     ```bash
     git clone https://github.com/ExpTechTW/DPIP-Pocket.git
     ```

2. 進入專案目錄

   ```bash
   cd DPIP
   ```

3. 安裝相依套件

   ```bash
   flutter pub get --no-example
   ```

4. 產生建置檔案

   ```bash
   dart run build_runner build
   ```

5. 建置應用程式

   - **Android APK**

     ```bash
     flutter build apk --release
     ```

   - **iOS**

     ```bash
     flutter build ios --release
     ```

## 如何貢獻

我們歡迎各種形式的貢獻!你可以透過以下方式參與專案:

- 回報問題或提出新功能建議:請在 [Issues](https://github.com/ExpTechTW/DPIP-Pocket/issues) 中提出
- 提交程式碼:請 [Fork](https://github.com/ExpTechTW/DPIP-Pocket/fork) 此倉庫,建立新分支進行修改,然後提交 [Pull Request](https://github.com/ExpTechTW/TREM/pulls)
- 改進文件:協助我們改進現有文件或撰寫新文件

衷心感謝所有讓 DPIP 成為可能的貢獻者:

<a href="https://github.com/exptechtw/DPIP-Pocket/graphs/contributors"><img src="https://contrib.rocks/image?repo=exptechtw/DPIP-Pocket" ></a>

## 開放原始碼授權

詳細的授權資訊請參閱 [LICENSE](LICENSE) 檔案

## Star History

<a href="https://star-history.com/#ExpTechTW/DPIP-Pocket&Date">
 <picture>
   <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=ExpTechTW/DPIP-Pocket&type=Date&theme=dark" />
   <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=ExpTechTW/DPIP-Pocket&type=Date" />
   <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=ExpTechTW/DPIP-Pocket&type=Date" />
 </picture>
</a>


================================================
FILE: analysis_options.yaml
================================================
include: package:lint/strict.yaml

analyzer:
  errors:
    todo: info
  exclude:
    - "**.freezed.dart"
    - "**.g.dart"

linter:
  rules:
    flutter_style_todos: error
    prefer_single_quotes: warning
    avoid_annotating_with_dynamic: error
    public_member_api_docs: warning

formatter:
  page_width: 100
  trailing_commas: preserve


================================================
FILE: android/.gitignore
================================================
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java

# Remember to never publicly share your keystore.
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
key.properties
**/*.keystore
**/*.jks


================================================
FILE: android/app/build.gradle
================================================
plugins {
    id "com.android.application"
    id "org.jetbrains.kotlin.android"
    id "dev.flutter.flutter-gradle-plugin"
    id "com.google.gms.google-services"
    id "com.google.firebase.crashlytics"
}

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
        localProperties.load(reader)
    }
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
    flutterVersionName = '1.0.0'
}

def versionParts = flutterVersionName.split("\\.")
def majorVersion = versionParts[0].padLeft(2, '0')
def minorVersion = versionParts[1].padLeft(2, '0')
def patchVersion = versionParts[2].padLeft(2, '0')

def flutterVersionCode = (majorVersion + minorVersion + patchVersion).toInteger()

android {
    namespace 'com.exptech.dpip'
    compileSdk flutter.compileSdkVersion
    ndkVersion '28.2.13676358'

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
        coreLibraryDesugaringEnabled true
    }

    kotlinOptions {
        jvmTarget = '17'
    }

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }

    defaultConfig {
        applicationId 'com.exptech.dpip'
        minSdkVersion 26
        targetSdkVersion 36
        versionCode 300201001
        versionName flutterVersionName
        multiDexEnabled true
        resConfigs "en", "ko", "zh-rTW", "ja", "zh-rCN"
    }

    signingConfigs {
        release {
            def keystorePropsFile = rootProject.file('key.properties')
            if (keystorePropsFile.exists()) {
                def keystoreProps = new Properties()
                keystoreProps.load(new FileInputStream(keystorePropsFile))

                keyAlias keystoreProps['keyAlias']
                keyPassword keystoreProps['keyPassword']
                storeFile file(keystoreProps['storeFile'])
                storePassword keystoreProps['storePassword']
            } else {
                println('key.properties not found')
            }
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled true
            shrinkResources false
            multiDexEnabled true
        }
        debug {
            signingConfig signingConfigs.debug
            minifyEnabled false
        }
    }
}

flutter {
    source '../..'
}

dependencies {
    implementation 'androidx.core:core-splashscreen:1.2.0'
    implementation 'com.google.android.material:material:1.13.0'
    implementation 'com.google.android.gms:play-services-location:21.3.0'
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5'
}


================================================
FILE: android/app/google-services.json
================================================
{
  "project_info": {
    "project_number": "141632948166",
    "project_id": "dpip-a658c",
    "storage_bucket": "dpip-a658c.appspot.com"
  },
  "client": [
    {
      "client_info": {
        "mobilesdk_app_id": "1:141632948166:android:3cb29f28a0a04c589e14c7",
        "android_client_info": {
          "package_name": "com.exptech.dpip"
        }
      },
      "oauth_client": [],
      "api_key": [
        {
          "current_key": "AIzaSyDMgbvC0NWLL2CfRChypf3yy7OWxEO-I0w"
        }
      ],
      "services": {
        "appinvite_service": {
          "other_platform_oauth_client": []
        }
      }
    }
  ],
  "configuration_version": "1"
}

================================================
FILE: android/app/src/debug/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- The INTERNET permission is required for development. Specifically,
         the Flutter tool needs it to communicate with the running application
         to allow setting breakpoints, to provide hot reload, etc.
    -->
    <uses-permission android:name="android.permission.INTERNET"/>
</manifest>


================================================
FILE: android/app/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/>

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
    <uses-permission android:name="android.permission.USE_EXACT_ALARM"/>

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>

    <uses-permission android:name="android.permission.VIBRATE"/>

    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>

    <uses-sdk tools:overrideLibrary="com.ytn.autostarter" />

    <application
            android:label="@string/app_name"
            android:name="${applicationName}"
            android:icon="@mipmap/ic_launcher"
            android:theme="@style/LaunchTheme"
            android:enableOnBackInvokedCallback="true"
            android:allowBackup="false"
            android:fullBackupContent="false"
            tools:replace="android:allowBackup,android:fullBackupContent">
        <activity
                android:name=".MainActivity"
                android:exported="true"
                android:largeHeap="true"
                android:launchMode="singleTop"
                android:theme="@style/NormalTheme"
                android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
                android:hardwareAccelerated="true"
                android:windowSoftInputMode="adjustResize"
                android:showWhenLocked="true"
                android:turnScreenOn="true">
            <meta-data
                    android:name="io.flutter.embedding.android.NormalTheme"
                    android:resource="@style/NormalTheme"/>
            <meta-data
                    android:name="android.app.shortcuts"
                    android:resource="@xml/shortcuts" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <meta-data
                android:name="flutterEmbedding"
                android:value="2"/>
        <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_stat_name"/>
        <meta-data android:name="com.exptech.dpip.default_notification_icon" android:resource="@drawable/ic_stat_name"/>

        <service
                android:name=".LocationForegroundService"
                android:enabled="true"
                android:exported="false"
                android:foregroundServiceType="location"/>
        <!-- AlarmManager service -->
        <service
                android:name="dev.fluttercommunity.plus.androidalarmmanager.AlarmService"
                android:permission="android.permission.BIND_JOB_SERVICE"
                android:exported="false"/>
        <receiver
                android:name="dev.fluttercommunity.plus.androidalarmmanager.AlarmBroadcastReceiver"
                android:exported="false"/>
        <receiver
                android:name="dev.fluttercommunity.plus.androidalarmmanager.RebootBroadcastReceiver"
                android:enabled="true"
                android:exported="false">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
    </application>
    <queries>
        <intent>
            <action android:name="android.intent.action.PROCESS_TEXT"/>
            <data android:mimeType="text/plain"/>
        </intent>
    </queries>
</manifest>


================================================
FILE: android/app/src/main/kotlin/com/exptech/dpip/MainActivity.kt
================================================
package com.exptech.dpip

import android.content.Intent
import android.os.Bundle
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel

class MainActivity : FlutterActivity() {

    private val CHANNEL = "com.exptech.dpip/shortcut"
    private var initialShortcut: String? = null

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)

        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
            .setMethodCallHandler { call, result ->
                when (call.method) {
                    "getInitialShortcut" -> {
                        result.success(initialShortcut)
                        initialShortcut = null
                    }
                    else -> result.notImplemented()
                }
            }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        handleIntent(intent)
    }

    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)
        setIntent(intent)
        handleIntent(intent)
    }

    private fun handleIntent(intent: Intent?) {
        intent ?: return
        val shortcutId = intent.getStringExtra("android.intent.extra.shortcut.ID")
            ?: intent.getStringExtra("shortcut")
        if (!shortcutId.isNullOrEmpty()) {
            initialShortcut = shortcutId
        }
    }
}


================================================
FILE: android/app/src/main/res/drawable/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/white" />

    <!-- You can insert your own image assets here -->
    <!-- <item>
        <bitmap
            android:gravity="center"
            android:src="@mipmap/launch_image" />
    </item> -->
</layer-list>

================================================
FILE: android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@mipmap/ic_launcher_background"/>
    <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
    <monochrome android:drawable="@mipmap/ic_launcher_monochrome"/>
</adaptive-icon>

================================================
FILE: android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@mipmap/ic_launcher_background"/>
    <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
    <monochrome android:drawable="@mipmap/ic_launcher_monochrome"/>
</adaptive-icon>

================================================
FILE: android/app/src/main/res/values/colors.xml
================================================
<resources>
    <color name="splash_background">#FFFFFF</color>
</resources>

================================================
FILE: android/app/src/main/res/values/strings.xml
================================================
<resources>
    <string name="app_name">DPIP</string>
    <string name="shortcut_monitor_short">Monitor</string>
    <string name="shortcut_monitor_long">Open Earthquake Monitor</string>
</resources>

================================================
FILE: android/app/src/main/res/values/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
    <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <item name="android:windowBackground">@drawable/launch_background</item>
    </style>
    <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <item name="android:windowBackground">?android:colorBackground</item>
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
    </style>
</resources>


================================================
FILE: android/app/src/main/res/values-ja/strings.xml
================================================
<resources>
    <string name="app_name">DPIP防災</string>
    <string name="shortcut_monitor_short">強震モニター</string>
    <string name="shortcut_monitor_long">強震モニターを開く</string>
</resources>

================================================
FILE: android/app/src/main/res/values-ko/strings.xml
================================================
<resources>
    <string name="app_name">DPIP 재해</string>
    <string name="shortcut_monitor_short">강진 모니터</string>
    <string name="shortcut_monitor_long">강진 모니터 열기</string>
</resources>

================================================
FILE: android/app/src/main/res/values-night/colors.xml
================================================
<resources>
    <color name="splash_background">#000000</color>
</resources>

================================================
FILE: android/app/src/main/res/values-night/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <item name="android:windowBackground">@drawable/launch_background</item>
    </style>
    <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <item name="android:windowBackground">?android:colorBackground</item>
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
    </style>
</resources>


================================================
FILE: android/app/src/main/res/values-night-v31/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
    <style name="LaunchTheme" parent="Theme.SplashScreen">
        <item name="android:windowSplashScreenBackground">@color/splash_background</item>
        <item name="android:windowSplashScreenAnimatedIcon">@mipmap/ic_launcher_round</item>
        <item name="android:windowSplashScreenIconBackgroundColor">@color/splash_background</item>
    </style>
    <style name="NormalTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <item name="android:windowBackground">?android:colorBackground</item>
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
    </style>
</resources>


================================================
FILE: android/app/src/main/res/values-sw600dp/styles.xml
================================================
<resources>
    <style name="NormalTheme" parent="Theme.Material3.DayNight.NoActionBar">
        <item name="android:screenOrientation">unspecified</item>
    </style>
</resources>


================================================
FILE: android/app/src/main/res/values-v31/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
    <style name="LaunchTheme" parent="Theme.SplashScreen">
        <item name="android:windowSplashScreenBackground">@color/splash_background</item>
        <item name="android:windowSplashScreenAnimatedIcon">@mipmap/ic_launcher_round</item>
        <item name="android:windowSplashScreenIconBackgroundColor">@color/splash_background</item>
    </style>
    <style name="NormalTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <item name="android:windowBackground">?android:colorBackground</item>
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
    </style>
</resources>


================================================
FILE: android/app/src/main/res/values-zh/strings.xml
================================================
<resources>
    <string name="app_name">DPIP 防災</string>
    <string name="shortcut_monitor_short">強震監視器</string>
    <string name="shortcut_monitor_long">打開強震監視器</string>
</resources>

================================================
FILE: android/app/src/main/res/values-zh-rTW/strings.xml
================================================
<resources>
    <string name="app_name">DPIP 防災</string>
    <string name="shortcut_monitor_short">強震監視器</string>
    <string name="shortcut_monitor_long">打開強震監視器</string>
</resources>

================================================
FILE: android/app/src/main/res/xml/shortcuts.xml
================================================
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <shortcut
            android:shortcutId="monitor"
            android:enabled="true"
            android:icon="@mipmap/ic_launcher"
            android:shortcutShortLabel="@string/shortcut_monitor_short"
            android:shortcutLongLabel="@string/shortcut_monitor_long">
        <intent
                android:action="android.intent.action.VIEW"
                android:targetPackage="com.exptech.dpip"
                android:targetClass="com.exptech.dpip.MainActivity" >
        <extra android:name="shortcut" android:value="monitor" />
        </intent>
    </shortcut>
</shortcuts>


================================================
FILE: android/app/src/profile/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools">
    android:installLocation="internalOnly"
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.VIBRATE"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:minSdkVersion="34" android:name="android.permission.USE_EXACT_ALARM" />

    <application
            tools:replace="android:label"
            android:label="DPIP"
            android:name="${applicationName}"
            android:icon="@mipmap/ic_launcher">
        <activity
                android:name=".MainActivity"
                android:exported="true"
                android:launchMode="singleTop"
                android:theme="@style/LaunchTheme"
                android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
                android:hardwareAccelerated="true"
                android:windowSoftInputMode="adjustResize"
                android:showWhenLocked="true"
                android:turnScreenOn="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <meta-data
                android:name="flutterEmbedding"
                android:value="2"/>
    </application>
</manifest>


================================================
FILE: android/build.gradle
================================================
allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.buildDir = '../build'

subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

tasks.register("clean", Delete) {
    delete rootProject.buildDir
}

================================================
FILE: android/gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip


================================================
FILE: android/gradle.properties
================================================
org.gradle.jvmargs=-Xmx4G
android.useAndroidX=true
android.enableJetifier=true
kotlin.jvm.target.validation.mode = IGNORE


================================================
FILE: android/settings.gradle
================================================
pluginManagement {
    def flutterSdkPath = {
        def properties = new Properties()
        file("local.properties").withInputStream { properties.load(it) }
        def flutterSdkPath = properties.getProperty("flutter.sdk")
        assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
        return flutterSdkPath
    }
    settings.ext.flutterSdkPath = flutterSdkPath()

    includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")

    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}

plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
    id 'com.android.application' version '8.13.2' apply false
    id 'org.jetbrains.kotlin.android' version '2.2.10' apply false
    id "com.google.gms.google-services" version "4.4.2" apply false
    id "com.google.firebase.crashlytics" version "3.0.2" apply false
}

include ":app"


================================================
FILE: assets/box.json
================================================
{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.38,25.1],[121.38,25.46],[120.89,25.46],[120.89,25.1],[121.38,25.1]]]},"properties":{"ID":0}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.86,25.1],[121.86,25.46],[121.38,25.46],[121.38,25.1],[121.86,25.1]]]},"properties":{"ID":1}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[122.35,25.1],[122.35,25.46],[121.86,25.46],[121.86,25.1],[122.35,25.1]]]},"properties":{"ID":2}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.38,24.74],[121.38,25.1],[120.89,25.1],[120.89,24.74],[121.38,24.74]]]},"properties":{"ID":3}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.86,24.74],[121.86,25.1],[121.38,25.1],[121.38,24.74],[121.86,24.74]]]},"properties":{"ID":4}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[122.35,24.74],[122.35,25.1],[121.86,25.1],[121.86,24.74],[122.35,24.74]]]},"properties":{"ID":5}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[120.89,24.38],[120.89,24.74],[120.4,24.74],[120.4,24.38],[120.89,24.38]]]},"properties":{"ID":6}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.38,24.38],[121.38,24.74],[120.89,24.74],[120.89,24.38],[121.38,24.38]]]},"properties":{"ID":7}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.86,24.38],[121.86,24.74],[121.38,24.74],[121.38,24.38],[121.86,24.38]]]},"properties":{"ID":8}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[122.35,24.38],[122.35,24.74],[121.86,24.74],[121.86,24.38],[122.35,24.38]]]},"properties":{"ID":9}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[120.4,24.02],[120.4,24.38],[119.92,24.38],[119.92,24.02],[120.4,24.02]]]},"properties":{"ID":10}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[120.89,24.02],[120.89,24.38],[120.4,24.38],[120.4,24.02],[120.89,24.02]]]},"properties":{"ID":11}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.38,24.02],[121.38,24.38],[120.89,24.38],[120.89,24.02],[121.38,24.02]]]},"properties":{"ID":12}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.86,24.02],[121.86,24.38],[121.38,24.38],[121.38,24.02],[121.86,24.02]]]},"properties":{"ID":13}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[119.92,23.66],[119.92,24.02],[119.43,24.02],[119.43,23.66],[119.92,23.66]]]},"properties":{"ID":14}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[120.4,23.66],[120.4,24.02],[119.92,24.02],[119.92,23.66],[120.4,23.66]]]},"properties":{"ID":15}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[120.89,23.66],[120.89,24.02],[120.4,24.02],[120.4,23.66],[120.89,23.66]]]},"properties":{"ID":16}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.38,23.66],[121.38,24.02],[120.89,24.02],[120.89,23.66],[121.38,23.66]]]},"properties":{"ID":17}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.86,23.66],[121.86,24.02],[121.38,24.02],[121.38,23.66],[121.86,23.66]]]},"properties":{"ID":18}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[119.43,23.3],[119.43,23.66],[118.95,23.66],[118.95,23.3],[119.43,23.3]]]},"properties":{"ID":19}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[119.92,23.3],[119.92,23.66],[119.43,23.66],[119.43,23.3],[119.92,23.3]]]},"properties":{"ID":20}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[120.4,23.3],[120.4,23.66],[119.92,23.66],[119.92,23.3],[120.4,23.3]]]},"properties":{"ID":21}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[120.89,23.3],[120.89,23.66],[120.4,23.66],[120.4,23.3],[120.89,23.3]]]},"properties":{"ID":22}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.38,23.3],[121.38,23.66],[120.89,23.66],[120.89,23.3],[121.38,23.3]]]},"properties":{"ID":23}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.86,23.3],[121.86,23.66],[121.38,23.66],[121.38,23.3],[121.86,23.3]]]},"properties":{"ID":24}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[119.43,22.94],[119.43,23.3],[118.95,23.3],[118.95,22.94],[119.43,22.94]]]},"properties":{"ID":25}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[119.92,22.94],[119.92,23.3],[119.43,23.3],[119.43,22.94],[119.92,22.94]]]},"properties":{"ID":26}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[120.4,22.94],[120.4,23.3],[119.92,23.3],[119.92,22.94],[120.4,22.94]]]},"properties":{"ID":27}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[120.89,22.94],[120.89,23.3],[120.4,23.3],[120.4,22.94],[120.89,22.94]]]},"properties":{"ID":28}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.38,22.94],[121.38,23.3],[120.89,23.3],[120.89,22.94],[121.38,22.94]]]},"properties":{"ID":29}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.86,22.94],[121.86,23.3],[121.38,23.3],[121.38,22.94],[121.86,22.94]]]},"properties":{"ID":30}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[120.4,22.58],[120.4,22.94],[119.92,22.94],[119.92,22.58],[120.4,22.58]]]},"properties":{"ID":31}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[120.89,22.58],[120.89,22.94],[120.4,22.94],[120.4,22.58],[120.89,22.58]]]},"properties":{"ID":32}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.38,22.58],[121.38,22.94],[120.89,22.94],[120.89,22.58],[121.38,22.58]]]},"properties":{"ID":33}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.86,22.58],[121.86,22.94],[121.38,22.94],[121.38,22.58],[121.86,22.58]]]},"properties":{"ID":34}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[120.4,22.22],[120.4,22.58],[119.92,22.58],[119.92,22.22],[120.4,22.22]]]},"properties":{"ID":35}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[120.89,22.22],[120.89,22.58],[120.4,22.58],[120.4,22.22],[120.89,22.22]]]},"properties":{"ID":36}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.38,22.22],[121.38,22.58],[120.89,22.58],[120.89,22.22],[121.38,22.22]]]},"properties":{"ID":37}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[120.89,21.86],[120.89,22.22],[120.4,22.22],[120.4,21.86],[120.89,21.86]]]},"properties":{"ID":38}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.38,21.86],[121.38,22.22],[120.89,22.22],[120.89,21.86],[121.38,21.86]]]},"properties":{"ID":39}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.86,21.86],[121.86,22.22],[121.38,22.22],[121.38,21.86],[121.86,21.86]]]},"properties":{"ID":40}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[118.46,24.38],[118.46,24.74],[117.97,24.74],[117.97,24.38],[118.46,24.38]]]},"properties":{"ID":41}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[118.95,24.38],[118.95,24.74],[118.46,24.74],[118.46,24.38],[118.95,24.38]]]},"properties":{"ID":42}}]}

================================================
FILE: assets/notify_test.json
================================================
{"eew_alert-important-v2":{"title":"🚨 《緊急地震速報 (氣象署發布) 》","body":"花蓮縣壽豐鄉發生地震 強烈搖晃警戒\n〈預估強烈搖晃地區〉\n花蓮 南投 臺東 宜蘭"},"eew_alert-general-v2":{"title":"🚨 《緊急地震速報 (氣象署發布) 》","body":"花蓮縣壽豐鄉發生地震 強烈搖晃警戒\n〈預估強烈搖晃地區〉\n花蓮 南投 臺東 宜蘭"},"eew_alert-silent-v2":{"title":"🚨 《緊急地震速報 (氣象署發布) 》","body":"花蓮縣壽豐鄉發生地震 強烈搖晃警戒\n〈預估強烈搖晃地區〉\n花蓮 南投 臺東 宜蘭"},"eew-important-v2":{"title":"⚠️ 地震速報","body":"10:15左右,花蓮縣壽豐鄉發生地震。震源深度10公里,地震規模M6.1,最大預估震度4。"},"eew-general-v2":{"title":"⚠️ 地震速報","body":"10:15左右,花蓮縣壽豐鄉發生地震。震源深度10公里,地震規模M6.1,最大預估震度4。"},"eew-silence-v2":{"title":"⚠️ 地震速報","body":"10:15左右,花蓮縣壽豐鄉發生地震。震源深度10公里,地震規模M6.1,最大預估震度4。"},"int_report-general-v2":{"title":"📨 震度速報 [07:36]","body":"[震度 5弱] 花蓮縣"},"int_report-silence-v2":{"title":"📨 震度速報 [07:36]","body":"[震度 5弱] 花蓮縣"},"eq-v2":{"title":"📡 強震監視器","body":"臺南市歸仁區 偵測到晃動"},"report-general-v2":{"title":"🔔 地震報告 [小區域有感地震]","body":"00:36左右,花蓮縣近海發生地震。震源深度23.8公里,地震規模M4.0,花蓮縣觀測到最大震度2。"},"report-silence-v2":{"title":"🔔 地震報告 [小區域有感地震]","body":"00:36左右,花蓮縣近海發生地震。震源深度23.8公里,地震規模M4.0,花蓮縣觀測到最大震度2。"},"thunderstorm-important-v2":{"title":"⛈️ 山區暴雨","body":"您所在區域附近有暴雨發生的機率,留意溪水暴漲並儘速遠離溪流,持續至8/4 16:34"},"thunderstorm-general-v2":{"title":"⛈️ 雷雨即時訊息","body":"您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至08/26 17:30"},"weather_major-important-v2":{"title":"📊 臺南市歸仁區 天氣特報","body":"[發布]超大豪雨特報"},"weather_minor-general-v2":{"title":"📊 臺南市歸仁區 天氣特報","body":"[發布]大雨特報\n對流雲系發展旺盛,易有短延時強降雨,新北市已有豪雨發生,今(7日)晚至明(8日)晨基隆北海岸、彰化、雲林、南投、東半部地區及大臺北山區有局部大雨發生的機率,請注意雷擊及強陣風,山區慎防坍方、落石及溪水暴漲。"},"evacuation_major-important-v2":{"title":"🌧️ 防災資訊(短時極端降雨紀錄)","body":"臺南市永康區(CAN040 國一N323K) 1 小時累積雨量達到 91.5 mm/hr,請注意自身安全。"},"evacuation_minor-general-v2":{"title":"⚠️ 防災資訊(河川水位-注意)","body":"北寮橋 (水位 73.5m) 已達二級警戒,提高警覺,並密切注意水情變化。"},"tsunami-important-v2":{"title":"🌊 海嘯警報發布","body":"海嘯警報已發布\n請儘速前往安全區域避難"},"tsunami-general-v2":{"title":"🌊 海嘯警報發布","body":"海嘯警報已發布\n請儘速前往安全區域避難"},"tsunami-silent-v2":{"title":"🌊 太平洋海嘯消息","body":"頃獲太平洋海嘯警報中心通報,2024年08月18日03時10分(臺灣時間),俄羅斯 堪察加半島東部外海發生規模7﹒4地震,震央位於東經160﹒10度、北緯52﹒70度。該中心研判可能在太平洋地區引發海嘯威脅,氣象署將嚴密監視海嘯的後續影響,隨時提供最新資訊。"},"announcement-general-v2":{"title":"📢 公告","body":"這是一則測試公告。"}}

================================================
FILE: assets/translations/en.po
================================================
msgid ""
msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: dpip\n"
"X-Crowdin-Project-ID: 696803\n"
"X-Crowdin-Language: en\n"
"X-Crowdin-File: /main/.crowdin/strings.pot\n"
"X-Crowdin-File-ID: 26\n"
"Project-Id-Version: dpip\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Language-Team: English\n"
"Language: en_US\n"
"PO-Revision-Date: 2026-04-01 07:16\n"

#: ./lib/core/service.dart:291
msgid "正在更新位置"
msgstr "Updating location…"

#: ./lib/core/service.dart:292
msgid "取得 GPS 位置中..."
msgstr "Getting GPS location…"

#: ./lib/app/settings/notify/page.dart:51
msgid "接收全部"
msgstr "Receive All"

#: ./lib/app/settings/notify/page.dart:50
msgid "關閉"
msgstr "Off"

#: ./lib/app/settings/notify/_widgets/eew_notify_section.dart:51
msgid "接收類別"
msgstr "Category"

#: ./lib/app/settings/notify/page.dart:35
msgid "所在地震度1以上"
msgstr "Intensity 1 or higher at current location"

#: ./lib/app/settings/notify/page.dart:46
msgid "海嘯消息、海嘯警報"
msgstr "Tsunami Advisory, Tsunami Warning"

#: ./lib/app/settings/notify/page.dart:45
msgid "只接收海嘯警報"
msgstr "Tsunami Warning only"

#: ./lib/app/settings/notify/page.dart:41
msgid "接收所在地"
msgstr "Receive for current location"

#: ./lib/app/settings/notify/page.dart:27
msgid "所在地震度4以上"
msgstr "Intensity 4 or higher at current location"

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:28
msgid "音效測試"
msgstr "Sound Test"

#: ./lib/route/announcement/announcement.dart:81
msgid "公告"
msgstr "Announcements"

#: ./lib/app/settings/notify/(5.basic)/announcement/page.dart:32
msgid "發送公告時"
msgstr "When sending an announcement"

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:46
msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求"
msgstr "The sound test is a local notification performed on the device, used only to confirm whether sound can be played properly when receiving alerts. This test does not send any requests to any server"

#: ./lib/app/settings/notify/page.dart:82
msgid "伺服器排隊中,請稍候…"
msgstr "Queuing, Please Wait..."

#: ./lib/app/welcome/4-permissions/page.dart:166
msgid "通知"
msgstr "Notifications"

#: ./lib/app/settings/page.dart:182
msgid "推播通知設定與通知音效測試"
msgstr "Push notification settings and notification sound test"

#: ./lib/app/home/_widgets/location_not_set_card.dart:33
msgid "尚未設定所在地"
msgstr "Location not set"

#: ./lib/app/settings/notify/page.dart:201
msgid "請先設定所在地來使用通知功能"
msgstr "Please set your current location to enable notifications"

#: ./lib/app/settings/notify/page.dart:211
msgid "設定所在地"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:209
msgid "地震速報"
msgstr "Earthquake Warning"

#: ./lib/app/settings/notify/page.dart:232
msgid "緊急地震速報"
msgstr "Earthquake Early Warning"

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:113
msgid "地震"
msgstr "Earthquake"

#: ./lib/app/map/_lib/managers/monitor.dart:1579
msgid "強震監視器"
msgstr "Earthquake Monitor"

#: ./lib/app/map/_lib/managers/report.dart:1302
msgid "地震報告"
msgstr "Reports"

#: ./lib/app/settings/notify/page.dart:290
msgid "震度速報"
msgstr "Earthquake Intensity Report"

#: ./lib/app/settings/notify/page.dart:304
msgid "天氣"
msgstr "Weather"

#: ./lib/app/home/_widgets/thunderstorm_card.dart:63
msgid "雷雨即時訊息"
msgstr "Thunderstorm Advisory"

#: ./lib/app/settings/notify/page.dart:334
msgid "天氣警特報"
msgstr "Weather Advisory"

#: ./lib/app/settings/notify/page.dart:354
msgid "防災資訊"
msgstr "Disaster Prevention Advisory"

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:129
msgid "海嘯"
msgstr "Tsunami"

#: ./lib/app/settings/notify/page.dart:378
msgid "海嘯資訊"
msgstr "Tsunami Advisory"

#: ./lib/app/settings/notify/page.dart:390
msgid "其他"
msgstr "Other"

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31
msgid "重大"
msgstr "Severe"

#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:31
msgid "海嘯警報發布時"
msgstr "When a tsunami warning is issued"

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:37
msgid "一般"
msgstr "General"

#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:37
msgid "海嘯消息發布時"
msgstr "When a tsunami advisory is issued"

#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:41
msgid "太平洋海嘯消息(無聲通知)"
msgstr "Pacific Ocean Tsunami Information (Silent Notification)"

#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:42
msgid "太平洋海嘯消息發布時"
msgstr "When the Pacific Ocean tsunami advisory is issued"

#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:30
msgid "強震監視器(一般)"
msgstr "Earthquake Monitor (General)"

#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:31
msgid "偵測到晃動"
msgstr "Shaking detected"

#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:30
msgid "震度速報(一般)"
msgstr "Intensity Report"

#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:31
msgid "所在地(鄉鎮)實測震度 3 以上"
msgstr "Local (City/Town/District) measured intensity is greater than 3"

#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36
msgid "震度速報(無聲通知)"
msgstr "Intensity Report (Silent)"

#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:37
msgid "所在地(鄉鎮)實測震度 1 以上"
msgstr "Local (City/Town/District) measured intensity is greater than 1"

#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:30
msgid "地震報告(一般)"
msgstr "Earthquake Report (General)"

#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:31
msgid "所在地(縣市)實測震度 3 以上"
msgstr "Local (Municipality/County) measured intensity is greater than 3"

#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:36
msgid "地震報告(無聲通知)"
msgstr "Earthquake Report (Silent)"

#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:37
msgid "所在地(縣市)實測震度 1 以上"
msgstr "Local (Municipality/County) measured intensity is greater than 1"

#: ./lib/app/settings/notify/_lib/utils.dart:15
msgid "已更新通知設定"
msgstr "Updated notification setting"

#: ./lib/app/settings/notify/_lib/utils.dart:22
msgid "更新通知設定失敗"
msgstr "Failed To Update Notification Settings"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:30
msgid "緊急地震速報(重大)"
msgstr "Earthquake Early Warning (Severe)"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:31
msgid "最大震度 5 弱以上 且\n"
"所在地(鄉鎮)預估震度 4 以上"
msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 4"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:36
msgid "緊急地震速報(一般)"
msgstr "Earthquake Early Warning (General)"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:37
msgid "最大震度 5 弱以上 且\n"
"所在地(鄉鎮)預估震度 2 以上"
msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 2"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:41
msgid "緊急地震速報(無聲)"
msgstr "Earthquake Early Warning (Silent)"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:42
msgid "最大震度 5 弱以上 且\n"
"所在地(鄉鎮)預估震度 1 以上"
msgstr "Maximum intensity is greater than 5- and local (City/Town/District) estimated intensity is greater than 1"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:46
msgid "地震速報(重大)"
msgstr "Earthquake Warning (Severe)"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:47
msgid "所在地(鄉鎮)預估震度 4 以上"
msgstr "Local (City/Town/District) estimated intensity is greater than 4"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:51
msgid "地震速報(一般)"
msgstr "Earthquake Warning (General)"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:52
msgid "所在地(鄉鎮)預估震度 2 以上"
msgstr "Local (City/Town/District) estimated intensity is greater than 2"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:56
msgid "地震速報(無聲)"
msgstr "Earthquake Warning (Silent)"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:57
msgid "所在地(鄉鎮)預估震度 1 以上"
msgstr "Local (City/Town/District) estimated intensity is greater than 1"

#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:32
msgid "所在地(鄉鎮)發布防災警訊時"
msgstr "When the local area(township) issues a disaster prevention alert"

#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:38
msgid "所在地(鄉鎮)發布防災資訊時"
msgstr "When the local area(township) issues disaster prevention information"

#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:32
msgid "所在地(鄉鎮)發布紅色燈號之\n"
"天氣警特報"
msgstr "The location (township) issues a red signal\n"
"Weather Warning"

#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:38
msgid "所在地(鄉鎮)發布上述除外燈號之\n"
"天氣警特報"
msgstr "The location (township) where the above-mentioned exceptions are issued\n"
"Weather Warning"

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:32
msgid "所在地(鄉鎮)發布山區暴雨時"
msgstr "The location (township) issues rainstorm alert in the mountains"

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:38
msgid "所在地(鄉鎮)發布雷雨即時訊息時"
msgstr "The location (township) issues instant thunderstorm information"

#: ./lib/app/settings/experimental/page.dart:197
msgid "啟動時進入強震監視器"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:57
msgid "地震速報不限制非 CWA 來源"
msgstr ""

#: ./lib/app/settings/page.dart:428
msgid "實驗性功能"
msgstr ""

#: ./lib/app/settings/page.dart:429
msgid "搶先體驗開發中的新功能"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:154
msgid "注意"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:162
msgid "這些功能仍在開發中,可能會不穩定或在未來的版本中變更。"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:188
msgid "啟動行為"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:198
msgid "開啟 App 時直接進入強震監視器地圖"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:218
msgid "不限制非 CWA 來源"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:219
msgid "顯示所有來源的地震速報資料"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:280
msgid "啟用實驗性功能"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:286
msgid "你即將啟用:"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:317
msgid "此功能為實驗性質,可能會造成應用程式不穩定或行為異常。如遇問題,請至設定中關閉此功能。"
msgstr ""

#: ./lib/route/image_viewer/image_viewer.dart:78
msgid "取消"
msgstr "Cancel"

#: ./lib/app/settings/layout/page.dart:272
msgid "啟用"
msgstr ""

#: ./lib/app/settings/page.dart:151
msgid "單位"
msgstr "Unit"

#: ./lib/app/settings/page.dart:152
msgid "調整 DPIP 顯示數值時使用的單位"
msgstr "Adjust the units for value in DPIP"

#: ./lib/app/settings/unit/page.dart:60
msgid "使用華氏度"
msgstr "Use Fahrenheit"

#: ./lib/app/settings/unit/page.dart:61
msgid "切換溫度顯示單位為華氏度 (℉)"
msgstr ""

#: ./lib/app/settings/page.dart:141
msgid "語言"
msgstr "Language"

#: ./lib/app/settings/page.dart:142
msgid "調整 DPIP 的顯示語言"
msgstr "Adjust the display language of DPIP"

#: ./lib/app/settings/locale/page.dart:41
msgid "顯示語言"
msgstr "Display Language"

#: ./lib/app/settings/locale/page.dart:42
msgid "系統語言"
msgstr "System Language"

#: ./lib/app/settings/locale/page.dart:52
msgid "協助翻譯"
msgstr "Help us translate"

#: ./lib/app/settings/locale/page.dart:53
msgid "點擊這裡來幫助我們改進 DPIP 的翻譯"
msgstr "Click here to help us improve the translation of DPIP"

#: ./lib/app/settings/locale/select/page.dart:116
msgid "已翻譯 {translated}・已校對 {approved}"
msgstr "Translated {translated} ・ Approved {approved}"

#: ./lib/app/settings/locale/select/page.dart:129
msgid "來源語言"
msgstr "Source Language"

#: ./lib/app/settings/locale/select/page.dart:163
msgid "選擇語言"
msgstr "Select Language"

#: ./lib/app/settings/donate/page.dart:52
msgid "無法連線至商店,請稍後再試"
msgstr "Unable to connect to the store, please try again later"

#: ./lib/app/settings/donate/page.dart:59
msgid "找不到商品,請稍候再試"
msgstr "Unable to find the item, please try again later"

#: ./lib/app/map/_lib/managers/report.dart:521
msgid "重新載入"
msgstr "Reload"

#: ./lib/app/settings/donate/page.dart:171
msgid "正在載入商店物品中"
msgstr "Loading store items"

#: ./lib/app/settings/donate/page.dart:225
msgid "支持 DPIP"
msgstr ""

#: ./lib/app/settings/donate/page.dart:233
msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。您的支持將幫助我們維持伺服器運行與持續開發。"
msgstr ""

#: ./lib/app/settings/donate/page.dart:260
msgid "訂閱制"
msgstr "Subscription"

#: ./lib/app/settings/donate/page.dart:276
msgid "推薦"
msgstr ""

#: ./lib/app/settings/donate/page.dart:443
msgid "{price}/月"
msgstr "{price}/month"

#: ./lib/app/settings/donate/page.dart:475
msgid "單次支援"
msgstr "One-time"

#: ./lib/app/settings/donate/page.dart:615
msgid "恢復購買"
msgstr "Restore purchases"

#: ./lib/app/settings/donate/page.dart:628
msgid "無法連線至 {store},請稍後再試。"
msgstr "Unable to connect to the {store}, please try again later."

#: ./lib/app/settings/donate/page.dart:639
msgid "正在恢復您購買的訂閱"
msgstr "Restoring your purchased subscription"

#: ./lib/app/settings/donate/page.dart:644
msgid "使用條款"
msgstr "Terms of use"

#: ./lib/app/settings/donate/page.dart:648
msgid "隱私權政策"
msgstr "Privacy policy"

#: ./lib/app/settings/proxy/page.dart:51
msgid "設定已儲存"
msgstr ""

#: ./lib/app/settings/page.dart:200
msgid "HTTP 代理"
msgstr ""

#: ./lib/app/settings/page.dart:201
msgid "調整 HTTP 代理伺服器設定"
msgstr ""

#: ./lib/app/settings/proxy/page.dart:75
msgid "啟用代理"
msgstr ""

#: ./lib/app/settings/proxy/page.dart:76
msgid "透過代理伺服器發送所有網路請求"
msgstr ""

#: ./lib/app/settings/proxy/page.dart:88
msgid "代理主機"
msgstr ""

#: ./lib/app/settings/proxy/page.dart:102
msgid "代理端口"
msgstr ""

#: ./lib/app/settings/proxy/page.dart:117
msgid "設定儲存後,需要重新啟動應用程式才能生效"
msgstr ""

#: ./lib/route/image_viewer/image_viewer.dart:85
msgid "設定"
msgstr "Settings"

#: ./lib/app/settings/page.dart:71
msgid "自訂你的 DPIP 使用體驗"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:174
msgid "位置"
msgstr "Location"

#: ./lib/app/settings/location/page.dart:417
msgid "所在地"
msgstr "Current Location"

#: ./lib/app/settings/location/page.dart:241
msgid "設定你的所在地來接收當地的即時資訊"
msgstr "Set your location to receive updates about your area"

#: ./lib/app/settings/page.dart:113
msgid "介面"
msgstr "Interface"

#: ./lib/app/settings/layout/page.dart:47
msgid "版面"
msgstr ""

#: ./lib/app/settings/layout/page.dart:48
msgid "調整首頁的版面樣式"
msgstr ""

#: ./lib/app/settings/theme/page.dart:25
msgid "主題"
msgstr "Theme"

#: ./lib/app/settings/theme/page.dart:26
msgid "調整 DPIP 整體的外觀與顏色"
msgstr "Adjust the overall appearance and color of DPIP"

#: ./lib/app/settings/map/page.dart:49
msgid "地圖"
msgstr "Map"

#: ./lib/app/settings/map/page.dart:50
msgid "調整地圖的顯示樣式"
msgstr ""

#: ./lib/app/settings/page.dart:191
msgid "網路"
msgstr ""

#: ./lib/app/settings/page.dart:210
msgid "資訊"
msgstr "Information"

#: ./lib/app/changelog/page.dart:54
msgid "更新日誌"
msgstr "Release Notes"

#: ./lib/app/settings/page.dart:230
msgid "瀏覽 DPIP 的歷次更新紀錄"
msgstr "View DPIP's Previous Update Records"

#: ./lib/app/settings/page.dart:240
msgid "第三方套件授權"
msgstr "Third Party Libraries"

#: ./lib/app/settings/page.dart:241
msgid "DPIP 的實現歸功於開放原始碼"
msgstr ""

#: ./lib/app/settings/page.dart:264
msgid "贊助我們"
msgstr "Support Us"

#: ./lib/app/settings/page.dart:267
msgid "幫助我們維護伺服器的穩定和長久發展"
msgstr "Help us maintain the stability and long-term development of the server"

#: ./lib/app/settings/page.dart:343
msgid "下載"
msgstr ""

#: ./lib/app/settings/page.dart:383
msgid "除錯"
msgstr "Debug"

#: ./lib/app/settings/page.dart:391
msgid "應用程式版本"
msgstr "App Version"

#: ./lib/app/settings/page.dart:400
msgid "裝置資訊"
msgstr "Device Info"

#: ./lib/app/settings/page.dart:409
msgid "複製通知 Token"
msgstr "Copy Notification Token"

#: ./lib/app/debug/logs/page.dart:16
msgid "App 日誌"
msgstr "App Logs"

#: ./lib/app/settings/page.dart:463
msgid "任何資訊應以中央氣象署發布之內容為準"
msgstr ""

#: ./lib/app/settings/location/page.dart:74
msgid "無法取得通知權限"
msgstr "Unable to obtain Notification Permission"

#: ./lib/app/settings/location/page.dart:76
msgid "無法取得位置權限"
msgstr "Unable to obtain Location Permission"

#: ./lib/app/settings/location/page.dart:77
msgid "無法取得自啟動權限"
msgstr "Unable to obtain Self-Start Permission"

#: ./lib/app/welcome/4-permissions/page.dart:180
msgid "省電策略"
msgstr "Power saving"

#: ./lib/route/image_viewer/image_viewer.dart:71
msgid "無法取得權限"
msgstr "Unable to obtain permission"

#: ./lib/app/settings/location/page.dart:84
msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。"
msgstr "To use the Auto-Location feature, please allow Notification Permission for DPIP in settings, then try again."

#: ./lib/app/settings/location/page.dart:86
msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。"
msgstr "The automatic location feature requires you to allow DPIP to access your location in order to function properly. Please go to the app settings, find \"Location,\" and grant permission before trying again."

#: ./lib/app/settings/location/page.dart:89
msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。"
msgstr "The automatic location feature requires you to always allow DPIP to access your location in order to function properly. Please go to the app settings, find the location permission settings, and select “Always” before trying again."

#: ./lib/app/settings/location/page.dart:91
msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。"
msgstr "To use automatic location, DPIP needs permission to always access your location. Go to your app settings, enable ‘Always Allow’ for location, and try again."

#: ./lib/app/settings/location/page.dart:93
msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。"
msgstr "Grant ‘Auto-Start’ permission to let DPIP automatically update your location in the background."

#: ./lib/app/settings/location/page.dart:95
msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。"
msgstr "Grant ‘Unrestricted’ permission to let DPIP automatically update your location in the background."

#: ./lib/app/settings/location/page.dart:96
msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。"
msgstr "DPIP needs permission to use automatic location. Go to your app settings and allow the permission, then try again."

#: ./lib/app/settings/location/page.dart:174
msgid "自動啟動"
msgstr "Auto-Start"

#: ./lib/app/settings/location/page.dart:175
msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。"
msgstr "To get the best DPIP experience, enable Auto-Start to let DPIP receive updates and update your location in the background."

#: ./lib/app/settings/location/page.dart:199
msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。"
msgstr "To get the best DPIP experience, turn off battery saver to let DPIP receive updates and update your location in the background."

#: ./lib/app/settings/location/page.dart:233
msgid "一律允許"
msgstr "Always allow"

#: ./lib/app/settings/location/page.dart:233
msgid "永遠"
msgstr "Forever"

#: ./lib/app/settings/location/page.dart:253
msgid "自動更新"
msgstr "Update Automatically"

#: ./lib/app/settings/location/page.dart:254
msgid "定期更新目前的所在地"
msgstr "Update your current location periodically"

#: ./lib/app/settings/location/page.dart:263
msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。"
msgstr "The automatic location update feature will use the GPS on your device to update your location based on your geographical position periodically, providing real-time weather and earthquake information, so you can stay up-to-date with the latest local conditions even when DPIP is closed."

#: ./lib/app/settings/location/page.dart:334
msgid "通知功能已被拒絕,請移至設定允許權限。"
msgstr "Notification permission has been denied. Please go to settings to allow it."

#: ./lib/app/settings/location/page.dart:395
msgid "省電策略已被拒絕,請移至設定允許權限。"
msgstr "Battery saver permission has been denied. Please go to settings to allow it."

#: ./lib/app/settings/location/select/[city]/page.dart:98
msgid "設定所在地時發生錯誤,請稍候再試一次。"
msgstr "Failed to set your location. Please try again later."

#: ./lib/app/home/_widgets/location_button.dart:233
msgid "新增地點"
msgstr "Add a new location"

#: ./lib/app/settings/location/select/page.dart:33
msgid "縣市"
msgstr "Special Municipalities/County"

#: ./lib/app/settings/location/select/page.dart:44
msgid "目前所在地"
msgstr "Current Location"

#: ./lib/app/settings/layout/page.dart:56
msgid "拖曳調整順序"
msgstr ""

#: ./lib/app/settings/layout/page.dart:100
msgid "已停用"
msgstr ""

#: ./lib/app/settings/layout/page.dart:135
msgid "所有區塊皆已啟用"
msgstr ""

#: ./lib/app/settings/layout/page.dart:202
msgid "停用"
msgstr ""

#: ./lib/app/settings/map/page.dart:61
msgid "初始圖層"
msgstr "Initial Layer"

#: ./lib/app/settings/map/page.dart:62
msgid "調整地圖的底圖以及初始顯示的圖層"
msgstr ""

#: ./lib/app/settings/map/page.dart:74
msgid "自動縮放"
msgstr "Auto Zoom"

#: ./lib/app/settings/map/page.dart:75
msgid "接收到檢知時自動縮放地圖"
msgstr ""

#: ./lib/app/settings/map/page.dart:101
msgid "動畫幀率"
msgstr "Animation frame rate"

#: ./lib/app/settings/map/page.dart:102
msgid "調整強震監視器震波模擬動畫的流暢度"
msgstr ""

#: ./lib/app/settings/map/page.dart:136
msgid "過高的動畫幀率可能會造成卡頓或裝置發熱"
msgstr ""

#: ./lib/app/settings/theme/page.dart:46
msgid "主題模式"
msgstr "Theme Mode"

#: ./lib/app/settings/theme/mode/page.dart:63
msgid "淺色"
msgstr "Light"

#: ./lib/app/settings/theme/mode/page.dart:64
msgid "深色"
msgstr "Dark"

#: ./lib/app/settings/theme/mode/page.dart:59
msgid "跟隨系統主題"
msgstr "System"

#: ./lib/app/settings/theme/color/page.dart:22
msgid "主題色彩"
msgstr ""

#: ./lib/app/settings/theme/color/page.dart:43
msgid "使用系統配色"
msgstr ""

#: ./lib/app/settings/theme/color/page.dart:62
msgid "自訂"
msgstr ""

#: ./lib/app/settings/theme/color/page.dart:72
msgid "自訂色彩"
msgstr ""

#: ./lib/app/home/_widgets/thunderstorm_card.dart:84
msgid "您所在區域附近有劇烈雷雨或降雨發生,請注意防範,持續至 <bold>{time}</bold> 。"
msgstr "Severe thunderstorms or heavy rain are occurring near your area. Please take precautions. This will continue until <bold>{time}</bold>."

#: ./lib/app/home/_widgets/forecast_card.dart:59
msgid "天氣預報(24h)"
msgstr "Weather forecast (24 h)"

#: ./lib/app/home/_widgets/location_out_of_service.dart:28
msgid "服務區域外,僅在臺灣各地可用"
msgstr "Out of service area. Available only in Taiwan"

#: ./lib/app/map/_lib/managers/radar.dart:587
msgid "雷達回波"
msgstr "Radar"

#: ./lib/app/map/_lib/managers/monitor.dart:497
msgid "無資料"
msgstr "No data"

#: ./lib/app/home/_widgets/wind_card.dart:372
msgid "{wind}級 {Desc}"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:389
msgid "陣風 {speed} m/s"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:471
msgid "無法測量"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:492
msgid "指北針不可靠"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:494
msgid "指北針準確度下降"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:495
msgid "指北針正常"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:502
msgid "方向精確度"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:521
msgid "正常範圍:±0-15°"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:538
msgid "附近有強磁場干擾,指北針方向可能完全不準確。請遠離磁鐵、電子裝置或金屬物品。"
msgstr ""

#: ./lib/app/home/_widgets/wind_card.dart:539
msgid "附近可能有磁場干擾,指北針方向可能有偏差。"
msgstr ""

#: ./lib/route/image_viewer/image_viewer.dart:145
msgid "確定"
msgstr "Confirm"

#: ./lib/app/home/_widgets/location_button.dart:29
msgid "尚未設定"
msgstr "Not Set"

#: ./lib/app/home/_widgets/location_button.dart:138
msgid "切換區域"
msgstr ""

#: ./lib/app/home/_widgets/location_button.dart:144
msgid "位置設定"
msgstr ""

#: ./lib/app/home/_widgets/location_button.dart:195
msgid "快速切換"
msgstr ""

#: ./lib/app/home/_widgets/location_button.dart:240
msgid "選擇縣市"
msgstr ""

#: ./lib/app/home/_widgets/location_button.dart:250
msgid "目前選擇"
msgstr ""

#: ./lib/app/home/page.dart:888
msgid "濕度"
msgstr "Humidity"

#: ./lib/app/home/page.dart:916
msgid "風速"
msgstr "Wind speed"

#: ./lib/app/home/_widgets/weather_header.dart:181
msgid "風向"
msgstr "Wind direction"

#: ./lib/app/home/_widgets/weather_header.dart:190
msgid "風級"
msgstr "Beaufort Scale"

#: ./lib/app/home/page.dart:895
msgid "氣壓"
msgstr "Air pressure"

#: ./lib/app/home/page.dart:902
msgid "降雨"
msgstr "Rain Fall"

#: ./lib/app/home/page.dart:909
msgid "能見度"
msgstr "Visibility"

#: ./lib/app/home/page.dart:923
msgid "陣風"
msgstr "Gust"

#: ./lib/app/home/_widgets/weather_header.dart:233
msgid "陣風級"
msgstr "Gust Scale"

#: ./lib/app/home/_widgets/weather_header.dart:241
msgid "日照"
msgstr "Sun UVI"

#: ./lib/app/home/_widgets/hero_weather.dart:142
msgid "體感 {feelsLike}°"
msgstr ""

#: ./lib/app/home/_widgets/hero_weather.dart:185
msgid "無天氣資料"
msgstr ""

#: ./lib/app/home/_widgets/mode_toggle_button.dart:14
msgid "全國 · 生效中"
msgstr "Nationwide · In Effect"

#: ./lib/app/home/_widgets/mode_toggle_button.dart:16
msgid "全國 · 歷史"
msgstr "Nationwide · Past Events"

#: ./lib/app/home/_widgets/mode_toggle_button.dart:18
msgid "所在地 · 生效中"
msgstr "Location · In Effect"

#: ./lib/app/home/_widgets/mode_toggle_button.dart:20
msgid "所在地 · 歷史"
msgstr "Location · Past Events"

#: ./lib/app/map/_lib/managers/monitor.dart:1258
msgid "EEW"
msgstr "Earthquake Early Warning"

#: ./lib/app/map/_lib/managers/monitor.dart:1397
msgid "第 {serial} 報"
msgstr "of {serial}"

#: ./lib/app/map/_lib/managers/monitor.dart:1415
msgid "{time} 左右,<bold>{location}</bold>附近發生有感地震,預估規模 <bold>M{magnitude}</bold>、所在地最大震度<bold>{intensity}</bold>。"
msgstr "At around {time}, an earthquake was felt near <bold>{location}</bold> with an estimated intensity of <bold>M{magnitude}</bold>, with a local felt intensity of <bold>{intensity}</bold>."

#: ./lib/app/map/_lib/managers/monitor.dart:1423
msgid "{time} 左右,<bold>{location}</bold>附近發生有感地震,預估規模 <bold>M{magnitude}</bold>、深度<bold>{depth}</bold>公里。"
msgstr "At around {time}, an earthquake was felt near <bold>{location}</bold> with an estimated intensity of <bold>M{magnitude}</bold> and at a depth of <bold>{depth}</bold>KM."

#: ./lib/app/map/_lib/managers/monitor.dart:1469
msgid "所在地預估"
msgstr "Estimated"

#: ./lib/app/map/_lib/managers/monitor.dart:1505
msgid "震波"
msgstr "Waves"

#: ./lib/app/map/_lib/managers/monitor.dart:1527
msgid " 秒"
msgstr " Seconds"

#: ./lib/app/map/_lib/managers/monitor.dart:1544
msgid "抵達"
msgstr "Arrived"

#: ./lib/app/home/page.dart:195
msgid "已更新至 {version}"
msgstr "Updated to {version}"

#: ./lib/utils/weather_icon.dart:284
msgid "取得天氣異常"
msgstr "Error while retrieving weather data"

#: ./lib/app/home/page.dart:366
msgid "取得歷史資訊異常"
msgstr "Error retrieving history."

#: ./lib/app/home/page.dart:777
msgid "上午"
msgstr ""

#: ./lib/app/home/page.dart:777
msgid "下午"
msgstr ""

#: ./lib/app/changelog/page.dart:76
msgid "發生錯誤"
msgstr ""

#: ./lib/route/image_viewer/image_viewer.dart:85
msgid "再試一次"
msgstr "Try again"

#: ./lib/app/changelog/page.dart:203
msgid "目前版本"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:403
msgid "下一步"
msgstr "Next"

#: ./lib/app/welcome/1-about/page.dart:68
msgid "防災資訊平台"
msgstr "Disaster Prevention Information Platform"

#: ./lib/app/welcome/2-exptech/page.dart:93
msgid "我們是誰?"
msgstr "Who are we?"

#: ./lib/app/welcome/2-exptech/page.dart:100
msgid "ExpTech Studio 是一群大部分由學生組成,平均年齡未滿 20 歲、人數超過 15 + 的團體。成員來自臺灣北中南、日本、韓國、中國的學生。"
msgstr "ExpTech Studio is a group of mostly students, with an average age of under 20 and a headcount of 15+. Members are students from northern, central and southern Taiwan, Japan, South Korea and China."

#: ./lib/app/welcome/2-exptech/page.dart:106
msgid "我們的初衷"
msgstr "Our original intention"

#: ./lib/app/welcome/2-exptech/page.dart:113
msgid "成立初衷是招募一群對電腦及科技有興趣及能力的同學,後來發展至校外,並逐漸形成現在的樣子。"
msgstr "It was first created to gather students passionate about computers and technology. Over time, it grew beyond the school and became what it is today."

#: ./lib/app/welcome/3-notice/page.dart:45
msgid "注意事項"
msgstr "Precautions"

#: ./lib/app/welcome/3-notice/page.dart:65
msgid "任何資訊應以中央氣象署發布之內容為準。"
msgstr "All information should be considered authoritative only if it is consistent with CWA."

#: ./lib/app/welcome/3-notice/page.dart:82
msgid "根據網路狀態、伺服器狀態、應用程式狀態、上游資料來源狀態等,有收不到資訊的可能性,我們會盡力避免此類情況,但不保證一定不會發生。"
msgstr "Depending on the network status, server status, application status, upstream data source status, etc., there is a possibility that information will not be received. We will try our best to avoid such situations, but we cannot guarantee that they will not happen."

#: ./lib/app/welcome/3-notice/page.dart:97
msgid "強烈搖晃有機率比通知早抵達使用者所在地。"
msgstr "Strong shaking has a chance of reaching the user's location before the notification."

#: ./lib/app/welcome/3-notice/page.dart:111
msgid "地震速報為快速計算之結果,可能存在較大誤差,應理解並謹慎使用。"
msgstr "Earthquake early warning is the result of rapid calculation and may have large errors. It should be understood and used with caution."

#: ./lib/app/welcome/3-notice/page.dart:125
msgid "任何不被官方所認可的行為均有可能承擔法律風險,請務必遵守相關規範。"
msgstr "Any action that is not officially approved could lead to legal consequences. It's essential to follow all applicable rules and regulations."

#: ./lib/app/welcome/1-about/page.dart:46
msgid "歡迎使用 DPIP"
msgstr "Welcome to DPIP"

#: ./lib/app/welcome/1-about/page.dart:91
msgid "DPIP 是一款由臺灣本土團隊設計的 App,整合 TREM-Net (臺灣即時地震觀測網) 之資訊,以及中央氣象署資料,提供一個整合、單一且便利的防災資訊應用程式。"
msgstr "DPIP is an app designed by a local Taiwanese team that integrates information from TREM-Net (Taiwan Real-time Earthquake Observation Network) and data from the Central Weather Administration to provide an integrated, single and convenient disaster prevention information application."

#: ./lib/app/welcome/4-permissions/page.dart:167
msgid "在重大災害發生時以通知來傳遞即時防災資訊"
msgstr "Delivering real-time disaster prevention information via notifications when major disasters occur"

#: ./lib/app/welcome/4-permissions/page.dart:175
msgid "使用定位來自動更新所在地設定,提供當地的即時防災資訊"
msgstr "Use location to automatically update location settings and provide local real-time disaster prevention information"

#: ./lib/app/welcome/4-permissions/page.dart:181
msgid "允許 DPIP 在背景中持續運行,以便即時防災通知資訊。"
msgstr "Allow DPIP to run continuously in the background for real-time disaster notification information."

#: ./lib/route/image_viewer/image_viewer.dart:255
msgid "儲存"
msgstr "Save"

#: ./lib/app/welcome/4-permissions/page.dart:188
msgid "用於儲存中央氣象署或 ExpTech 提供之資料視覺化圖片"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:352
msgid "權限請求"
msgstr "Permission request"

#: ./lib/app/welcome/4-permissions/page.dart:353
msgid "需要使用者手動到設定開啟相關權限。"
msgstr "Users are required to manually go to settings to enable relevant permissions."

#: ./lib/app/welcome/4-permissions/page.dart:376
msgid "需要背景位置權限"
msgstr "Background Location Access Required"

#: ./lib/app/welcome/4-permissions/page.dart:378
msgid "為了在背景持續提供即時防災資訊,DPIP 需要「永遠允許」位置權限。\n\n"
"接下來系統會引導您到設定頁面,請選擇「永遠允許」選項。"
msgstr "To continuing giving the disaster prevention information immediately, DPIP needs the access of location forever.\n\n"
"System will guide you to the setting, please select forever location accession."

#: ./lib/app/welcome/4-permissions/page.dart:384
msgid "稍後"
msgstr "Wait"

#: ./lib/app/welcome/4-permissions/page.dart:388
msgid "前往設定"
msgstr "Go to settings"

#: ./lib/app/welcome/4-permissions/page.dart:426
msgid "權限"
msgstr "Permissions"

#: ./lib/app/welcome/4-permissions/page.dart:439
msgid "我們一直和使用者站在一起,為使用者的隱私而不斷努力。"
msgstr "We always stand with our users and work hard for their privacy."

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:84
msgid "地圖圖層"
msgstr "Map Layers"

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:85
msgid "選擇要顯示的地圖圖層"
msgstr "Select the layer you want to display"

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:91
msgid "底圖"
msgstr "Base Map"

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:97
msgid "簡單"
msgstr "Simple"

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:119
msgid "監視器"
msgstr "Monitor"

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:124
msgid "報告"
msgstr "Reports"

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:135
msgid "氣象"
msgstr "Weather"

#: ./lib/app/map/_lib/managers/temperature.dart:453
msgid "氣溫"
msgstr "Temperature"

#: ./lib/app/map/_lib/managers/precipitation.dart:577
msgid "降水"
msgstr "Precipitation"

#: ./lib/app/map/_lib/managers/wind.dart:320
msgid "風向/風速"
msgstr "Wind/Gust"

#: ./lib/app/map/_lib/managers/lightning.dart:294
msgid "閃電"
msgstr "Lightning"

#: ./lib/app/map/_widgets/map_legend.dart:202
msgid "單位:{unit}"
msgstr "Units: {unit}"

#: ./lib/app/map/_lib/managers/tsunami.dart:485
msgid "近期無海嘯資訊"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:486
msgid "海嘯警報"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:496
msgid "{id}號 第{serial}報"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:551
msgid "發布"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:553
msgid "更新"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:554
msgid "解除"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:607
msgid "預估海嘯到達時間及波高"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:626
msgid "各地觀測到的海嘯"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:641
msgid "地震資訊"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:654
msgid "發生時間"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:1072
msgid "位於"
msgstr "Location"

#: ./lib/app/map/_lib/managers/tsunami.dart:736
msgid "規模"
msgstr ""

#: ./lib/app/map/_lib/managers/tsunami.dart:765
msgid "深度"
msgstr ""

#: ./lib/app/map/_lib/managers/radar.dart:744
msgid "長按設定播放起點"
msgstr "Long press to set the start point of playback"

#: ./lib/app/map/_lib/managers/radar.dart:760
msgid "目前時間"
msgstr "Current time"

#: ./lib/app/map/_lib/managers/radar.dart:765
msgid "播放起點"
msgstr "Play start"

#: ./lib/app/map/_lib/managers/radar.dart:1099
msgid "播放進度"
msgstr "Progress"

#: ./lib/app/map/_lib/managers/lightning.dart:393
msgid "5 分鐘內對地閃電"
msgstr "Lightning to ground in 5 min"

#: ./lib/app/map/_lib/managers/lightning.dart:401
msgid "10 分鐘內對地閃電"
msgstr "Lightning to ground in 10 min"

#: ./lib/app/map/_lib/managers/lightning.dart:409
msgid "30 分鐘內對地閃電"
msgstr "Lightning to ground in 30 min"

#: ./lib/app/map/_lib/managers/lightning.dart:417
msgid "60 分鐘內對地閃電"
msgstr "Lightning to ground in 60 min"

#: ./lib/app/map/_lib/managers/lightning.dart:425
msgid "5 分鐘內雲間閃電"
msgstr "Lightning in cloud in 5 min"

#: ./lib/app/map/_lib/managers/lightning.dart:433
msgid "10 分鐘內雲間閃電"
msgstr "Lightning in cloud in 10 min"

#: ./lib/app/map/_lib/managers/lightning.dart:441
msgid "30 分鐘內雲間閃電"
msgstr "Lightning in cloud in 30 min"

#: ./lib/app/map/_lib/managers/lightning.dart:449
msgid "60 分鐘內雲間閃電"
msgstr "Lightning in cloud in 60 min"

#: ./lib/app/map/_lib/managers/precipitation.dart:396
msgid "今日"
msgstr "Today"

#: ./lib/app/map/_lib/managers/precipitation.dart:397
msgid "10 分鐘"
msgstr "10 min"

#: ./lib/app/map/_lib/managers/precipitation.dart:398
msgid "1 小時"
msgstr "1 hr"

#: ./lib/app/map/_lib/managers/precipitation.dart:399
msgid "3 小時"
msgstr "3 hr"

#: ./lib/app/map/_lib/managers/precipitation.dart:400
msgid "6 小時"
msgstr "6 hr"

#: ./lib/app/map/_lib/managers/precipitation.dart:401
msgid "12 小時"
msgstr "12 hr"

#: ./lib/app/map/_lib/managers/precipitation.dart:402
msgid "24 小時"
msgstr "24 hr"

#: ./lib/app/map/_lib/managers/precipitation.dart:403
msgid "2 天"
msgstr "2 d"

#: ./lib/app/map/_lib/managers/precipitation.dart:404
msgid "3 天"
msgstr "3 d"

#: ./lib/app/map/_lib/managers/monitor.dart:474
msgid "海外測站"
msgstr "Overseas Station"

#: ./lib/app/map/_lib/managers/monitor.dart:494
msgid "即時震度:"
msgstr "Current Intensity:"

#: ./lib/app/map/_lib/managers/monitor.dart:517
msgid "地動加速度:"
msgstr "PGA:"

#: ./lib/app/map/_lib/managers/monitor.dart:541
msgid "地動速度:"
msgstr "PGV:"

#: ./lib/app/map/_lib/managers/monitor.dart:1331
msgid "規模 <bold>M{magnitude}</bold>,所在地預估<bold>{intensity}</bold>"
msgstr "Estimated <bold>M{magnitude}</bold>, max intensity <bold>{intensity}</bold>"

#: ./lib/app/map/_lib/managers/monitor.dart:1349
msgid "{countdown}秒後抵達"
msgstr "in {countdown}s"

#: ./lib/app/map/_lib/managers/monitor.dart:1352
msgid "已抵達"
msgstr "Arrived"

#: ./lib/app/map/_lib/managers/monitor.dart:1364
msgid "規模 <bold>M{magnitude}</bold>,深度<bold>{depth}</bold>公里"
msgstr "Magnitude<bold>M{magnitude}</bold>, Depth<bold>{depth}</bold>km"

#: ./lib/app/map/_lib/managers/monitor.dart:1591
msgid "目前沒有生效中的地震速報"
msgstr "There are currently no active earthquake early warnings"

#: ./lib/app/map/_lib/managers/report.dart:516
msgid "CWA 正在製圖中"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:639
msgid "近期的地震報告"
msgstr "Recent Earthquake Reports"

#: ./lib/app/map/_lib/managers/report.dart:647
msgid "更多"
msgstr "More"

#: ./lib/app/map/_lib/managers/report.dart:995
msgid "編號 {number} 顯著有感地震"
msgstr "No. {number} Significantly Felt Earthquake"

#: ./lib/app/map/_lib/managers/report.dart:998
msgid "小區域有感地震"
msgstr "Local Earthquake"

#: ./lib/app/map/_lib/managers/report.dart:1083
msgid "地震規模"
msgstr "Magnitude"

#: ./lib/app/map/_lib/managers/report.dart:1110
msgid "震源深度"
msgstr "Depth"

#: ./lib/app/map/_lib/managers/report.dart:886
msgid "沒有更多資料"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:1030
msgid "報告頁面"
msgstr "Web"

#: ./lib/route/report/report_sheet_content.dart:90
msgid "重播"
msgstr ""

#: ./lib/app/map/_lib/managers/report.dart:1064
msgid "發震時間"
msgstr "Event Time"

#: ./lib/app/map/_lib/managers/report.dart:1132
msgid "各地震度"
msgstr "Observed Intensities"

#: ./lib/app/map/_lib/managers/report.dart:1212
msgid "地震報告圖"
msgstr "Earthquake Intensity Map Image"

#: ./lib/app/map/_lib/managers/report.dart:1228
msgid "震度圖"
msgstr "Intensity Map Image"

#: ./lib/app/map/_lib/managers/report.dart:1248
msgid "最大地動加速度圖"
msgstr "Max PGA Image"

#: ./lib/app/map/_lib/managers/report.dart:1268
msgid "最大地動速度圖"
msgstr "Max PGV Image"

#: ./lib/route/announcement/announcement.dart:10
msgid "錯誤"
msgstr "Mistake"

#: ./lib/route/announcement/announcement.dart:11
msgid "已解決"
msgstr "Resolved"

#: ./lib/route/announcement/announcement.dart:12
msgid "影響:小"
msgstr "Impact: Small"

#: ./lib/route/announcement/announcement.dart:13
msgid "影響:中"
msgstr "Impact: Medium"

#: ./lib/route/announcement/announcement.dart:14
msgid "影響:大"
msgstr "Impact: Large"

#: ./lib/route/announcement/announcement.dart:16
msgid "維修"
msgstr "Impact: Major"

#: ./lib/route/announcement/announcement.dart:17
msgid "測試"
msgstr "Test"

#: ./lib/route/announcement/announcement.dart:18
msgid "變更"
msgstr "Change"

#: ./lib/route/announcement/announcement.dart:19
msgid "完成"
msgstr "Done"

#: ./lib/route/announcement/announcement.dart:20
msgid "地震相關"
msgstr "Seismic"

#: ./lib/route/announcement/announcement.dart:21
msgid "氣象相關"
msgstr "Weather related"

#: ./lib/route/announcement/announcement.dart:27
msgid "未知"
msgstr "Unknown"

#: ./lib/route/announcement/announcement.dart:105
msgid "目前沒有公告"
msgstr "There is no announcement."

#: ./lib/route/announcement/announcement.dart:246
msgid "公告詳情"
msgstr "Announcement Details"

#: ./lib/route/image_viewer/image_viewer.dart:73
msgid "請您到應用程式設定中找到並允許「相片和媒體」權限後再試一次。"
msgstr "Please go to the app settings and allow the \"Photos and Media\" permissions and try again."

#: ./lib/route/image_viewer/image_viewer.dart:123
msgid "已儲存圖片"
msgstr "Saved pictures"

#: ./lib/route/image_viewer/image_viewer.dart:141
msgid "儲存圖片時發生錯誤"
msgstr "An error occurred while saving the image"

#: ./lib/utils/extensions/number.dart:26
msgid "0級"
msgstr "0"

#: ./lib/utils/extensions/number.dart:27
msgid "1級"
msgstr "1"

#: ./lib/utils/extensions/number.dart:28
msgid "2級"
msgstr "2"

#: ./lib/utils/extensions/number.dart:29
msgid "3級"
msgstr "3"

#: ./lib/utils/extensions/number.dart:30
msgid "4級"
msgstr "4"

#: ./lib/utils/extensions/number.dart:31
msgid "5弱"
msgstr "5-"

#: ./lib/utils/extensions/number.dart:32
msgid "5強"
msgstr "5+"

#: ./lib/utils/extensions/number.dart:33
msgid "6弱"
msgstr "6-"

#: ./lib/utils/extensions/number.dart:34
msgid "6強"
msgstr "6+"

#: ./lib/utils/extensions/number.dart:35
msgid "7級"
msgstr "Intensity 7"

#: ./lib/utils/weather_icon.dart:285
msgid "晴"
msgstr "Sunny"

#: ./lib/utils/weather_icon.dart:286
msgid "晴有霾"
msgstr "Sunny with Haze"

#: ./lib/utils/weather_icon.dart:287
msgid "晴有靄"
msgstr "Sunny with Mist"

#: ./lib/utils/weather_icon.dart:288
msgid "晴有閃電"
msgstr "Sunny with Lightning"

#: ./lib/utils/weather_icon.dart:304
msgid "晴天伴有雷"
msgstr "Sunny with Thunder"

#: ./lib/utils/weather_icon.dart:290
msgid "晴有霧"
msgstr "Sunny with Fog"

#: ./lib/utils/weather_icon.dart:291
msgid "晴有雨"
msgstr "Sunny with Rain"

#: ./lib/utils/weather_icon.dart:292
msgid "晴有雨雪"
msgstr "Sunny with Rain and Snow"

#: ./lib/utils/weather_icon.dart:293
msgid "晴有大雪"
msgstr "Sunny with Heavy Snow"

#: ./lib/utils/weather_icon.dart:294
msgid "晴有雪珠"
msgstr "Sunny with Snow Grains"

#: ./lib/utils/weather_icon.dart:295
msgid "晴有冰珠"
msgstr "Sunny with Ice Pellets"

#: ./lib/utils/weather_icon.dart:296
msgid "晴有陣雪"
msgstr "Sunny with Snow Showers"

#: ./lib/utils/weather_icon.dart:297
msgid "晴陣雨雪"
msgstr "Sunny with Rain and Snow Showers"

#: ./lib/utils/weather_icon.dart:298
msgid "晴有雹"
msgstr "Sunny with Hail"

#: ./lib/utils/weather_icon.dart:299
msgid "晴有雷雨"
msgstr "Sunny with Thunderstorm"

#: ./lib/utils/weather_icon.dart:300
msgid "晴有雷雪"
msgstr "Sunny with Thundersnow"

#: ./lib/utils/weather_icon.dart:301
msgid "晴有雷雹"
msgstr "Clear with thunder and hail"

#: ./lib/utils/weather_icon.dart:302
msgid "晴大雷雨"
msgstr "Sunny with Heavy Thunderstorms"

#: ./lib/utils/weather_icon.dart:303
msgid "晴大雷雹"
msgstr "Clear sky with heavy thunder and hail"

#: ./lib/utils/weather_icon.dart:305
msgid "多雲"
msgstr "Partly cloudy"

#: ./lib/utils/weather_icon.dart:306
msgid "多雲有霾"
msgstr "Cloudy with haze"

#: ./lib/utils/weather_icon.dart:307
msgid "多雲有靄"
msgstr "Cloudy with haze"

#: ./lib/utils/weather_icon.dart:308
msgid "多雲有閃電"
msgstr "Cloudy with Lightning"

#: ./lib/utils/weather_icon.dart:324
msgid "多雲伴有雷"
msgstr "Cloudy with thunder"

#: ./lib/utils/weather_icon.dart:310
msgid "多雲有霧"
msgstr "Cloudy with Fog"

#: ./lib/utils/weather_icon.dart:311
msgid "多雲有雨"
msgstr "Cloudy with Rain"

#: ./lib/utils/weather_icon.dart:312
msgid "多雲有雨雪"
msgstr "Cloudy with rain and snow"

#: ./lib/utils/weather_icon.dart:313
msgid "多雲有大雪"
msgstr "Cloudy with heavy snow"

#: ./lib/utils/weather_icon.dart:314
msgid "多雲有雪珠"
msgstr "Cloudy with Snow Pellets"

#: ./lib/utils/weather_icon.dart:315
msgid "多雲有冰珠"
msgstr "Cloudy with Hail"

#: ./lib/utils/weather_icon.dart:316
msgid "多雲有陣雪"
msgstr "Cloudy with Snow Showers"

#: ./lib/utils/weather_icon.dart:317
msgid "多雲陣雨雪"
msgstr "Cloudy, Rain and Snow Showers"

#: ./lib/utils/weather_icon.dart:318
msgid "多雲有雹"
msgstr "Cloudy with Hail"

#: ./lib/utils/weather_icon.dart:319
msgid "多雲有雷雨"
msgstr "Cloudy with Thunderstorms"

#: ./lib/utils/weather_icon.dart:320
msgid "多雲有雷雪"
msgstr "Cloudy with Thundersnow"

#: ./lib/utils/weather_icon.dart:321
msgid "多雲有雷雹"
msgstr "Cloudy with Hailstorms"

#: ./lib/utils/weather_icon.dart:322
msgid "多雲大雷雨"
msgstr "Cloudy with Thunderstorm"

#: ./lib/utils/weather_icon.dart:323
msgid "多雲大雷雹"
msgstr "Cloudy with Severe Hailstorms"

#: ./lib/utils/weather_icon.dart:325
msgid "陰"
msgstr "Overcast"

#: ./lib/utils/weather_icon.dart:326
msgid "陰有霾"
msgstr "Overcast with Haze"

#: ./lib/utils/weather_icon.dart:327
msgid "陰有靄"
msgstr "Overcast with Mist"

#: ./lib/utils/weather_icon.dart:328
msgid "陰有閃電"
msgstr "Overcast with Lighting"

#: ./lib/utils/weather_icon.dart:344
msgid "陰天伴有雷"
msgstr "Cloudy with Thunder"

#: ./lib/utils/weather_icon.dart:330
msgid "陰有霧"
msgstr "Overcast with Fog"

#: ./lib/utils/weather_icon.dart:331
msgid "陰有雨"
msgstr "Overcast with Rain"

#: ./lib/utils/weather_icon.dart:332
msgid "陰有雨雪"
msgstr "Overcast with Rain/Snow"

#: ./lib/utils/weather_icon.dart:333
msgid "陰有大雪"
msgstr "Overcast with Heavy Snow"

#: ./lib/utils/weather_icon.dart:334
msgid "陰有雪珠"
msgstr "Overcast with Snow"

#: ./lib/utils/weather_icon.dart:335
msgid "陰有冰珠"
msgstr "Cloudy with ice beads"

#: ./lib/utils/weather_icon.dart:336
msgid "陰有陣雪"
msgstr "Cloudy with snow showers"

#: ./lib/utils/weather_icon.dart:337
msgid "陰陣雨雪"
msgstr "Cloudy with rain and snow"

#: ./lib/utils/weather_icon.dart:338
msgid "陰有雹"
msgstr "Cloudy with Hail"

#: ./lib/utils/weather_icon.dart:339
msgid "陰有雷雨"
msgstr "Cloudy with thunderstorm"

#: ./lib/utils/weather_icon.dart:340
msgid "陰有雷雪"
msgstr "Cloudy with thunder and snow"

#: ./lib/utils/weather_icon.dart:341
msgid "陰有雷雹"
msgstr "Cloudy with thunder and hail"

#: ./lib/utils/weather_icon.dart:342
msgid "陰大雷雨"
msgstr "Cloudy with heavy thunderstorm"

#: ./lib/utils/weather_icon.dart:343
msgid "陰大雷雹"
msgstr "Heavy thunder and hail"

#: ./lib/api/model/location/location.dart:85
msgid "{city}{cityLevel} {town}{townLevel}"
msgstr "{town} {townLevel}, {city} {cityLevel}"

#: ./lib/api/model/location/location.dart:98
msgid "{city} {town}"
msgstr "{city} {town}"

#: ./lib/api/model/location/location.dart:113
msgid "{city}{cityLevel}"
msgstr "{city} {cityLevel}"

#: ./lib/api/model/location/location.dart:130
msgid "{town}{townLevel}"
msgstr "{town} {townLevel}"

#: ./lib/widgets/ui/color_picker.dart:363
msgid "色相"
msgstr ""

#: ./lib/widgets/ui/color_picker.dart:379
msgid "彩度"
msgstr ""

#: ./lib/widgets/ui/color_picker.dart:395
msgid "明度"
msgstr ""

#: ./lib/widgets/ui/color_picker.dart:415
msgid "十六進位值"
msgstr ""



================================================
FILE: assets/translations/ja.po
================================================
msgid ""
msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Crowdin-Project: dpip\n"
"X-Crowdin-Project-ID: 696803\n"
"X-Crowdin-Language: ja\n"
"X-Crowdin-File: /main/.crowdin/strings.pot\n"
"X-Crowdin-File-ID: 26\n"
"Project-Id-Version: dpip\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Language-Team: Japanese\n"
"Language: ja_JP\n"
"PO-Revision-Date: 2026-04-01 07:16\n"

#: ./lib/core/service.dart:291
msgid "正在更新位置"
msgstr "位置を更新中"

#: ./lib/core/service.dart:292
msgid "取得 GPS 位置中..."
msgstr "GPS 位置を取得中…"

#: ./lib/app/settings/notify/page.dart:51
msgid "接收全部"
msgstr "すべて受信"

#: ./lib/app/settings/notify/page.dart:50
msgid "關閉"
msgstr "オフ"

#: ./lib/app/settings/notify/_widgets/eew_notify_section.dart:51
msgid "接收類別"
msgstr "受信カテゴリ"

#: ./lib/app/settings/notify/page.dart:35
msgid "所在地震度1以上"
msgstr "現在地で震度1以上を受信"

#: ./lib/app/settings/notify/page.dart:46
msgid "海嘯消息、海嘯警報"
msgstr "津波警報・情報"

#: ./lib/app/settings/notify/page.dart:45
msgid "只接收海嘯警報"
msgstr "津波警報のみ受信"

#: ./lib/app/settings/notify/page.dart:41
msgid "接收所在地"
msgstr "現在地のみ受信"

#: ./lib/app/settings/notify/page.dart:27
msgid "所在地震度4以上"
msgstr "現在地で震度4以上を受信"

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:28
msgid "音效測試"
msgstr "サウンドテスト"

#: ./lib/route/announcement/announcement.dart:81
msgid "公告"
msgstr "お知らせ"

#: ./lib/app/settings/notify/(5.basic)/announcement/page.dart:32
msgid "發送公告時"
msgstr "通知受信時"

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:46
msgid "音效測試為在裝置上執行的本地通知,僅用於確認裝置在接收通知時是否能正常播放音效。此測試不會向伺服器發送任何請求"
msgstr "サウンドテストは端末上でのみ実行され、通知受信時に正しく音が再生されるかを確認するためだけに使われます。このテストでサーバーにリクエストが送信されることはありません。"

#: ./lib/app/settings/notify/page.dart:82
msgid "伺服器排隊中,請稍候…"
msgstr "サーバーで順番待ち中です。しばらくお待ちください…"

#: ./lib/app/welcome/4-permissions/page.dart:166
msgid "通知"
msgstr "通知"

#: ./lib/app/settings/page.dart:182
msgid "推播通知設定與通知音效測試"
msgstr "プッシュ通知の設定と通知音のテスト"

#: ./lib/app/home/_widgets/location_not_set_card.dart:33
msgid "尚未設定所在地"
msgstr "現在地が設定されていません"

#: ./lib/app/settings/notify/page.dart:201
msgid "請先設定所在地來使用通知功能"
msgstr "通知機能を利用するには、先に現在地を設定してください。"

#: ./lib/app/settings/notify/page.dart:211
msgid "設定所在地"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:209
msgid "地震速報"
msgstr "地震速報"

#: ./lib/app/settings/notify/page.dart:232
msgid "緊急地震速報"
msgstr "緊急地震速報"

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:113
msgid "地震"
msgstr "地震"

#: ./lib/app/map/_lib/managers/monitor.dart:1579
msgid "強震監視器"
msgstr "強震モニター"

#: ./lib/app/map/_lib/managers/report.dart:1302
msgid "地震報告"
msgstr "地震情報"

#: ./lib/app/settings/notify/page.dart:290
msgid "震度速報"
msgstr "地震速報"

#: ./lib/app/settings/notify/page.dart:304
msgid "天氣"
msgstr "天気"

#: ./lib/app/home/_widgets/thunderstorm_card.dart:63
msgid "雷雨即時訊息"
msgstr "雷雨注意情報"

#: ./lib/app/settings/notify/page.dart:334
msgid "天氣警特報"
msgstr "天気警報"

#: ./lib/app/settings/notify/page.dart:354
msgid "防災資訊"
msgstr "防災情報"

#: ./lib/app/map/_widgets/layer_toggle_sheet.dart:129
msgid "海嘯"
msgstr "津波"

#: ./lib/app/settings/notify/page.dart:378
msgid "海嘯資訊"
msgstr "津波情報"

#: ./lib/app/settings/notify/page.dart:390
msgid "其他"
msgstr "その他"

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:31
msgid "重大"
msgstr "重大"

#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:31
msgid "海嘯警報發布時"
msgstr "津波警報発令中"

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:37
msgid "一般"
msgstr "一般"

#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:37
msgid "海嘯消息發布時"
msgstr "津波情報発表時"

#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:41
msgid "太平洋海嘯消息(無聲通知)"
msgstr "太平洋津波通信(音無しお知らせ)"

#: ./lib/app/settings/notify/(4.tsunami)/tsunami/page.dart:42
msgid "太平洋海嘯消息發布時"
msgstr "太平洋津波情報発信された時"

#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:30
msgid "強震監視器(一般)"
msgstr "強震モニター(通常)"

#: ./lib/app/settings/notify/(2.earthquake)/monitor/page.dart:31
msgid "偵測到晃動"
msgstr "揺れを検出"

#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:30
msgid "震度速報(一般)"
msgstr "震度速報(通常)"

#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:31
msgid "所在地(鄉鎮)實測震度 3 以上"
msgstr "現在地(郷/鎮)測りにより震度 3 超え"

#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:36
msgid "震度速報(無聲通知)"
msgstr "震度速報(音無し)"

#: ./lib/app/settings/notify/(2.earthquake)/intensity/page.dart:37
msgid "所在地(鄉鎮)實測震度 1 以上"
msgstr "現在地(郷/鎮)測りにより震度 1 超え"

#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:30
msgid "地震報告(一般)"
msgstr "地震報告(通常)"

#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:31
msgid "所在地(縣市)實測震度 3 以上"
msgstr "現在地(県/市)測りにより震度 3 超え"

#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:36
msgid "地震報告(無聲通知)"
msgstr "地震報告(音無し)"

#: ./lib/app/settings/notify/(2.earthquake)/report/page.dart:37
msgid "所在地(縣市)實測震度 1 以上"
msgstr "現在地(県/市)測りにより震度 1 超え"

#: ./lib/app/settings/notify/_lib/utils.dart:15
msgid "已更新通知設定"
msgstr "通知設定が更新されました"

#: ./lib/app/settings/notify/_lib/utils.dart:22
msgid "更新通知設定失敗"
msgstr "通知設定の更新に失敗しました"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:30
msgid "緊急地震速報(重大)"
msgstr "緊急地震速報(非常)"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:31
msgid "最大震度 5 弱以上 且\n"
"所在地(鄉鎮)預估震度 4 以上"
msgstr "最大震度 5 弱超え かつ\n"
"現在地(郷/鎮)測りにより震度 4 超え"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:36
msgid "緊急地震速報(一般)"
msgstr "緊急地震速報(通常)"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:37
msgid "最大震度 5 弱以上 且\n"
"所在地(鄉鎮)預估震度 2 以上"
msgstr "最大震度 5 弱超え かつ\n"
"現在地(郷/鎮)測りにより震度 2 超え"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:41
msgid "緊急地震速報(無聲)"
msgstr "緊急地震速報(音無し)"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:42
msgid "最大震度 5 弱以上 且\n"
"所在地(鄉鎮)預估震度 1 以上"
msgstr "最大震度 5 弱超え かつ\n"
"現在地(郷/鎮)測りにより震度 1 超え"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:46
msgid "地震速報(重大)"
msgstr "地震速報(非常)"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:47
msgid "所在地(鄉鎮)預估震度 4 以上"
msgstr "現在地(郷/鎮)測りにより震度 4 超え"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:51
msgid "地震速報(一般)"
msgstr "地震速報(通常)"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:52
msgid "所在地(鄉鎮)預估震度 2 以上"
msgstr "現在地(郷/鎮)測りにより震度 2 超え"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:56
msgid "地震速報(無聲)"
msgstr "地震速報(音無し)"

#: ./lib/app/settings/notify/(1.eew)/eew/page.dart:57
msgid "所在地(鄉鎮)預估震度 1 以上"
msgstr "現在地(郷/鎮)測りにより震度 1 超え"

#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:32
msgid "所在地(鄉鎮)發布防災警訊時"
msgstr "所在地(町・村)で防災警報を発表する時"

#: ./lib/app/settings/notify/(3.weather)/evacuation/page.dart:38
msgid "所在地(鄉鎮)發布防災資訊時"
msgstr "所在地(町)が防災警報を発令した場合"

#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:32
msgid "所在地(鄉鎮)發布紅色燈號之\n"
"天氣警特報"
msgstr "現在地(郷/鎮)に赤色灯の気象特別警報が発表されました"

#: ./lib/app/settings/notify/(3.weather)/advisory/page.dart:38
msgid "所在地(鄉鎮)發布上述除外燈號之\n"
"天氣警特報"
msgstr "現在地(郷/鎮)に、上記以外の気象注意報・特別警報が発表されました"

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:32
msgid "所在地(鄉鎮)發布山區暴雨時"
msgstr "所在地(町)が山間部の豪雨警報を発令した場合"

#: ./lib/app/settings/notify/(3.weather)/thunderstorm/page.dart:38
msgid "所在地(鄉鎮)發布雷雨即時訊息時"
msgstr "所在地(町)が雷雨のリアルタイム情報を発令した場合"

#: ./lib/app/settings/experimental/page.dart:197
msgid "啟動時進入強震監視器"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:57
msgid "地震速報不限制非 CWA 來源"
msgstr ""

#: ./lib/app/settings/page.dart:428
msgid "實驗性功能"
msgstr ""

#: ./lib/app/settings/page.dart:429
msgid "搶先體驗開發中的新功能"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:154
msgid "注意"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:162
msgid "這些功能仍在開發中,可能會不穩定或在未來的版本中變更。"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:188
msgid "啟動行為"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:198
msgid "開啟 App 時直接進入強震監視器地圖"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:218
msgid "不限制非 CWA 來源"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:219
msgid "顯示所有來源的地震速報資料"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:280
msgid "啟用實驗性功能"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:286
msgid "你即將啟用:"
msgstr ""

#: ./lib/app/settings/experimental/page.dart:317
msgid "此功能為實驗性質,可能會造成應用程式不穩定或行為異常。如遇問題,請至設定中關閉此功能。"
msgstr ""

#: ./lib/route/image_viewer/image_viewer.dart:78
msgid "取消"
msgstr "キャンセル"

#: ./lib/app/settings/layout/page.dart:272
msgid "啟用"
msgstr ""

#: ./lib/app/settings/page.dart:151
msgid "單位"
msgstr "単位"

#: ./lib/app/settings/page.dart:152
msgid "調整 DPIP 顯示數值時使用的單位"
msgstr "DPIPで数値を表示する際に使用する単位を調整する"

#: ./lib/app/settings/unit/page.dart:60
msgid "使用華氏度"
msgstr "華氏度を使う"

#: ./lib/app/settings/unit/page.dart:61
msgid "切換溫度顯示單位為華氏度 (℉)"
msgstr ""

#: ./lib/app/settings/page.dart:141
msgid "語言"
msgstr "言語"

#: ./lib/app/settings/page.dart:142
msgid "調整 DPIP 的顯示語言"
msgstr "DPIPの表示言語を調整する"

#: ./lib/app/settings/locale/page.dart:41
msgid "顯示語言"
msgstr "表示言語"

#: ./lib/app/settings/locale/page.dart:42
msgid "系統語言"
msgstr "システム言語"

#: ./lib/app/settings/locale/page.dart:52
msgid "協助翻譯"
msgstr "翻訳を協力"

#: ./lib/app/settings/locale/page.dart:53
msgid "點擊這裡來幫助我們改進 DPIP 的翻譯"
msgstr "DPIPの翻訳にご協力をお願いします!"

#: ./lib/app/settings/locale/select/page.dart:116
msgid "已翻譯 {translated}・已校對 {approved}"
msgstr "{translated} 翻訳済み・{approved} 校正済み"

#: ./lib/app/settings/locale/select/page.dart:129
msgid "來源語言"
msgstr "ソース言語"

#: ./lib/app/settings/locale/select/page.dart:163
msgid "選擇語言"
msgstr "言語を選択"

#: ./lib/app/settings/donate/page.dart:52
msgid "無法連線至商店,請稍後再試"
msgstr "ストアに接続できません"

#: ./lib/app/settings/donate/page.dart:59
msgid "找不到商品,請稍候再試"
msgstr "商品が見つかりません"

#: ./lib/app/map/_lib/managers/report.dart:521
msgid "重新載入"
msgstr "再読み込み"

#: ./lib/app/settings/donate/page.dart:171
msgid "正在載入商店物品中"
msgstr "ストアの商品を読み込み中"

#: ./lib/app/settings/donate/page.dart:225
msgid "支持 DPIP"
msgstr ""

#: ./lib/app/settings/donate/page.dart:233
msgid "DPIP 作為一款致力於提供即時地震資訊的 App,目前並無廣告或其他盈利模式。您的支持將幫助我們維持伺服器運行與持續開發。"
msgstr ""

#: ./lib/app/settings/donate/page.dart:260
msgid "訂閱制"
msgstr "サブスクリプション"

#: ./lib/app/settings/donate/page.dart:276
msgid "推薦"
msgstr ""

#: ./lib/app/settings/donate/page.dart:443
msgid "{price}/月"
msgstr "{price}/毎月"

#: ./lib/app/settings/donate/page.dart:475
msgid "單次支援"
msgstr "一回払い"

#: ./lib/app/settings/donate/page.dart:615
msgid "恢復購買"
msgstr "購入を復元"

#: ./lib/app/settings/donate/page.dart:628
msgid "無法連線至 {store},請稍後再試。"
msgstr "{store}に接続できませんでした。しばらく時間をおいてから、もう一度お試しください。"

#: ./lib/app/settings/donate/page.dart:639
msgid "正在恢復您購買的訂閱"
msgstr "ご購入内容を復元しています"

#: ./lib/app/settings/donate/page.dart:644
msgid "使用條款"
msgstr "利用規約"

#: ./lib/app/settings/donate/page.dart:648
msgid "隱私權政策"
msgstr "プライバシーポリシー"

#: ./lib/app/settings/proxy/page.dart:51
msgid "設定已儲存"
msgstr ""

#: ./lib/app/settings/page.dart:200
msgid "HTTP 代理"
msgstr ""

#: ./lib/app/settings/page.dart:201
msgid "調整 HTTP 代理伺服器設定"
msgstr ""

#: ./lib/app/settings/proxy/page.dart:75
msgid "啟用代理"
msgstr ""

#: ./lib/app/settings/proxy/page.dart:76
msgid "透過代理伺服器發送所有網路請求"
msgstr ""

#: ./lib/app/settings/proxy/page.dart:88
msgid "代理主機"
msgstr ""

#: ./lib/app/settings/proxy/page.dart:102
msgid "代理端口"
msgstr ""

#: ./lib/app/settings/proxy/page.dart:117
msgid "設定儲存後,需要重新啟動應用程式才能生效"
msgstr ""

#: ./lib/route/image_viewer/image_viewer.dart:85
msgid "設定"
msgstr "設定"

#: ./lib/app/settings/page.dart:71
msgid "自訂你的 DPIP 使用體驗"
msgstr ""

#: ./lib/app/welcome/4-permissions/page.dart:174
msgid "位置"
msgstr "位置"

#: ./lib/app/settings/location/page.dart:417
msgid "所在地"
msgstr "現在地"

#: ./lib/app/settings/location/page.dart:241
msgid "設定你的所在地來接收當地的即時資訊"
msgstr "現在地を設定して地域のリアルタイム情報を受け取る"

#: ./lib/app/settings/page.dart:113
msgid "介面"
msgstr "画面"

#: ./lib/app/settings/layout/page.dart:47
msgid "版面"
msgstr ""

#: ./lib/app/settings/layout/page.dart:48
msgid "調整首頁的版面樣式"
msgstr ""

#: ./lib/app/settings/theme/page.dart:25
msgid "主題"
msgstr "テーマ"

#: ./lib/app/settings/theme/page.dart:26
msgid "調整 DPIP 整體的外觀與顏色"
msgstr "DPIPのテーマを調整する"

#: ./lib/app/settings/map/page.dart:49
msgid "地圖"
msgstr "地図"

#: ./lib/app/settings/map/page.dart:50
msgid "調整地圖的顯示樣式"
msgstr ""

#: ./lib/app/settings/page.dart:191
msgid "網路"
msgstr ""

#: ./lib/app/settings/page.dart:210
msgid "資訊"
msgstr "情報"

#: ./lib/app/changelog/page.dart:54
msgid "更新日誌"
msgstr "更新履歴"

#: ./lib/app/settings/page.dart:230
msgid "瀏覽 DPIP 的歷次更新紀錄"
msgstr "過去の更新履歴を見る"

#: ./lib/app/settings/page.dart:240
msgid "第三方套件授權"
msgstr "外部ライブラリの使用許諾"

#: ./lib/app/settings/page.dart:241
msgid "DPIP 的實現歸功於開放原始碼"
msgstr ""

#: ./lib/app/settings/page.dart:264
msgid "贊助我們"
msgstr "応援する"

#: ./lib/app/settings/page.dart:267
msgid "幫助我們維護伺服器的穩定和長久發展"
msgstr "サーバーの安定性と長期的な運営の維持の為にご協力ください"

#: ./lib/app/settings/page.dart:343
msgid "下載"
msgstr ""

#: ./lib/app/settings/page.dart:383
msgid "除錯"
msgstr "デバッグ"

#: ./lib/app/settings/page.dart:391
msgid "應用程式版本"
msgstr "アプリバージョン"

#: ./lib/app/settings/page.dart:400
msgid "裝置資訊"
msgstr "デバイス情報"

#: ./lib/app/settings/page.dart:409
msgid "複製通知 Token"
msgstr "通知トークンをコピー"

#: ./lib/app/debug/logs/page.dart:16
msgid "App 日誌"
msgstr "アプリログ"

#: ./lib/app/settings/page.dart:463
msgid "任何資訊應以中央氣象署發布之內容為準"
msgstr ""

#: ./lib/app/settings/location/page.dart:74
msgid "無法取得通知權限"
msgstr "通知の権限を取得できません"

#: ./lib/app/settings/location/page.dart:76
msgid "無法取得位置權限"
msgstr "位置情報の権限を取得できません"

#: ./lib/app/settings/location/page.dart:77
msgid "無法取得自啟動權限"
msgstr "自動起動の権限を取得できません"

#: ./lib/app/welcome/4-permissions/page.dart:180
msgid "省電策略"
msgstr "電力を守る策略"

#: ./lib/route/image_viewer/image_viewer.dart:71
msgid "無法取得權限"
msgstr "権限を取得できませんでした"

#: ./lib/app/settings/location/page.dart:84
msgid "自動定位功能需要您允許 DPIP 使用通知權限才能正常運作。請您到應用程式設定中找到並允許「通知」權限後再試一次。"
msgstr "自動位置機能を正常に動作させるには、DPIP に通知の権限を許可する必要があります。アプリの設定で「通知」権限を見つけて許可した後、もう一度お試しください。"

#: ./lib/app/settings/location/page.dart:86
msgid "自動定位功能需要您允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到並允許「位置」權限後再試一次。"
msgstr "自動位置機能を正常に動作させるには、DPIP に位置情報の権限を許可する必要があります。アプリの設定で「位置」権限を見つけて許可した後、もう一度お試しください。"

#: ./lib/app/settings/location/page.dart:89
msgid "自動定位功能需要您永遠允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「永遠」後再試一次。"
msgstr "自動位置機能を正常に動作させるには、DPIP に常に位置情報の権限を許可する必要があります。アプリの設定で位置情報の権限を開き、「常に」を選択した後、もう一度お試しください。"

#: ./lib/app/settings/location/page.dart:91
msgid "自動定位功能需要您一律允許 DPIP 使用位置權限才能正常運作。請您到應用程式設定中找到位置權限設定並選擇「一律允許」後再試一次。"
msgstr "自動位置機能を正常に動作させるには、DPIP に位置情報の使用を常に許可する必要があります。アプリの設定で位置情報の権限を開き、「常に許可」を選択した後、もう一度お試しください。"

#: ./lib/app/settings/location/page.dart:93
msgid "為了獲得更好的自動定位體驗,您需要給予「自啟動權限」以便讓 DPIP 在背景自動設定所在地資訊。"
msgstr "より良い自動位置設定体験を得るために、DPIP がバックグラウンドで所在地情報を自動設定できるように、「自動起動の権限」を許可してください。"

#: ./lib/app/settings/location/page.dart:95
msgid "為了獲得更好的自動定位體驗,您需要給予「無限制」以便讓 DPIP 在背景自動設定所在地資訊。"
msgstr "より良い自動位置設定体験を得るために、DPIP がバックグラウンドで所在地情報を自動更新できるよう、動作を「制限なし」にしてください。"

#: ./lib/app/settings/location/page.dart:96
msgid "自動定位功能需要您允許 DPIP 使用權限才能正常運作。請您到應用程式設定中找到並允許「權限」後再試一次。"
msgstr ""

#: ./lib/app/settings/location/page.dart:174
msgid "自動啟動"
msgstr "自動起動"

#: ./lib/app/settings/location/page.dart:175
msgid "為了獲得更好的 DPIP 體驗,請依照步驟啟用自動啟動功能,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。"
msgstr ""

#: ./lib/app/settings/location/page.dart:199
msgid "為了獲得更好的 DPIP 體驗,請依照步驟關閉省電策略,以便讓 DPIP 在背景能正常接收資訊以及更新所在地。"
msgstr ""

#: ./lib/app/settings/location/page.dart:233
msgid "一律允許"
msgstr "常に許可"

#: ./lib/app/settings/location/page.dart:233
msgid "永遠"
msgstr ""

#: ./lib/app/settings/location/page.dart:253
msgid "自動更新"
msgstr "自動更新"

#: ./lib/app/settings/location/page.dart:254
msgid "定期更新目前的所在地"
msgstr "定期的に現在地を更新する"

#: ./lib/app/settings/location/page.dart:263
msgid "自動定位功能將使用您的裝置上的 GPS,即使 DPIP 關閉或未在使用時,也會根據您的地理位置,自動更新您的所在地,提供即時的天氣和地震資訊,讓您隨時掌握當地最新狀況。"
msgstr "この機能には、デバイスのGPSを利用して、地理的な位置情報に基づいて所在地を更新します。リアルタイムの天気情報や地震情報を提供し、最新の地域状況を取得します。"

#: ./lib/app/settings/location/page.dart:334
msgid "通知功能已被拒絕,請移至設定允許權限。"
msgstr ""

#: ./lib/app/settings/location/page.dart:395
msgid "省電策略已被拒絕,請移至設定允許權限。"
msgstr ""

#: ./lib/app/settings/location/select/[city]/page.dart:98
msgid "設定所在地時發生錯誤,請稍候再試一次。"
msgstr ""

#: ./lib/app/home/_widgets/location_button.dart:233
msgid "新增地點"
msgstr "地点を追加"

#: ./lib/app/settings/location/select/page.dart:33
msgid "縣市"
msgstr "県/市"

#: ./lib/app/settings/location/select/page.dart:44
msgid "目前所在地"
msgstr "現在地"

#: ./lib/app/settings/layout/page.dart:56
msgid "拖曳調整順序"
msgstr ""

#: ./lib/app/settings/layout/page.dart:100
msgid "已停用"
msgstr ""

#: ./lib/a
Download .txt
gitextract_ck59hnj4/

├── .crowdin/
│   ├── location_names.csv
│   ├── strings.pot
│   └── weather_station_names.csv
├── .cursorrules
├── .github/
│   ├── CODEOWNERS
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── Bug.yml
│   │   └── Idea.md
│   ├── pull_request_template.md
│   └── workflows/
│       ├── android.yml
│       ├── claude-code-review.yml
│       ├── claude.yml
│       ├── ios.yml
│       └── lock.yml
├── .gitignore
├── .idx/
│   └── dev.nix
├── .metadata
├── CHANGELOG.md
├── CLAUDE.md
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── analysis_options.yaml
├── android/
│   ├── .gitignore
│   ├── app/
│   │   ├── build.gradle
│   │   ├── google-services.json
│   │   └── src/
│   │       ├── debug/
│   │       │   └── AndroidManifest.xml
│   │       ├── main/
│   │       │   ├── AndroidManifest.xml
│   │       │   ├── kotlin/
│   │       │   │   └── com/
│   │       │   │       └── exptech/
│   │       │   │           └── dpip/
│   │       │   │               └── MainActivity.kt
│   │       │   └── res/
│   │       │       ├── drawable/
│   │       │       │   └── launch_background.xml
│   │       │       ├── mipmap-anydpi-v26/
│   │       │       │   ├── ic_launcher.xml
│   │       │       │   └── ic_launcher_round.xml
│   │       │       ├── raw/
│   │       │       │   ├── eew.ogg
│   │       │       │   ├── eew_alert.ogg
│   │       │       │   ├── eq.ogg
│   │       │       │   ├── info.ogg
│   │       │       │   ├── normal.ogg
│   │       │       │   ├── rain.ogg
│   │       │       │   ├── report.ogg
│   │       │       │   ├── tsunami.ogg
│   │       │       │   ├── warn.ogg
│   │       │       │   └── weather.ogg
│   │       │       ├── values/
│   │       │       │   ├── colors.xml
│   │       │       │   ├── strings.xml
│   │       │       │   └── styles.xml
│   │       │       ├── values-ja/
│   │       │       │   └── strings.xml
│   │       │       ├── values-ko/
│   │       │       │   └── strings.xml
│   │       │       ├── values-night/
│   │       │       │   ├── colors.xml
│   │       │       │   └── styles.xml
│   │       │       ├── values-night-v31/
│   │       │       │   └── styles.xml
│   │       │       ├── values-sw600dp/
│   │       │       │   └── styles.xml
│   │       │       ├── values-v31/
│   │       │       │   └── styles.xml
│   │       │       ├── values-zh/
│   │       │       │   └── strings.xml
│   │       │       ├── values-zh-rTW/
│   │       │       │   └── strings.xml
│   │       │       └── xml/
│   │       │           └── shortcuts.xml
│   │       └── profile/
│   │           └── AndroidManifest.xml
│   ├── build.gradle
│   ├── gradle/
│   │   └── wrapper/
│   │       └── gradle-wrapper.properties
│   ├── gradle.properties
│   └── settings.gradle
├── assets/
│   ├── box.json
│   ├── map/
│   │   └── town.json.zst
│   ├── notify_test.json
│   └── translations/
│       ├── en.po
│       ├── ja.po
│       ├── ko.po
│       ├── location_names.csv
│       ├── ru.po
│       ├── vi.po
│       ├── weather_station_names.csv
│       ├── zh-Hans.po
│       └── zh-Hant.po
├── crowdin.yml
├── devtools_options.yaml
├── docs/
│   └── sound.mdx
├── ios/
│   ├── .gitignore
│   ├── Flutter/
│   │   ├── AppFrameworkInfo.plist
│   │   ├── Debug.xcconfig
│   │   ├── Profile.xcconfig
│   │   └── Release.xcconfig
│   ├── Podfile
│   ├── Runner/
│   │   ├── AppDelegate.swift
│   │   ├── Assets.xcassets/
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   ├── 256.heic
│   │   │   │   ├── 512.heic
│   │   │   │   ├── Contents.json
│   │   │   │   └── Icon-App-1024x1024.heic
│   │   │   └── LaunchImage.imageset/
│   │   │       ├── Contents.json
│   │   │       └── README.md
│   │   ├── Base.lproj/
│   │   │   ├── InfoPlist.strings
│   │   │   ├── LaunchScreen.storyboard
│   │   │   └── Main.storyboard
│   │   ├── GoogleService-Info.plist
│   │   ├── Info.plist
│   │   ├── Runner-Bridging-Header.h
│   │   ├── Runner.entitlements
│   │   ├── RunnerProfile.entitlements
│   │   ├── eew.aiff
│   │   ├── eew_alert.aiff
│   │   ├── en.lproj/
│   │   │   └── Monitor.strings
│   │   ├── eq.aiff
│   │   ├── info.aiff
│   │   ├── ja.lproj/
│   │   │   ├── InfoPlist.strings
│   │   │   └── Monitor.strings
│   │   ├── ko.lproj/
│   │   │   ├── InfoPlist.strings
│   │   │   └── Monitor.strings
│   │   ├── normal.aiff
│   │   ├── rain.aiff
│   │   ├── report.aiff
│   │   ├── tsunami.aiff
│   │   ├── warn.aiff
│   │   ├── weather.aiff
│   │   ├── zh.lproj/
│   │   │   └── InfoPlist.strings
│   │   └── zh_TW.lproj/
│   │       ├── InfoPlist.strings
│   │       └── Monitor.intentdefinition
│   ├── Runner.xcodeproj/
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace/
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcshareddata/
│   │   │       ├── IDEWorkspaceChecks.plist
│   │   │       └── WorkspaceSettings.xcsettings
│   │   └── xcshareddata/
│   │       └── xcschemes/
│   │           └── Runner.xcscheme
│   ├── Runner.xcworkspace/
│   │   ├── contents.xcworkspacedata
│   │   └── xcshareddata/
│   │       ├── IDEWorkspaceChecks.plist
│   │       └── WorkspaceSettings.xcsettings
│   └── RunnerTests/
│       └── RunnerTests.swift
├── lib/
│   ├── api/
│   │   ├── _client.dart
│   │   ├── endpoints/
│   │   │   ├── app.dart
│   │   │   ├── device.dart
│   │   │   ├── earthquake.dart
│   │   │   ├── history.dart
│   │   │   ├── station.dart
│   │   │   ├── tsunami.dart
│   │   │   └── weather.dart
│   │   ├── exptech.dart
│   │   ├── model/
│   │   │   ├── announcement.dart
│   │   │   ├── changelog/
│   │   │   │   └── changelog.dart
│   │   │   ├── crowdin/
│   │   │   │   └── localization_progress.dart
│   │   │   ├── eew.dart
│   │   │   ├── eew_info.dart
│   │   │   ├── history/
│   │   │   │   ├── history.dart
│   │   │   │   ├── intensity_history.dart
│   │   │   │   └── report_history.dart
│   │   │   ├── intensity_listing.dart
│   │   │   ├── location/
│   │   │   │   └── location.dart
│   │   │   ├── meteor_station.dart
│   │   │   ├── notification_record.dart
│   │   │   ├── notify/
│   │   │   │   └── notify_settings.dart
│   │   │   ├── received_notification.dart
│   │   │   ├── report/
│   │   │   │   ├── area_intensity.dart
│   │   │   │   ├── earthquake_report.dart
│   │   │   │   └── partial_earthquake_report.dart
│   │   │   ├── rts/
│   │   │   │   ├── rts.dart
│   │   │   │   ├── rts_intensity.dart
│   │   │   │   └── rts_station.dart
│   │   │   ├── server_status.dart
│   │   │   ├── station.dart
│   │   │   ├── station_info.dart
│   │   │   ├── station_intensity.dart
│   │   │   ├── tsunami/
│   │   │   │   ├── tsunami.dart
│   │   │   │   ├── tsunami_actual.dart
│   │   │   │   ├── tsunami_earthquake.dart
│   │   │   │   ├── tsunami_estimate.dart
│   │   │   │   ├── tsunami_info.dart
│   │   │   │   └── tsunami_list.dart
│   │   │   ├── wave_time.dart
│   │   │   ├── weather/
│   │   │   │   ├── lightning.dart
│   │   │   │   ├── rain.dart
│   │   │   │   └── weather.dart
│   │   │   └── weather_schema.dart
│   │   └── route.dart
│   ├── app/
│   │   ├── changelog/
│   │   │   ├── _widgets/
│   │   │   │   └── update_card.dart
│   │   │   └── page.dart
│   │   ├── debug/
│   │   │   └── logs/
│   │   │       └── page.dart
│   │   ├── home/
│   │   │   ├── _models/
│   │   │   │   └── home_location.dart
│   │   │   ├── _widgets/
│   │   │   │   ├── blurred_button.dart
│   │   │   │   ├── date_timeline_item.dart
│   │   │   │   ├── eew_card.dart
│   │   │   │   ├── forecast_card.dart
│   │   │   │   ├── hero_weather.dart
│   │   │   │   ├── history_timeline_item.dart
│   │   │   │   ├── location_button.dart
│   │   │   │   ├── location_not_set_card.dart
│   │   │   │   ├── location_out_of_service.dart
│   │   │   │   ├── mode_toggle_button.dart
│   │   │   │   ├── radar_card.dart
│   │   │   │   ├── thunderstorm_card.dart
│   │   │   │   ├── weather_header.dart
│   │   │   │   └── wind_card.dart
│   │   │   ├── layout.dart
│   │   │   └── page.dart
│   │   ├── map/
│   │   │   ├── _lib/
│   │   │   │   ├── manager.dart
│   │   │   │   ├── managers/
│   │   │   │   │   ├── lightning.dart
│   │   │   │   │   ├── monitor.dart
│   │   │   │   │   ├── precipitation.dart
│   │   │   │   │   ├── radar.dart
│   │   │   │   │   ├── report.dart
│   │   │   │   │   ├── temperature.dart
│   │   │   │   │   ├── tsunami.dart
│   │   │   │   │   └── wind.dart
│   │   │   │   └── utils.dart
│   │   │   ├── _widgets/
│   │   │   │   ├── layer_toggle.dart
│   │   │   │   ├── layer_toggle_sheet.dart
│   │   │   │   ├── map_legend.dart
│   │   │   │   ├── sheet.dart
│   │   │   │   ├── tos_sheet.dart
│   │   │   │   └── ui/
│   │   │   │       ├── positioned_back_button.dart
│   │   │   │       └── positioned_layer_button.dart
│   │   │   └── page.dart
│   │   ├── settings/
│   │   │   ├── _widgets/
│   │   │   │   └── settings_header.dart
│   │   │   ├── donate/
│   │   │   │   └── page.dart
│   │   │   ├── experimental/
│   │   │   │   └── page.dart
│   │   │   ├── layout/
│   │   │   │   └── page.dart
│   │   │   ├── layout.dart
│   │   │   ├── locale/
│   │   │   │   ├── page.dart
│   │   │   │   └── select/
│   │   │   │       └── page.dart
│   │   │   ├── location/
│   │   │   │   ├── page.dart
│   │   │   │   └── select/
│   │   │   │       ├── [city]/
│   │   │   │       │   └── page.dart
│   │   │   │       └── page.dart
│   │   │   ├── map/
│   │   │   │   └── page.dart
│   │   │   ├── notify/
│   │   │   │   ├── (1.eew)/
│   │   │   │   │   └── eew/
│   │   │   │   │       └── page.dart
│   │   │   │   ├── (2.earthquake)/
│   │   │   │   │   ├── intensity/
│   │   │   │   │   │   └── page.dart
│   │   │   │   │   ├── monitor/
│   │   │   │   │   │   └── page.dart
│   │   │   │   │   └── report/
│   │   │   │   │       └── page.dart
│   │   │   │   ├── (3.weather)/
│   │   │   │   │   ├── advisory/
│   │   │   │   │   │   └── page.dart
│   │   │   │   │   ├── evacuation/
│   │   │   │   │   │   └── page.dart
│   │   │   │   │   └── thunderstorm/
│   │   │   │   │       └── page.dart
│   │   │   │   ├── (4.tsunami)/
│   │   │   │   │   └── tsunami/
│   │   │   │   │       └── page.dart
│   │   │   │   ├── (5.basic)/
│   │   │   │   │   └── announcement/
│   │   │   │   │       └── page.dart
│   │   │   │   ├── _lib/
│   │   │   │   │   └── utils.dart
│   │   │   │   ├── _widgets/
│   │   │   │   │   ├── basic_notify_section.dart
│   │   │   │   │   ├── earthquake_notify_section.dart
│   │   │   │   │   ├── eew_notify_section.dart
│   │   │   │   │   ├── sound_list_tile.dart
│   │   │   │   │   ├── tsunami_notify_section.dart
│   │   │   │   │   └── weather_notify_section.dart
│   │   │   │   └── page.dart
│   │   │   ├── page.dart
│   │   │   ├── proxy/
│   │   │   │   └── page.dart
│   │   │   ├── theme/
│   │   │   │   ├── color/
│   │   │   │   │   └── page.dart
│   │   │   │   ├── mode/
│   │   │   │   │   └── page.dart
│   │   │   │   └── page.dart
│   │   │   └── unit/
│   │   │       └── page.dart
│   │   └── welcome/
│   │       ├── 1-about/
│   │       │   └── page.dart
│   │       ├── 2-exptech/
│   │       │   └── page.dart
│   │       ├── 3-notice/
│   │       │   └── page.dart
│   │       ├── 4-permissions/
│   │       │   └── page.dart
│   │       └── layout.dart
│   ├── app.dart
│   ├── app_old/
│   │   └── page/
│   │       ├── map/
│   │       │   ├── map.dart
│   │       │   ├── meteor.dart
│   │       │   ├── tsunami/
│   │       │   │   ├── tsunami_estimate_list.dart
│   │       │   │   └── tsunami_observed_list.dart
│   │       │   ├── typhoon/
│   │       │   │   └── typhoon.dart
│   │       │   └── weather/
│   │       │       ├── humidity.dart
│   │       │       └── pressure.dart
│   │       ├── me/
│   │       │   ├── developer.dart
│   │       │   └── me.dart
│   │       └── more/
│   │           ├── more.dart
│   │           ├── ranking/
│   │           │   ├── ranking.dart
│   │           │   └── tabs/
│   │           │       ├── precipitation.dart
│   │           │       ├── temperature.dart
│   │           │       └── wind.dart
│   │           └── report_list/
│   │               └── report_list.dart
│   ├── core/
│   │   ├── compass.dart
│   │   ├── device_info.dart
│   │   ├── eew.dart
│   │   ├── fcm.dart
│   │   ├── gps_location.dart
│   │   ├── i18n.dart
│   │   ├── notify.dart
│   │   ├── preference.dart
│   │   ├── providers.dart
│   │   ├── rts.dart
│   │   ├── service.dart
│   │   └── update.dart
│   ├── dialog/
│   │   └── welcome/
│   │       ├── announcement.dart
│   │       └── changelog.dart
│   ├── global.dart
│   ├── main.dart
│   ├── models/
│   │   ├── data.dart
│   │   ├── map/
│   │   │   └── earthquake.dart
│   │   └── settings/
│   │       ├── location.dart
│   │       ├── map.dart
│   │       ├── notify.dart
│   │       └── ui.dart
│   ├── route/
│   │   ├── announcement/
│   │   │   └── announcement.dart
│   │   ├── event_viewer/
│   │   │   ├── intensity.dart
│   │   │   └── thunderstorm.dart
│   │   ├── image_viewer/
│   │   │   └── image_viewer.dart
│   │   ├── log/
│   │   │   └── log.dart
│   │   ├── notification/
│   │   │   └── notification.dart
│   │   ├── report/
│   │   │   ├── report.dart
│   │   │   └── report_sheet_content.dart
│   │   └── status/
│   │       └── status.dart
│   ├── router.dart
│   ├── utils/
│   │   ├── constants.dart
│   │   ├── depth_color.dart
│   │   ├── extensions/
│   │   │   ├── asset_bundle.dart
│   │   │   ├── build_context.dart
│   │   │   ├── color.dart
│   │   │   ├── color_scheme.dart
│   │   │   ├── datetime.dart
│   │   │   ├── go_router.dart
│   │   │   ├── iterable.dart
│   │   │   ├── latlng.dart
│   │   │   ├── locale.dart
│   │   │   ├── maplibre.dart
│   │   │   ├── number.dart
│   │   │   ├── preference.dart
│   │   │   ├── product_detail.dart
│   │   │   ├── string.dart
│   │   │   └── theme.dart
│   │   ├── functions.dart
│   │   ├── geojson.dart
│   │   ├── instrumental_intensity_color.dart
│   │   ├── intensity_color.dart
│   │   ├── intervals.dart
│   │   ├── list_icon.dart
│   │   ├── log.dart
│   │   ├── magnitude_color.dart
│   │   ├── map_utils.dart
│   │   ├── need_location.dart
│   │   ├── page_route_builder/
│   │   │   └── forward_back.dart
│   │   ├── radar_color.dart
│   │   ├── serialization.dart
│   │   ├── shader_selector.dart
│   │   ├── toast.dart
│   │   ├── wallpaper_selector.dart
│   │   └── weather_icon.dart
│   └── widgets/
│       ├── blurred_container.dart
│       ├── chip/
│       │   └── label_chip.dart
│       ├── error/
│       │   └── region_out_of_service.dart
│       ├── fog_shader_background.dart
│       ├── home/
│       │   ├── event_list_route.dart
│       │   └── forecast_weather_card.dart
│       ├── layout.dart
│       ├── list/
│       │   ├── detail_field_tile.dart
│       │   ├── rain_time_selector.dart
│       │   ├── segmented_list.dart
│       │   ├── tile_group_header.dart
│       │   ├── time_selector.dart
│       │   ├── timeline_tile.dart
│       │   └── typhoon_time_selector.dart
│       ├── map/
│       │   ├── intensity_legend.dart
│       │   ├── latlng_altitude.dart
│       │   ├── legend.dart
│       │   ├── map.dart
│       │   └── style.dart
│       ├── markdown.dart
│       ├── report/
│       │   ├── enlargeable_image.dart
│       │   ├── intensity_box.dart
│       │   └── list_item.dart
│       ├── responsive/
│       │   └── responsive_container.dart
│       ├── settings/
│       │   └── theme/
│       │       └── theme_radio_tile.dart
│       ├── sheet/
│       │   ├── bottom_sheet_drag_handle.dart
│       │   ├── morphing_sheet.dart
│       │   ├── morphing_sheet_controller.dart
│       │   └── sheet_container.dart
│       ├── shell_wrapper.dart
│       ├── thunderstorm_shader_background.dart
│       ├── typography.dart
│       └── ui/
│           ├── color_picker.dart
│           ├── icon_container.dart
│           ├── labeled_divider.dart
│           └── loading_icon.dart
├── pubspec.yaml
├── shaders/
│   ├── fog.frag
│   └── thunderstorm.frag
└── tools/
    └── update_translations.sh
Download .txt
SYMBOL INDEX (1446 symbols across 234 files)

FILE: lib/api/_client.dart
  class Rtsnodata (line 4) | class Rtsnodata implements Exception {
  class _ZstdAdapter (line 10) | class _ZstdAdapter implements HttpClientAdapter {
    method fetch (line 17) | Future<ResponseBody> fetch(
    method close (line 49) | void close({bool force = false})
  function _createInnerAdapter (line 52) | IOHttpClientAdapter _createInnerAdapter()
  function _createDio (line 66) | Dio _createDio()

FILE: lib/api/endpoints/app.dart
  function getLocalizationProgress (line 6) | Future<Result<List<CrowdinLocalizationProgress>, String>> getLocalizatio...
  function getReleases (line 17) | Future<Result<List<GithubRelease>, String>> getReleases()
  function getAnnouncement (line 31) | Future<List<Announcement>> getAnnouncement()
  function getNotificationHistory (line 37) | Future<List<NotificationRecord>> getNotificationHistory()
  function getStatus (line 45) | Future<List<ServerStatus>> getStatus()

FILE: lib/api/endpoints/device.dart
  function getNtp (line 6) | Future<int> getNtp()
  function updateDeviceLocation (line 28) | Future<String> updateDeviceLocation({
  function getNotify (line 49) | Future<NotifySettings> getNotify({required String token})
  function setNotify (line 59) | Future<NotifySettings> setNotify({
  function sendNetWorkInfo (line 87) | Future<void> sendNetWorkInfo({

FILE: lib/api/endpoints/earthquake.dart
  function getReport (line 6) | Future<EarthquakeReport> getReport(String reportId)
  function getReportList (line 14) | Future<List<PartialEarthquakeReport>> getReportList({
  function getRts (line 36) | Future<Rts> getRts([int? time])
  function getEew (line 61) | Future<List<Eew>> getEew([int? time])

FILE: lib/api/endpoints/history.dart
  function getRealtime (line 6) | Future<List<History>> getRealtime()
  function getHistory (line 12) | Future<List<History>> getHistory()
  function getRealtimeRegion (line 18) | Future<List<History>> getRealtimeRegion(String region)
  function getHistoryRegion (line 24) | Future<List<History>> getHistoryRegion(String region)
  function getEvent (line 30) | Future<List<History>> getEvent(String id)

FILE: lib/api/endpoints/station.dart
  function getStations (line 6) | Future<Map<String, Station>> getStations()
  function getRadarList (line 14) | Future<List<String>> getRadarList()
  function getMeteorStation (line 20) | Future<MeteorStation> getMeteorStation(String id)

FILE: lib/api/endpoints/tsunami.dart
  function getTsunami (line 6) | Future<Tsunami> getTsunami(String id)
  function getTsunamiList (line 12) | Future<List<String>> getTsunamiList()

FILE: lib/api/endpoints/weather.dart
  function getWeatherList (line 6) | Future<List<String>> getWeatherList()
  function getWeather (line 12) | Future<List<WeatherStation>> getWeather(String time)
  function getWeatherRealtimeByCoords (line 20) | Future<RealtimeWeather> getWeatherRealtimeByCoords(
  function getWeatherForecast (line 31) | Future<Map<String, dynamic>> getWeatherForecast(String region)
  function getRainList (line 37) | Future<List<String>> getRainList()
  function getRain (line 43) | Future<List<RainStation>> getRain(String time)
  function getTyphoonImagesList (line 49) | Future<List> getTyphoonImagesList()
  function getTyphoonGeojson (line 55) | Future<Map<String, dynamic>> getTyphoonGeojson()
  function getLightningList (line 61) | Future<List<String>> getLightningList()
  function getLightning (line 67) | Future<List<Lightning>> getLightning(String time)

FILE: lib/api/exptech.dart
  class ExpTech (line 44) | class ExpTech

FILE: lib/api/model/announcement.dart
  class Announcement (line 5) | @JsonSerializable()
    method toJson (line 25) | Map<String, dynamic> toJson()

FILE: lib/api/model/changelog/changelog.dart
  class GithubRelease (line 5) | @JsonSerializable()
    method toJson (line 63) | Map<String, dynamic> toJson()
  class GithubReleaseAsset (line 66) | @JsonSerializable()
    method toJson (line 106) | Map<String, dynamic> toJson()
  class GithubUser (line 109) | @JsonSerializable()
    method toJson (line 169) | Map<String, dynamic> toJson()
  class GithubReleaseReactions (line 172) | @JsonSerializable()
    method toJson (line 203) | Map<String, dynamic> toJson()

FILE: lib/api/model/crowdin/localization_progress.dart
  class CrowdinLocalizationProgress (line 5) | @JsonSerializable()
    method toJson (line 25) | Map<String, dynamic> toJson()

FILE: lib/api/model/eew.dart
  class Eew (line 7) | @JsonSerializable()
    method toJson (line 43) | Map<String, dynamic> toJson()

FILE: lib/api/model/eew_info.dart
  class EewInfo (line 6) | @JsonSerializable()
    method toJson (line 47) | Map<String, dynamic> toJson()

FILE: lib/api/model/history/history.dart
  type HistoryType (line 10) | enum HistoryType {
  class History (line 41) | @JsonSerializable()
    method toJson (line 97) | Map<String, dynamic> toJson()
  class InfoTime (line 100) | @JsonSerializable()
    method toJson (line 115) | Map<String, dynamic> toJson()
  class InfoText (line 118) | @JsonSerializable()
    method toJson (line 127) | Map<String, dynamic> toJson()
  class InfoTextValue (line 130) | @JsonSerializable()
    method toJson (line 139) | Map<String, dynamic> toJson()

FILE: lib/api/model/history/intensity_history.dart
  class IntensityHistoryAddition (line 7) | @JsonSerializable()
    method toJson (line 28) | Map<String, dynamic> toJson()
  class IntensityHistory (line 31) | @JsonSerializable()
    method toJson (line 50) | Map<String, dynamic> toJson()

FILE: lib/api/model/history/report_history.dart
  class ReportHistoryAddition (line 6) | @JsonSerializable()
    method toJson (line 15) | Map<String, dynamic> toJson()
  class ReportHistory (line 18) | @JsonSerializable()
    method toJson (line 37) | Map<String, dynamic> toJson()

FILE: lib/api/model/intensity_listing.dart
  class IntensityListing (line 5) | @JsonSerializable()
    method toJson (line 21) | Map<String, dynamic> toJson()

FILE: lib/api/model/location/location.dart
  class Location (line 29) | @JsonSerializable()
    method toJson (line 193) | Map<String, dynamic> toJson()
    method tryParse (line 219) | Location? tryParse(String input)
    method _calculateMatchScore (line 272) | int _calculateMatchScore(String input, String target)
    method _normalizeChineseCharacters (line 306) | String _normalizeChineseCharacters(String input)

FILE: lib/api/model/meteor_station.dart
  class MeteorStation (line 5) | @JsonSerializable()
    method toJson (line 46) | Map<String, dynamic> toJson()
  class MeteorStationInfo (line 49) | @JsonSerializable()
    method toJson (line 69) | Map<String, dynamic> toJson()

FILE: lib/api/model/notification_record.dart
  class NotificationRecord (line 5) | @JsonSerializable()
    method toJson (line 26) | Map<String, dynamic> toJson()

FILE: lib/api/model/notify/notify_settings.dart
  class NotifySettings (line 3) | class NotifySettings {
    method toJson (line 40) | List<int> toJson()

FILE: lib/api/model/received_notification.dart
  class ReceivedNotification (line 1) | class ReceivedNotification {

FILE: lib/api/model/report/area_intensity.dart
  class AreaIntensity (line 6) | @JsonSerializable()
    method toJson (line 19) | Map<String, dynamic> toJson()

FILE: lib/api/model/report/earthquake_report.dart
  class EarthquakeReport (line 13) | @JsonSerializable()
    method toJson (line 54) | Map<String, dynamic> toJson()
    method getMaxIntensity (line 164) | int getMaxIntensity()
    method getLocation (line 176) | String getLocation()
    method convertLatLon (line 187) | String convertLatLon()
    method toGeoJson (line 211) | GeoJsonBuilder toGeoJson()

FILE: lib/api/model/report/partial_earthquake_report.dart
  class PartialEarthquakeReport (line 11) | @JsonSerializable()
    method toJson (line 57) | Map<String, dynamic> toJson()
    method extractLocation (line 152) | String extractLocation()
    method getReportColor (line 163) | Color getReportColor()
    method toGeoJsonFeature (line 176) | GeoJsonFeatureBuilder toGeoJsonFeature()

FILE: lib/api/model/rts/rts.dart
  class Rts (line 10) | @JsonSerializable()
    method toJson (line 36) | Map<String, dynamic> toJson()
    method toGeoJsonBuilder (line 38) | GeoJsonBuilder toGeoJsonBuilder()

FILE: lib/api/model/rts/rts_intensity.dart
  class RtsIntensity (line 5) | @JsonSerializable()
    method toJson (line 17) | Map<String, dynamic> toJson()

FILE: lib/api/model/rts/rts_station.dart
  class RtsStation (line 6) | @JsonSerializable()
    method toJson (line 34) | Map<String, dynamic> toJson()

FILE: lib/api/model/server_status.dart
  class ServerStatus (line 6) | @JsonSerializable()
    method toJson (line 18) | Map<String, dynamic> toJson()
  class ServiceStatus (line 26) | @JsonSerializable()
    method toJson (line 35) | Map<String, dynamic> toJson()

FILE: lib/api/model/station.dart
  class Station (line 6) | @JsonSerializable()
    method toJson (line 23) | Map<String, dynamic> toJson()

FILE: lib/api/model/station_info.dart
  class StationInfo (line 6) | @JsonSerializable()
    method toJson (line 33) | Map<String, dynamic> toJson()

FILE: lib/api/model/station_intensity.dart
  class StationIntensity (line 8) | @JsonSerializable()
    method toJson (line 30) | Map<String, dynamic> toJson()
    method toGeoJsonFeature (line 32) | GeoJsonFeatureBuilder toGeoJsonFeature()

FILE: lib/api/model/tsunami/tsunami.dart
  class Tsunami (line 7) | @JsonSerializable()
    method toJson (line 82) | Map<String, dynamic> toJson()

FILE: lib/api/model/tsunami/tsunami_actual.dart
  class TsunamiActual (line 5) | @JsonSerializable()
    method toJson (line 68) | Map<String, dynamic> toJson()

FILE: lib/api/model/tsunami/tsunami_earthquake.dart
  class TsunamiEarthquake (line 5) | @JsonSerializable()
    method toJson (line 76) | Map<String, dynamic> toJson()

FILE: lib/api/model/tsunami/tsunami_estimate.dart
  class TsunamiEstimate (line 5) | @JsonSerializable()
    method toJson (line 41) | Map<String, dynamic> toJson()

FILE: lib/api/model/tsunami/tsunami_info.dart
  class TsunamiInfo (line 4) | class TsunamiInfo {
    method toJson (line 32) | Map<String, dynamic> toJson()

FILE: lib/api/model/tsunami/tsunami_list.dart
  class TsunamiList (line 5) | @JsonSerializable()
    method toJson (line 11) | Map<String, dynamic> toJson()

FILE: lib/api/model/wave_time.dart
  class WaveTime (line 1) | class WaveTime {

FILE: lib/api/model/weather/lightning.dart
  class Lightning (line 6) | @JsonSerializable()
    method toJson (line 18) | Map<String, dynamic> toJson()
    method toFeatureBuilder (line 20) | GeoJsonFeatureBuilder<GeoJsonFeatureType> toFeatureBuilder(int current...
  class Location (line 39) | @JsonSerializable()
    method toJson (line 48) | Map<String, dynamic> toJson()

FILE: lib/api/model/weather/rain.dart
  class RainStation (line 9) | @JsonSerializable()
    method toJson (line 27) | Map<String, dynamic> toJson()
    method toFeatureBuilder (line 29) | GeoJsonFeatureBuilder toFeatureBuilder()
  class StationInfo (line 47) | @JsonSerializable()
    method toJson (line 67) | Map<String, dynamic> toJson()
  class RainData (line 73) | @JsonSerializable()
    method toJson (line 108) | Map<String, dynamic> toJson()

FILE: lib/api/model/weather/weather.dart
  class WeatherStation (line 8) | @JsonSerializable()
    method toJson (line 31) | Map<String, dynamic> toJson()
    method toFeatureBuilder (line 33) | GeoJsonFeatureBuilder toFeatureBuilder()
  class StationInfo (line 55) | @JsonSerializable()
    method toJson (line 75) | Map<String, dynamic> toJson()
  class WeatherData (line 80) | @JsonSerializable()
    method toJson (line 94) | Map<String, dynamic> toJson()
  class Wind (line 97) | @JsonSerializable()
    method toJson (line 106) | Map<String, dynamic> toJson()
  class AirCondition (line 109) | @JsonSerializable()
    method toJson (line 124) | Map<String, dynamic> toJson()
  class DailyTemperature (line 127) | @JsonSerializable()
    method toJson (line 136) | Map<String, dynamic> toJson()
  class TemperatureRecord (line 139) | @JsonSerializable()
    method toJson (line 149) | Map<String, dynamic> toJson()

FILE: lib/api/model/weather_schema.dart
  class RealtimeWeatherStation (line 5) | @JsonSerializable()
    method toJson (line 23) | Map<String, dynamic> toJson()
  class RealtimeWeatherWind (line 26) | @JsonSerializable()
    method toJson (line 40) | Map<String, dynamic> toJson()
  class RealtimeWeatherGust (line 43) | @JsonSerializable()
    method toJson (line 52) | Map<String, dynamic> toJson()
  class RealtimeWeatherData (line 55) | @JsonSerializable()
    method toJson (line 83) | Map<String, dynamic> toJson()
  class RealtimeWeather (line 86) | @JsonSerializable()
    method toJson (line 104) | Map<String, dynamic> toJson()

FILE: lib/api/route.dart
  class _BaseUrlGenerator (line 3) | class _BaseUrlGenerator {
    method call (line 11) | String call([int? i])
    method toString (line 26) | String toString()
  function radarTile (line 41) | String radarTile(String timestamp)

FILE: lib/app.dart
  class DpipApp (line 28) | class DpipApp extends StatefulWidget {
    method createState (line 34) | State<DpipApp> createState()
  class _DpipAppState (line 37) | class _DpipAppState extends State<DpipApp> with WidgetsBindingObserver {
    method _checkUpdate (line 40) | Future<void> _checkUpdate()
    method _checkNotificationPermission (line 64) | Future<void> _checkNotificationPermission()
    method _tryHandleInitialShortcut (line 82) | void _tryHandleInitialShortcut()
    method didChangeAppLifecycleState (line 99) | void didChangeAppLifecycleState(AppLifecycleState state)
    method initState (line 104) | void initState()
    method build (line 121) | Widget build(BuildContext context)
    method dispose (line 202) | void dispose()

FILE: lib/app/changelog/_widgets/update_card.dart
  class UpdateCard (line 11) | class UpdateCard extends StatelessWidget {
    method build (line 32) | Widget build(BuildContext context)

FILE: lib/app/changelog/page.dart
  class ChangelogPage (line 24) | class ChangelogPage extends StatefulWidget {
    method createState (line 29) | State<ChangelogPage> createState()
  class _ChangelogPageState (line 32) | class _ChangelogPageState extends State<ChangelogPage> {
    method _refresh (line 38) | Future<void> _refresh()
    method initState (line 48) | void initState()
    method build (line 54) | Widget build(BuildContext context)
  class _ReleaseHeaderDelegate (line 147) | class _ReleaseHeaderDelegate extends SliverPersistentHeaderDelegate {
    method build (line 161) | Widget build(
    method shouldRebuild (line 225) | bool shouldRebuild(covariant _ReleaseHeaderDelegate oldDelegate)

FILE: lib/app/debug/logs/page.dart
  class AppDebugLogsPage (line 14) | class AppDebugLogsPage extends StatelessWidget {
    method build (line 19) | Widget build(BuildContext context)

FILE: lib/app/home/_models/home_location.dart
  class HomeLocationModel (line 11) | class HomeLocationModel extends ChangeNotifier {
    method setTemporaryCode (line 20) | void setTemporaryCode(String? code)

FILE: lib/app/home/_widgets/blurred_button.dart
  class BlurredTextButton (line 10) | class BlurredTextButton extends StatelessWidget {
    method build (line 46) | Widget build(BuildContext context)
  class BlurredIconButton (line 86) | class BlurredIconButton extends StatelessWidget {
    method build (line 122) | Widget build(BuildContext context)

FILE: lib/app/home/_widgets/date_timeline_item.dart
  class DateTimelineItem (line 13) | class DateTimelineItem extends StatelessWidget {
    method _showModeMenu (line 43) | void _showModeMenu(BuildContext context)
    method build (line 105) | Widget build(BuildContext context)

FILE: lib/app/home/_widgets/eew_card.dart
  class EewCard (line 25) | class EewCard extends StatefulWidget {
    method createState (line 33) | State<EewCard> createState()
  function _updateCountdown (line 48) | void _updateCountdown()
  function initState (line 59) | void initState()
  function build (line 85) | Widget build(BuildContext context)

FILE: lib/app/home/_widgets/forecast_card.dart
  function build (line 28) | Widget build(BuildContext context)
  function build (line 139) | Widget build(BuildContext context)

FILE: lib/app/home/_widgets/hero_weather.dart
  class HeroWeather (line 18) | class HeroWeather extends StatelessWidget {
    method build (line 33) | Widget build(BuildContext context)
    method _buildLoadingState (line 56) | Widget _buildLoadingState(BuildContext context)
    method _buildWeatherContent (line 90) | Widget _buildWeatherContent(BuildContext context)
    method _buildEmptyState (line 169) | Widget _buildEmptyState(BuildContext context)
    method _getWeatherIcon (line 206) | IconData _getWeatherIcon(int code)

FILE: lib/app/home/_widgets/history_timeline_item.dart
  class HistoryTimelineItem (line 17) | class HistoryTimelineItem extends StatelessWidget {
    method build (line 40) | Widget build(BuildContext context)

FILE: lib/app/home/_widgets/location_button.dart
  class LocationButton (line 22) | class LocationButton extends StatelessWidget {
    method build (line 27) | Widget build(BuildContext context)
    method _showLocationMenu (line 58) | void _showLocationMenu(
  class _LocationMenuSheet (line 96) | class _LocationMenuSheet extends StatefulWidget {
    method createState (line 114) | State<_LocationMenuSheet> createState()
  function _buildCityList (line 133) | Widget _buildCityList(BuildContext context)
  function _buildTownList (line 234) | Widget _buildTownList(BuildContext context)
  function build (line 270) | Widget build(BuildContext context)

FILE: lib/app/home/_widgets/location_not_set_card.dart
  class LocationNotSetCard (line 14) | class LocationNotSetCard extends StatelessWidget {
    method build (line 19) | Widget build(BuildContext context)

FILE: lib/app/home/_widgets/location_out_of_service.dart
  class LocationOutOfServiceCard (line 11) | class LocationOutOfServiceCard extends StatelessWidget {
    method build (line 16) | Widget build(BuildContext context)

FILE: lib/app/home/_widgets/mode_toggle_button.dart
  type HomeMode (line 12) | enum HomeMode {
  class ModeToggleButton (line 67) | class ModeToggleButton extends StatelessWidget {
    method _showModeMenu (line 81) | void _showModeMenu(BuildContext context)
    method build (line 138) | Widget build(BuildContext context)

FILE: lib/app/home/_widgets/radar_card.dart
  class RadarMapCard (line 25) | class RadarMapCard extends StatefulWidget {
    method createState (line 30) | State<RadarMapCard> createState()
  function _setupMapLayers (line 39) | Future<void> _setupMapLayers()
  function initState (line 75) | void initState()
  function didChangeDependencies (line 82) | void didChangeDependencies()
  function build (line 91) | Widget build(BuildContext context)

FILE: lib/app/home/_widgets/thunderstorm_card.dart
  class ThunderstormCard (line 20) | class ThunderstormCard extends StatelessWidget {
    method build (line 28) | Widget build(BuildContext context)

FILE: lib/app/home/_widgets/weather_header.dart
  class WeatherHeader (line 24) | class WeatherHeader extends StatelessWidget {
    method skeleton (line 32) | Widget skeleton(BuildContext context)
    method build (line 86) | Widget build(BuildContext context)

FILE: lib/app/home/_widgets/wind_card.dart
  class WindCard (line 67) | class WindCard extends StatefulWidget {
    method createState (line 75) | State<WindCard> createState()
  class _WindCardState (line 78) | class _WindCardState extends State<WindCard> with WidgetsBindingObserver...
    method initState (line 85) | void initState()
    method didChangeDependencies (line 92) | void didChangeDependencies()
    method didChangeAppLifecycleState (line 104) | void didChangeAppLifecycleState(AppLifecycleState state)
    method didPopNext (line 115) | void didPopNext()
    method didPush (line 121) | void didPush()
    method didPushNext (line 131) | void didPushNext()
    method _initCompass (line 137) | void _initCompass()
    method _getWindDirectionAngle (line 177) | double _getWindDirectionAngle(String direction)
    method _getBeaufortDescription (line 179) | String _getBeaufortDescription(int beaufort)
    method _buildCompass (line 196) | Widget _buildCompass(
    method _buildCompactWindInfo (line 295) | Widget _buildCompactWindInfo(
    method _buildMagneticInfo (line 358) | Widget _buildMagneticInfo(BuildContext context)
    method build (line 494) | Widget build(BuildContext context)
    method shouldRepaint (line 646) | bool shouldRepaint(covariant _WindArrowPainter oldDelegate)

FILE: lib/app/home/layout.dart
  class HomeLayout (line 10) | class HomeLayout extends StatelessWidget {
    method build (line 18) | Widget build(BuildContext context)

FILE: lib/app/home/page.dart
  class HomePage (line 55) | class HomePage extends StatefulWidget {
    method createState (line 60) | State<HomePage> createState()
  function _measureFirstCard (line 96) | void _measureFirstCard()
  function _onSheetChanged (line 135) | void _onSheetChanged()
  function _checkVersion (line 150) | void _checkVersion()
  function _refresh (line 174) | Future<void> _refresh()
  function _reloadLocationData (line 214) | Future<void> _reloadLocationData()
  function _checkIfOutOfService (line 231) | bool _checkIfOutOfService(String? code)
  function _fetchWeather (line 242) | Future<void> _fetchWeather(String? code)
  function _fetchRealtimeRegion (line 291) | Future<void> _fetchRealtimeRegion(String? code)
  function _fetchHistory (line 311) | Future<void> _fetchHistory(String? code, bool isOutOfService)
  function _onModeChanged (line 336) | void _onModeChanged(HomeMode mode)
  function _buildDraggableSheet (line 341) | Widget _buildDraggableSheet(List<HomeDisplaySection> homeSections)
  function _buildHeroSection (line 396) | Widget _buildHeroSection()
  function _buildContentSection (line 430) | Widget _buildContentSection(List<HomeDisplaySection> homeSections)
  function _buildCommunityCards (line 502) | Widget _buildCommunityCards()

FILE: lib/app/map/_lib/manager.dart
  class MapLayerManager (line 12) | abstract class MapLayerManager {
    method setup (line 34) | Future<void> setup()
    method tick (line 37) | void tick()
    method hide (line 40) | Future<void> hide()
    method show (line 43) | Future<void> show()
    method remove (line 46) | Future<void> remove()
    method dispose (line 49) | void dispose()
    method onPopInvoked (line 54) | void onPopInvoked()
    method build (line 59) | Widget build(BuildContext context)

FILE: lib/app/map/_lib/managers/lightning.dart
  class LightningMapLayerManager (line 30) | class LightningMapLayerManager extends MapLayerManager {
    method setLightningTime (line 50) | Future<void> setLightningTime(String time)
    method _focus (line 72) | Future<void> _focus()
    method _fetchData (line 90) | Future<void> _fetchData()
    method setup (line 104) | Future<void> setup()
    method hide (line 199) | Future<void> hide()
    method show (line 217) | Future<void> show()
    method remove (line 240) | Future<void> remove()
    method build (line 259) | Widget build(BuildContext context)
  function build (line 271) | Widget build(BuildContext context)

FILE: lib/app/map/_lib/managers/monitor.dart
  class MonitorMapLayerManager (line 38) | class MonitorMapLayerManager extends MapLayerManager {
    method _dataStatus (line 111) | bool _dataStatus()
    method _setupBlinkTimer (line 166) | void _setupBlinkTimer()
    method _getFocusBounds (line 213) | List<LatLng> _getFocusBounds()
    method _shouldZoomToBounds (line 236) | bool _shouldZoomToBounds(LatLngBounds newBounds)
    method _updateMapBounds (line 259) | Future<void> _updateMapBounds(List<LatLng> coordinates)
    method _focusReset (line 302) | Future<void> _focusReset()
    method _autoFocus (line 310) | Future<void> _autoFocus()
    method _startFocusTimer (line 326) | void _startFocusTimer()
    method _stopFocusTimer (line 337) | void _stopFocusTimer()
    method setup (line 343) | Future<void> setup()
    method tick (line 814) | void tick()
    method _updateDisplayTime (line 842) | void _updateDisplayTime()
    method _onDataChanged (line 869) | void _onDataChanged()
    method _updateRtsFromCache (line 886) | Future<void> _updateRtsFromCache()
    method _updateEewFromCache (line 952) | Future<void> _updateEewFromCache()
    method _clearEew (line 1034) | Future<void> _clearEew()
    method hide (line 1068) | Future<void> hide()
    method show (line 1101) | Future<void> show()
    method remove (line 1134) | Future<void> remove()
    method dispose (line 1196) | void dispose()
    method build (line 1211) | Widget build(BuildContext context)
  class MonitorMapLayerSheet (line 1215) | class MonitorMapLayerSheet extends StatefulWidget {
    method createState (line 1223) | State<MonitorMapLayerSheet> createState()
  function _toggleCollapse (line 1234) | void _toggleCollapse()
  function _updateCountdown (line 1238) | void _updateCountdown()
  function _buildAlertBadge (line 1246) | Widget _buildAlertBadge(
  function _buildEewContent (line 1307) | Widget _buildEewContent(Eew data, int eewCount, bool hasLocation)
  function _buildLocationDetails (line 1456) | Widget _buildLocationDetails()

FILE: lib/app/map/_lib/managers/precipitation.dart
  class RainData (line 29) | class RainData {
  class PrecipitationMapLayerManager (line 64) | class PrecipitationMapLayerManager extends MapLayerManager {
    method setPrecipitationTime (line 107) | Future<void> setPrecipitationTime(String time)
    method setPrecipitationInterval (line 132) | Future<void> setPrecipitationInterval(String interval)
    method _focus (line 158) | Future<void> _focus()
    method _fetchData (line 176) | Future<void> _fetchData()
    method setup (line 194) | Future<void> setup()
    method hide (line 338) | Future<void> hide()
    method show (line 358) | Future<void> show()
    method remove (line 383) | Future<void> remove()
    method build (line 406) | Widget build(BuildContext context)
  function build (line 418) | Widget build(BuildContext context)
  function getIntervalLabel (line 419) | String getIntervalLabel(String interval)

FILE: lib/app/map/_lib/managers/radar.dart
  class RadarMapLayerManager (line 29) | class RadarMapLayerManager extends MapLayerManager {
    method updateRadarTime (line 70) | Future<void> updateRadarTime(String time)
    method setPlayStartTime (line 113) | void setPlayStartTime(String time)
    method _updateRadarTileUrl (line 185) | Future<void> _updateRadarTileUrl(String time)
    method _setupAndShowLayer (line 209) | Future<void> _setupAndShowLayer(String time)
    method _hideLayer (line 243) | Future<void> _hideLayer(String time)
    method _preloadAdjacentLayers (line 253) | Future<void> _preloadAdjacentLayers(String currentTime)
    method toggleAutoPlay (line 288) | void toggleAutoPlay()
    method startAutoPlay (line 298) | void startAutoPlay()
    method stopAutoPlay (line 340) | void stopAutoPlay()
    method _playNext (line 356) | void _playNext()
    method _focus (line 399) | Future<void> _focus()
    method _fetchData (line 418) | Future<void> _fetchData()
    method setup (line 428) | Future<void> setup()
    method hide (line 447) | Future<void> hide()
    method show (line 464) | Future<void> show()
    method remove (line 485) | Future<void> remove()
    method dispose (line 509) | void dispose()
    method build (line 520) | Widget build(BuildContext context)
  class _LegendItem (line 528) | class _LegendItem extends StatelessWidget {
    method build (line 540) | Widget build(BuildContext context)
  function build (line 575) | Widget build(BuildContext context)

FILE: lib/app/map/_lib/managers/report.dart
  class ReportMapLayerManager (line 42) | class ReportMapLayerManager extends MapLayerManager {
    method setReport (line 84) | Future<void> setReport(String? reportId, {bool focus = true})
    method _focus (line 114) | Future<void> _focus([EarthquakeReport? report])
    method _fetchData (line 155) | Future<void> _fetchData({bool reset = false})
    method loadMore (line 202) | Future<void> loadMore()
    method _getPartialContentKey (line 208) | String? _getPartialContentKey()
    method setup (line 216) | Future<void> setup()
    method hide (line 292) | Future<void> hide()
    method show (line 311) | Future<void> show()
    method remove (line 337) | Future<void> remove()
    method onPopInvoked (line 355) | void onPopInvoked()
    method _addReport (line 362) | Future<void> _addReport(
    method _removeReport (line 426) | Future<void> _removeReport(
    method build (line 462) | Widget build(BuildContext context)
  class ReportMapLayerSheet (line 466) | class ReportMapLayerSheet extends StatefulWidget {
    method createState (line 474) | State<ReportMapLayerSheet> createState()
  class SafeImageSection (line 479) | class SafeImageSection extends StatefulWidget {
    method createState (line 490) | State<SafeImageSection> createState()
  class _SafeImageSectionState (line 493) | class _SafeImageSectionState extends State<SafeImageSection> {
    method _onImageError (line 497) | void _onImageError()
    method _retry (line 507) | void _retry()
    method build (line 515) | Widget build(BuildContext context)
  class _GeneratingView (line 527) | class _GeneratingView extends StatelessWidget {
    method build (line 535) | Widget build(BuildContext context)
  function initState (line 559) | void initState()
  function dispose (line 565) | void dispose()
  function _onScroll (line 571) | void _onScroll()
  function _onShouldExpandChanged (line 585) | void _onShouldExpandChanged()
  function build (line 602) | Widget build(BuildContext context)

FILE: lib/app/map/_lib/managers/temperature.dart
  class TemperatureData (line 31) | class TemperatureData {
  class TemperatureMapLayerManager (line 66) | class TemperatureMapLayerManager extends MapLayerManager {
    method setTemperatureTime (line 93) | Future<void> setTemperatureTime(String time)
    method _focus (line 115) | Future<void> _focus()
    method _fetchData (line 133) | Future<void> _fetchData()
    method setup (line 151) | Future<void> setup()
    method hide (line 304) | Future<void> hide()
    method show (line 321) | Future<void> show()
    method remove (line 343) | Future<void> remove()
    method build (line 362) | Widget build(BuildContext context)
  class TemperatureMapLayerSheet (line 366) | class TemperatureMapLayerSheet extends StatelessWidget {
    method build (line 374) | Widget build(BuildContext context)

FILE: lib/app/map/_lib/managers/tsunami.dart
  class TsunamiMapLayerManager (line 30) | class TsunamiMapLayerManager extends MapLayerManager {
    method setup (line 41) | Future<void> setup()
    method hide (line 68) | Future<void> hide()
    method show (line 84) | Future<void> show()
    method remove (line 100) | Future<void> remove()
    method build (line 117) | Widget build(BuildContext context)
  class TsunamiMapLayerSheet (line 121) | class TsunamiMapLayerSheet extends StatefulWidget {
    method createState (line 129) | State<TsunamiMapLayerSheet> createState()
  class _TsunamiMapLayerSheetState (line 132) | class _TsunamiMapLayerSheetState extends State<TsunamiMapLayerSheet> {
    method _initMap (line 144) | Future<void> _initMap(MapLibreMapController controller)
    method _loadMap (line 148) | Future<void> _loadMap()
    method heightToColor (line 176) | String heightToColor(int height)
    method _convertTimestamp (line 190) | DateTime _convertTimestamp(int timestamp)
    method addTsunamiObservationPoints (line 194) | Future<void> addTsunamiObservationPoints(Tsunami tsunami)
    method _addUserLocationMarker (line 314) | Future<void> _addUserLocationMarker()
    method refreshTsunami (line 372) | Future<Tsunami?> refreshTsunami()
    method getTime (line 394) | String getTime()
    method convertLatLon (line 401) | String convertLatLon(double latitude, double longitude)
    method dispose (line 427) | void dispose()
    method generateTsunamiOptions (line 433) | List<String> generateTsunamiOptions()
    method build (line 442) | Widget build(BuildContext context)

FILE: lib/app/map/_lib/managers/wind.dart
  class WindData (line 27) | class WindData {
  class WindMapLayerManager (line 54) | class WindMapLayerManager extends MapLayerManager {
    method setWindTime (line 80) | Future<void> setWindTime(String time)
    method _fetchData (line 98) | Future<void> _fetchData()
    method setup (line 108) | Future<void> setup()
    method hide (line 237) | Future<void> hide()
    method show (line 257) | Future<void> show()
    method remove (line 280) | Future<void> remove()
    method build (line 299) | Widget build(BuildContext context)
  function build (line 311) | Widget build(BuildContext context)

FILE: lib/app/map/_lib/utils.dart
  type MapLayer (line 8) | enum MapLayer {
  function isValidLayerCombination (line 83) | bool isValidLayerCombination(Set<MapLayer> layers)
  class MapSourceIds (line 105) | class MapSourceIds {
    method radar (line 109) | String radar([String? time])
    method report (line 113) | String report([String? time])
    method tsunami (line 116) | String tsunami([String? code])
    method rts (line 120) | String rts([String? time])
    method eew (line 123) | String eew([String? code])
    method temperature (line 126) | String temperature([String? time])
    method precipitation (line 130) | String precipitation([String? time])
    method wind (line 134) | String wind([String? time])
    method lightning (line 137) | String lightning([String? time])
    method intensity (line 140) | String intensity()
    method intensity0 (line 143) | String intensity0()
    method box (line 146) | String box()
  class MapLayerIds (line 153) | class MapLayerIds {
    method radar (line 157) | String radar([String? time])
    method report (line 161) | String report([String? time])
    method tsunami (line 164) | String tsunami([String? code])
    method rts (line 168) | String rts([String? time])
    method eew (line 171) | String eew([String? code])
    method temperature (line 174) | String temperature([String? time])
    method precipitation (line 177) | String precipitation([String? time])
    method wind (line 181) | String wind([String? time])
    method lightning (line 184) | String lightning([String? time])
    method intensity (line 187) | String intensity()
    method intensity0 (line 190) | String intensity0()
    method box (line 193) | String box()
  function cleanupMap (line 199) | Future<void> cleanupMap(MapLibreMapController controller)

FILE: lib/app/map/_widgets/layer_toggle.dart
  class LayerToggle (line 13) | class LayerToggle extends StatelessWidget {
    method build (line 36) | Widget build(BuildContext context)

FILE: lib/app/map/_widgets/layer_toggle_sheet.dart
  class LayerToggleSheet (line 16) | class LayerToggleSheet extends StatefulWidget {
    method createState (line 39) | State<LayerToggleSheet> createState()
  class _LayerToggleSheetState (line 42) | class _LayerToggleSheetState extends State<LayerToggleSheet> {
    method didUpdateWidget (line 47) | void didUpdateWidget(LayerToggleSheet oldWidget)
    method _toggleLayer (line 59) | void _toggleLayer(MapLayer layer, {bool overlay = false})
    method _setBaseMap (line 87) | void _setBaseMap(BaseMapType baseMap)
    method build (line 93) | Widget build(BuildContext context)

FILE: lib/app/map/_widgets/map_legend.dart
  class ColorLegendItem (line 12) | class ColorLegendItem {
  class ColorLegend (line 70) | class ColorLegend extends StatelessWidget {
    method build (line 93) | Widget build(BuildContext context)
  class LegendItem (line 180) | class LegendItem {
  class Legend (line 195) | class Legend extends StatelessWidget {
    method build (line 218) | Widget build(BuildContext context)
  class OutlinedIcon (line 263) | class OutlinedIcon extends StatelessWidget {
    method build (line 280) | Widget build(BuildContext context)

FILE: lib/app/map/_widgets/sheet.dart
  class CustomSheet (line 12) | class CustomSheet extends StatefulWidget {
    method createState (line 25) | State<CustomSheet> createState()
  class _CustomSheetState (line 28) | class _CustomSheetState extends State<CustomSheet> {
    method build (line 32) | Widget build(BuildContext context)

FILE: lib/app/map/_widgets/tos_sheet.dart
  class TosBottomSheet (line 13) | class TosBottomSheet extends StatefulWidget {
    method createState (line 18) | State<TosBottomSheet> createState()
  function initState (line 26) | void initState()
  function build (line 36) | Widget build(BuildContext context)

FILE: lib/app/map/_widgets/ui/positioned_back_button.dart
  class PositionedBackButton (line 10) | class PositionedBackButton extends StatelessWidget {
    method build (line 18) | Widget build(BuildContext context)

FILE: lib/app/map/_widgets/ui/positioned_layer_button.dart
  class PositionedLayerButton (line 16) | class PositionedLayerButton extends StatelessWidget {
    method build (line 44) | Widget build(BuildContext context)

FILE: lib/app/map/page.dart
  class MapPageOptions (line 28) | class MapPageOptions {
  class MapPage (line 61) | class MapPage extends StatefulWidget {
    method route (line 70) | String route({MapPageOptions? options})
    method createState (line 86) | State<MapPage> createState()
  class _MapPageState (line 89) | class _MapPageState extends State<MapPage> with TickerProviderStateMixin {
    method _setupTicker (line 101) | void _setupTicker()
    method syncTimeToRadar (line 137) | Future<void> syncTimeToRadar(String time)
    method _setupWeatherLayerTimeSync (line 150) | void _setupWeatherLayerTimeSync()
    method _syncRadarTimeOnCombination (line 178) | Future<void> _syncRadarTimeOnCombination(MapLayer newLayer)
    method getLayerManager (line 215) | T? getLayerManager<T extends MapLayerManager>(MapLayer layer)
    method toggleLayer (line 224) | Future<void> toggleLayer(
    method _performToggleLayer (line 237) | Future<void> _performToggleLayer(
    method setBaseMapType (line 275) | Future<void> setBaseMapType(BaseMapType baseMapType)
    method setLayers (line 284) | Future<void> setLayers(Set<MapLayer> layers)
    method onMapCreated (line 299) | void onMapCreated(MapLibreMapController controller)
    method onStyleLoaded (line 306) | void onStyleLoaded()
    method _handleBack (line 349) | void _handleBack()
    method initState (line 365) | void initState()
    method build (line 372) | Widget build(BuildContext context)
    method dispose (line 402) | void dispose()
  class MapMonitorPage (line 415) | class MapMonitorPage extends StatelessWidget {
    method build (line 423) | Widget build(BuildContext context)

FILE: lib/app/settings/_widgets/settings_header.dart
  class SettingsHeader (line 25) | class SettingsHeader extends StatelessWidget {
    method build (line 49) | Widget build(BuildContext context)

FILE: lib/app/settings/donate/page.dart
  class SettingsDonatePage (line 22) | class SettingsDonatePage extends StatefulWidget {
    method createState (line 27) | State<SettingsDonatePage> createState()
  function refresh (line 49) | Future<void> refresh()
  function onPurchaseUpdate (line 71) | void onPurchaseUpdate(List<PurchaseDetails> list)
  function _buildHeader (line 111) | Widget _buildHeader()

FILE: lib/app/settings/experimental/page.dart
  class SettingsExperimentalPage (line 18) | class SettingsExperimentalPage extends StatefulWidget {
    method createState (line 23) | State<SettingsExperimentalPage> createState()
  function _showEnableWarningDialog (line 30) | Future<void> _showEnableWarningDialog({
  function _toggleEewAllSource (line 45) | void _toggleEewAllSource(bool value)
  function _toggleLaunchToMonitor (line 60) | void _toggleLaunchToMonitor(bool value)
  function _buildHeader (line 75) | Widget _buildHeader(BuildContext context)

FILE: lib/app/settings/layout.dart
  class SettingsLayout (line 20) | class SettingsLayout extends StatefulWidget {
    method createState (line 28) | State<SettingsLayout> createState()
  class _SettingsLayoutState (line 31) | class _SettingsLayoutState extends State<SettingsLayout> {
    method build (line 35) | Widget build(BuildContext context)

FILE: lib/app/settings/layout/page.dart
  function _buildSectionTile (line 42) | Widget _buildSectionTile(
  function _buildDisabledTile (line 109) | Widget _buildDisabledTile(
  function build (line 170) | Widget build(BuildContext context)

FILE: lib/app/settings/locale/page.dart
  class SettingsLocalePage (line 21) | class SettingsLocalePage extends StatelessWidget {
    method build (line 26) | Widget build(BuildContext context)

FILE: lib/app/settings/locale/select/page.dart
  class SettingsLocaleSelectPage (line 29) | class SettingsLocaleSelectPage extends StatefulWidget {
    method createState (line 34) | State<StatefulWidget> createState()
  class _SettingsLocaleSelectPageState (line 37) | class _SettingsLocaleSelectPageState extends State<SettingsLocaleSelectP...
    method _refresh (line 54) | Future<void> _refresh()
    method initState (line 60) | void initState()
    method build (line 66) | Widget build(BuildContext context)
    method dispose (line 181) | void dispose()

FILE: lib/app/settings/location/page.dart
  type PositionUpdateCallback (line 35) | typedef PositionUpdateCallback = void Function();
  class SettingsLocationPage (line 41) | class SettingsLocationPage extends StatefulWidget {
    method createState (line 46) | State<SettingsLocationPage> createState()
  function permissionStatusUpdate (line 56) | Future<void> permissionStatusUpdate()
  function showPermissionDialog (line 80) | Future<void> showPermissionDialog(dynamic type)
  function requestPermissions (line 133) | Future<bool> requestPermissions()
  function toggleAutoLocation (line 211) | Future toggleAutoLocation(bool shouldEnable)
  function initState (line 224) | void initState()
  function didChangeAppLifecycleState (line 231) | void didChangeAppLifecycleState(AppLifecycleState state)
  function build (line 236) | Widget build(BuildContext context)
  function dispose (line 499) | void dispose()

FILE: lib/app/settings/location/select/[city]/page.dart
  class SettingsLocationSelectCityPage (line 30) | class SettingsLocationSelectCityPage extends StatefulWidget {
    method createState (line 38) | State<SettingsLocationSelectCityPage> createState()
  class _SettingsLocationSelectCityPageState (line 41) | class _SettingsLocationSelectCityPageState extends State<SettingsLocatio...
    method build (line 45) | Widget build(BuildContext context)

FILE: lib/app/settings/location/select/page.dart
  class SettingsLocationSelectPage (line 18) | class SettingsLocationSelectPage extends StatelessWidget {
    method build (line 23) | Widget build(BuildContext context)

FILE: lib/app/settings/map/page.dart
  class SettingsMapPage (line 22) | class SettingsMapPage extends StatelessWidget {
    method showLayerSheet (line 27) | Future<void> showLayerSheet(BuildContext context)
    method build (line 50) | Widget build(BuildContext context)

FILE: lib/app/settings/notify/(1.eew)/eew/page.dart
  class SettingsNotifyEewPage (line 14) | class SettingsNotifyEewPage extends StatelessWidget {
    method build (line 19) | Widget build(BuildContext context)

FILE: lib/app/settings/notify/(2.earthquake)/intensity/page.dart
  class SettingsNotifyIntensityPage (line 14) | class SettingsNotifyIntensityPage extends StatelessWidget {
    method build (line 19) | Widget build(BuildContext context)

FILE: lib/app/settings/notify/(2.earthquake)/monitor/page.dart
  class SettingsNotifyMonitorPage (line 14) | class SettingsNotifyMonitorPage extends StatelessWidget {
    method build (line 19) | Widget build(BuildContext context)

FILE: lib/app/settings/notify/(2.earthquake)/report/page.dart
  class SettingsNotifyReportPage (line 14) | class SettingsNotifyReportPage extends StatelessWidget {
    method build (line 19) | Widget build(BuildContext context)

FILE: lib/app/settings/notify/(3.weather)/advisory/page.dart
  class SettingsNotifyAdvisoryPage (line 14) | class SettingsNotifyAdvisoryPage extends StatelessWidget {
    method build (line 19) | Widget build(BuildContext context)

FILE: lib/app/settings/notify/(3.weather)/evacuation/page.dart
  class SettingsNotifyEvacuationPage (line 14) | class SettingsNotifyEvacuationPage extends StatelessWidget {
    method build (line 19) | Widget build(BuildContext context)

FILE: lib/app/settings/notify/(3.weather)/thunderstorm/page.dart
  class SettingsNotifyThunderstormPage (line 14) | class SettingsNotifyThunderstormPage extends StatelessWidget {
    method build (line 19) | Widget build(BuildContext context)

FILE: lib/app/settings/notify/(4.tsunami)/tsunami/page.dart
  class SettingsNotifyTsunamiPage (line 14) | class SettingsNotifyTsunamiPage extends StatelessWidget {
    method build (line 19) | Widget build(BuildContext context)

FILE: lib/app/settings/notify/(5.basic)/announcement/page.dart
  class SettingsNotifyAnnouncementPage (line 14) | class SettingsNotifyAnnouncementPage extends StatelessWidget {
    method build (line 19) | Widget build(BuildContext context)

FILE: lib/app/settings/notify/_lib/utils.dart
  function showSuccessToast (line 25) | void showSuccessToast(BuildContext context)
  function showErrorToast (line 36) | void showErrorToast(BuildContext context)
  function setEewNotifyType (line 47) | Future setEewNotifyType(
  function setEarthquakeNotifyType (line 64) | Future setEarthquakeNotifyType(
  function setWeatherNotifyType (line 81) | Future setWeatherNotifyType(
  function setTsunamiNotifyType (line 98) | Future setTsunamiNotifyType(
  function setBasicNotifyType (line 115) | Future setBasicNotifyType(

FILE: lib/app/settings/notify/_widgets/basic_notify_section.dart
  class BasicNotifySection (line 23) | class BasicNotifySection extends StatefulWidget {
    method createState (line 38) | State<BasicNotifySection> createState()
  class _BasicNotifySectionState (line 41) | class _BasicNotifySectionState extends State<BasicNotifySection> {
    method onChanged (line 44) | Future onChanged(BasicNotifyType value)
    method build (line 51) | Widget build(BuildContext context)

FILE: lib/app/settings/notify/_widgets/earthquake_notify_section.dart
  class EarthquakeNotifySection (line 23) | class EarthquakeNotifySection extends StatefulWidget {
    method createState (line 38) | State<EarthquakeNotifySection> createState()
  class _EarthquakeNotifySectionState (line 41) | class _EarthquakeNotifySectionState extends State<EarthquakeNotifySectio...
    method onChanged (line 44) | Future onChanged(EarthquakeNotifyType value)
    method build (line 51) | Widget build(BuildContext context)

FILE: lib/app/settings/notify/_widgets/eew_notify_section.dart
  class EewNotifySection (line 23) | class EewNotifySection extends StatefulWidget {
    method createState (line 38) | State<EewNotifySection> createState()
  class _EewNotifySectionState (line 41) | class _EewNotifySectionState extends State<EewNotifySection> {
    method onChanged (line 44) | Future onChanged(EewNotifyType value)
    method build (line 51) | Widget build(BuildContext context)

FILE: lib/app/settings/notify/_widgets/sound_list_tile.dart
  class SoundListTile (line 26) | class SoundListTile extends StatefulWidget {
    method createState (line 53) | State<SoundListTile> createState()
  class _SoundListTileState (line 56) | class _SoundListTileState extends State<SoundListTile> {
    method onTap (line 59) | void onTap()
    method build (line 81) | Widget build(BuildContext context)

FILE: lib/app/settings/notify/_widgets/tsunami_notify_section.dart
  class TsunamiNotifySection (line 23) | class TsunamiNotifySection extends StatefulWidget {
    method createState (line 38) | State<TsunamiNotifySection> createState()
  class _TsunamiNotifySectionState (line 41) | class _TsunamiNotifySectionState extends State<TsunamiNotifySection> {
    method onChanged (line 44) | Future onChanged(TsunamiNotifyType value)
    method build (line 51) | Widget build(BuildContext context)

FILE: lib/app/settings/notify/_widgets/weather_notify_section.dart
  class WeatherNotifySection (line 23) | class WeatherNotifySection extends StatefulWidget {
    method createState (line 38) | State<WeatherNotifySection> createState()
  class _WeatherNotifySectionState (line 41) | class _WeatherNotifySectionState extends State<WeatherNotifySection> {
    method onChanged (line 44) | Future onChanged(WeatherNotifyType value)
    method build (line 51) | Widget build(BuildContext context)

FILE: lib/app/settings/notify/page.dart
  class SettingsNotifyPage (line 26) | class SettingsNotifyPage extends StatefulWidget {
    method createState (line 31) | State<SettingsNotifyPage> createState()
  class _SettingsNotifyPageState (line 34) | class _SettingsNotifyPageState extends State<SettingsNotifyPage> {
    method getBasicNotifyTypeName (line 42) | String getBasicNotifyTypeName(BasicNotifyType value)
    method getEarthquakeNotifyTypeName (line 47) | String getEarthquakeNotifyTypeName(EarthquakeNotifyType value)
    method getEewNotifyTypeName (line 53) | String getEewNotifyTypeName(EewNotifyType value)
    method getTsunamiNotifyTypeName (line 59) | String getTsunamiNotifyTypeName(TsunamiNotifyType value)
    method getWeatherNotifyTypeName (line 64) | String getWeatherNotifyTypeName(WeatherNotifyType value)
    method _buildIconContainer (line 69) | Widget _buildIconContainer({
    method initState (line 84) | void initState()
    method build (line 141) | Widget build(BuildContext context)

FILE: lib/app/settings/page.dart
  class SettingsIndexPage (line 23) | class SettingsIndexPage extends StatelessWidget {
    method _buildHeader (line 27) | Widget _buildHeader(BuildContext context)

FILE: lib/app/settings/proxy/page.dart
  class SettingsProxyPage (line 16) | class SettingsProxyPage extends StatefulWidget {
    method createState (line 21) | State<SettingsProxyPage> createState()
  class _SettingsProxyPageState (line 24) | class _SettingsProxyPageState extends State<SettingsProxyPage> {
    method _saveSettings (line 29) | void _saveSettings()
    method initState (line 46) | void initState()
    method build (line 58) | Widget build(BuildContext context)
    method dispose (line 122) | void dispose()

FILE: lib/app/settings/theme/color/page.dart
  class SettingsThemeColorPage (line 18) | class SettingsThemeColorPage extends StatelessWidget {
    method build (line 23) | Widget build(BuildContext context)

FILE: lib/app/settings/theme/mode/page.dart
  class SettingsThemeModePage (line 17) | class SettingsThemeModePage extends StatelessWidget {
    method build (line 22) | Widget build(BuildContext context)

FILE: lib/app/settings/theme/page.dart
  class SettingsThemePage (line 20) | class SettingsThemePage extends StatelessWidget {
    method build (line 25) | Widget build(BuildContext context)

FILE: lib/app/settings/unit/page.dart
  class SettingsUnitPage (line 28) | class SettingsUnitPage extends StatelessWidget {
    method build (line 33) | Widget build(BuildContext context)

FILE: lib/app/welcome/1-about/page.dart
  function build (line 17) | Widget build(BuildContext context)

FILE: lib/app/welcome/2-exptech/page.dart
  function build (line 17) | Widget build(BuildContext context)

FILE: lib/app/welcome/3-notice/page.dart
  function build (line 18) | Widget build(BuildContext context)

FILE: lib/app/welcome/4-permissions/page.dart
  class WelcomePermissionPage (line 24) | class WelcomePermissionPage extends StatefulWidget {
    method createState (line 29) | State<WelcomePermissionPage> createState()
  function _checkNotificationPermission (line 39) | Future<void> _checkNotificationPermission()
  function _initializePermissions (line 48) | Future<List<Permission>> _initializePermissions()
  function _createPermissionItems (line 96) | List<PermissionItem> _createPermissionItems(
  function _buildPermissionCard (line 154) | Widget _buildPermissionCard(PermissionItem item)

FILE: lib/app/welcome/layout.dart
  class WelcomeLayout (line 10) | class WelcomeLayout extends StatelessWidget {
    method build (line 18) | Widget build(BuildContext context)

FILE: lib/app_old/page/map/map.dart
  class MapPage (line 8) | class MapPage extends StatefulWidget {
    method createState (line 12) | State<MapPage> createState()
  class _MapPageState (line 15) | class _MapPageState extends State<MapPage> {
    method build (line 43) | Widget build(BuildContext context)

FILE: lib/app_old/page/map/meteor.dart
  type StationIdUpdateCallback (line 10) | typedef StationIdUpdateCallback = void Function(String?);
  class AdvancedWeatherChart (line 12) | class AdvancedWeatherChart extends StatefulWidget {
    method createState (line 25) | State<AdvancedWeatherChart> createState()
    method setActiveCallback (line 29) | void setActiveCallback(StationIdUpdateCallback callback)
    method clearActiveCallback (line 33) | void clearActiveCallback()
    method updateStationId (line 37) | void updateStationId(String? getstationId)
  class _AdvancedWeatherChartState (line 42) | class _AdvancedWeatherChartState extends State<AdvancedWeatherChart> {
    method initState (line 52) | void initState()
    method dispose (line 61) | void dispose()
    method _handleStationIdUpdate (line 66) | void _handleStationIdUpdate(String? getstationId)
    method _fetchWeatherData (line 76) | Future<void> _fetchWeatherData()
    method getDataTypeColor (line 110) | List<Color> getDataTypeColor(String dataType)
    method build (line 128) | Widget build(BuildContext context)
    method _buildHeader (line 187) | Widget _buildHeader()
    method _calculate24HourAverage (line 233) | String _calculate24HourAverage()
    method _buildChart (line 242) | Widget _buildChart()
    method _buildLineChart (line 262) | Widget _buildLineChart()
    method _buildBarChart (line 429) | Widget _buildBarChart()
    method _calculateDynamicInterval (line 559) | double _calculateDynamicInterval(double maxValue)
    method _buildDataTypeSelector (line 567) | Widget _buildDataTypeSelector()
    method _buildLegend (line 619) | Widget _buildLegend()
  class BackgroundPainter (line 652) | class BackgroundPainter extends CustomPainter {
    method paint (line 664) | void paint(Canvas canvas, Size size)
    method shouldRepaint (line 693) | bool shouldRepaint(covariant CustomPainter oldDelegate)

FILE: lib/app_old/page/map/tsunami/tsunami_estimate_list.dart
  class TsunamiEstimateList (line 5) | class TsunamiEstimateList extends StatelessWidget {
    method convertTimestamp (line 10) | String convertTimestamp(int timestamp)
    method heightToString (line 22) | String heightToString(height)
    method heightToColor (line 34) | Color heightToColor(height)
    method heightToTextColor (line 46) | Color heightToTextColor(height)
    method build (line 55) | Widget build(BuildContext context)

FILE: lib/app_old/page/map/tsunami/tsunami_observed_list.dart
  class TsunamiObservedList (line 5) | class TsunamiObservedList extends StatelessWidget {
    method convertTimestamp (line 10) | String convertTimestamp(int timestamp)
    method heightToColor (line 22) | Color heightToColor(height)
    method heightToTextColor (line 34) | Color heightToTextColor(height)
    method build (line 45) | Widget build(BuildContext context)

FILE: lib/app_old/page/map/typhoon/typhoon.dart
  class TyphoonMap (line 10) | class TyphoonMap extends StatefulWidget {
    method createState (line 14) | State<TyphoonMap> createState()
  class _TyphoonMapState (line 17) | class _TyphoonMapState extends State<TyphoonMap> {
    method _initMap (line 32) | void _initMap(MapLibreMapController controller)
    method _loadMap (line 36) | Future<void> _loadMap()
    method _addUserLocationMarker (line 83) | Future<void> _addUserLocationMarker()
    method _loadTyphoonLayers (line 108) | Future<void> _loadTyphoonLayers()
    method _addTransparentLayerFromDataset (line 232) | void _addTransparentLayerFromDataset()
    method dispose (line 262) | void dispose()
    method build (line 268) | Widget build(BuildContext context)

FILE: lib/app_old/page/map/weather/humidity.dart
  class HumidityData (line 16) | class HumidityData {
  class HumidityMap (line 36) | class HumidityMap extends StatefulWidget {
    method createState (line 40) | State<HumidityMap> createState()
  class _HumidityMapState (line 43) | class _HumidityMapState extends State<HumidityMap> {
    method _initMap (line 55) | Future<void> _initMap(MapLibreMapController controller)
    method _loadMap (line 59) | Future<void> _loadMap()
    method _addUserLocationMarker (line 133) | Future<void> _addUserLocationMarker()
    method addHumidityCircles (line 158) | Future<void> addHumidityCircles(List<HumidityData> humidityDataList)
    method _toggleLegend (line 252) | void _toggleLegend()
    method _buildLegend (line 258) | Widget _buildLegend()
    method _buildColorBar (line 270) | Widget _buildColorBar()
    method _buildColorBarLabels (line 287) | Widget _buildColorBarLabels()
    method dispose (line 299) | void dispose()
    method build (line 305) | Widget build(BuildContext context)

FILE: lib/app_old/page/map/weather/pressure.dart
  class PressureData (line 16) | class PressureData {
  class PressureMap (line 36) | class PressureMap extends StatefulWidget {
    method createState (line 40) | State<PressureMap> createState()
  class _PressureMapState (line 43) | class _PressureMapState extends State<PressureMap> {
    method _initMap (line 55) | Future<void> _initMap(MapLibreMapController controller)
    method _loadMap (line 59) | Future<void> _loadMap()
    method _addUserLocationMarker (line 133) | Future<void> _addUserLocationMarker()
    method addPressureCircles (line 158) | Future<void> addPressureCircles(List<PressureData> pressureDataList)
    method _toggleLegend (line 254) | void _toggleLegend()
    method _buildLegend (line 260) | Widget _buildLegend()
    method _buildColorBar (line 272) | Widget _buildColorBar()
    method _buildColorBarLabels (line 291) | Widget _buildColorBarLabels()
    method dispose (line 303) | void dispose()
    method build (line 309) | Widget build(BuildContext context)

FILE: lib/app_old/page/me/developer.dart
  class DPIPInfoPage (line 5) | class DPIPInfoPage extends StatelessWidget {
    method build (line 9) | Widget build(BuildContext context)
    method _buildHeroCard (line 63) | Widget _buildHeroCard(BuildContext context)
    method _buildInfoCard (line 90) | Widget _buildInfoCard(

FILE: lib/app_old/page/me/me.dart
  class MePage (line 7) | class MePage extends StatefulWidget {
    method createState (line 11) | State<MePage> createState()
  class _MePageState (line 14) | class _MePageState extends State<MePage> {
    method build (line 16) | Widget build(BuildContext context)

FILE: lib/app_old/page/more/more.dart
  class MorePage (line 7) | class MorePage extends StatefulWidget {
    method createState (line 11) | State<MorePage> createState()
  class _MorePageState (line 14) | class _MorePageState extends State<MorePage> {
    method build (line 32) | Widget build(BuildContext context)

FILE: lib/app_old/page/more/ranking/ranking.dart
  class RankingPage (line 7) | class RankingPage extends StatefulWidget {
    method createState (line 11) | State<RankingPage> createState()
  class _RankingPageState (line 14) | class _RankingPageState extends State<RankingPage> with TickerProviderSt...
    method initState (line 20) | void initState()
    method build (line 48) | Widget build(BuildContext context)
    method dispose (line 111) | void dispose()

FILE: lib/app_old/page/more/ranking/tabs/precipitation.dart
  class RankingPrecipitationTab (line 12) | class RankingPrecipitationTab extends StatefulWidget {
    method createState (line 16) | State<RankingPrecipitationTab> createState()
  class _RankingPrecipitationTabState (line 19) | class _RankingPrecipitationTabState extends State<RankingPrecipitationTa...
    method refresh (line 25) | Future refresh()
    method rank (line 38) | void rank()
    method setInterval (line 70) | void setInterval(Intervals i)
    method initState (line 76) | void initState()
    method build (line 82) | Widget build(BuildContext context)

FILE: lib/app_old/page/more/ranking/tabs/temperature.dart
  type MergeType (line 11) | enum MergeType { none, county, town }
  class RankingTemperatureTab (line 13) | class RankingTemperatureTab extends StatefulWidget {
    method createState (line 17) | State<RankingTemperatureTab> createState()
  class _RankingTemperatureTabState (line 20) | class _RankingTemperatureTabState extends State<RankingTemperatureTab> {
    method refresh (line 27) | Future<void> refresh()
    method rank (line 40) | void rank()
    method setMerge (line 67) | void setMerge(MergeType state)
    method setReversed (line 76) | void setReversed(bool state)
    method initState (line 82) | void initState()
    method build (line 88) | Widget build(BuildContext context)

FILE: lib/app_old/page/more/ranking/tabs/wind.dart
  type MergeType (line 11) | enum MergeType { none, county, town }
  class RankingWindTab (line 13) | class RankingWindTab extends StatefulWidget {
    method createState (line 17) | State<RankingWindTab> createState()
  class _RankingWindTabState (line 20) | class _RankingWindTabState extends State<RankingWindTab> {
    method refresh (line 27) | Future<void> refresh()
    method rank (line 40) | void rank()
    method setMerge (line 67) | void setMerge(MergeType state)
    method setReversed (line 76) | void setReversed(bool state)
    method initState (line 82) | void initState()
    method build (line 88) | Widget build(BuildContext context)

FILE: lib/app_old/page/more/report_list/report_list.dart
  class ReportListPage (line 8) | class ReportListPage extends StatefulWidget {
    method createState (line 12) | State<ReportListPage> createState()
  class _ReportListPageState (line 15) | class _ReportListPageState extends State<ReportListPage> {
    method refreshReportList (line 34) | Future<void> refreshReportList()
    method _loadMore (line 50) | void _loadMore()
    method _fetchNextPage (line 64) | Future<void> _fetchNextPage()
    method addToList (line 93) | void addToList(List<PartialEarthquakeReport> list)
    method _getFilterSummary (line 108) | String _getFilterSummary()
    method initState (line 131) | void initState()
    method build (line 140) | Widget build(BuildContext context)
    method _showFilterDialog (line 234) | void _showFilterDialog()

FILE: lib/core/compass.dart
  class CompassService (line 6) | class CompassService {
    method initialize (line 25) | Future<void> initialize()
    method dispose (line 79) | Future<void> dispose()

FILE: lib/core/device_info.dart
  function init (line 10) | Future init()
  function _iphoneModelMap (line 27) | String _iphoneModelMap(String code)

FILE: lib/core/eew.dart
  function calcWaveRadius (line 12) | ({double p, double s, double sT}) calcWaveRadius(
  function findClosest (line 70) | int findClosest(List<int> arr, double target)
  function eewAreaPga (line 76) | Map<String, dynamic> eewAreaPga(
  function eewAreaPgv (line 104) | double eewAreaPgv(
  function sWaveTimeByDistance (line 127) | double sWaveTimeByDistance(double depth, double sDist)
  function pWaveTimeByDistance (line 157) | double pWaveTimeByDistance(double depth, double pDist)
  function pgaToFloat (line 187) | double pgaToFloat(double pga)
  function pgaToIntensity (line 191) | int pgaToIntensity(double pga)
  function intensityFloatToInt (line 195) | int intensityFloatToInt(double floatValue)
  function intensityToNumberString (line 219) | String intensityToNumberString(int level)
  function calculateWaveTime (line 233) | WaveTime calculateWaveTime(double depth, double distance)
  function eewLocationInfo (line 274) | ({double dist, double i}) eewLocationInfo(

FILE: lib/core/fcm.dart
  function fcmInit (line 11) | Future<void> fcmInit()
  function onTokenHandle (line 32) | Future<void> onTokenHandle(String token)
  function onFcmSilentDataHandle (line 36) | Future<void> onFcmSilentDataHandle(FcmSilentData silentData)
  function showNotify (line 55) | Future<void> showNotify(Map<String, dynamic> data)

FILE: lib/core/gps_location.dart
  function updateLocationFromGPS (line 14) | Future<void> updateLocationFromGPS()
  function updateSavedLocationIOS (line 77) | Future<void> updateSavedLocationIOS()
  function _clearLocation (line 79) | void _clearLocation()

FILE: lib/core/i18n.dart
  class I18nCsvLoader (line 7) | class I18nCsvLoader {
    method fromFile (line 10) | Future<Map<String, Map<String, String>>> fromFile(String path)
    method _parseCsvTranslations (line 15) | Map<String, Map<String, String>> _parseCsvTranslations(
    method _parseCsvLine (line 56) | List<String> _parseCsvLine(String line)
  function load (line 113) | Future<void> load()
  function load (line 121) | Future<void> load()
  function load (line 140) | Future<void> load()

FILE: lib/core/notify.dart
  function onActionReceivedMethod (line 16) | Future<void> onActionReceivedMethod(ReceivedAction receivedAction)
  function handlePendingNotificationNavigation (line 33) | void handlePendingNotificationNavigation(BuildContext context)
  function _navigateBasedOnChannelKey (line 44) | void _navigateBasedOnChannelKey(BuildContext context, String? channelKey)
  function notifyInit (line 395) | Future<void> notifyInit()

FILE: lib/core/preference.dart
  class PreferenceKeys (line 6) | class PreferenceKeys {
  class Preference (line 74) | class Preference {
    method init (line 79) | Future<void> init()
    method reload (line 86) | Future<void> reload()

FILE: lib/core/providers.dart
  class GlobalProviders (line 7) | class GlobalProviders {
    method init (line 16) | void init()

FILE: lib/core/rts.dart
  function findAppropriateItem (line 4) | StationInfo findAppropriateItem(List<StationInfo> infos, int date)

FILE: lib/core/service.dart
  class LocationServiceManager (line 21) | class LocationServiceManager {
    method initalize (line 40) | Future<void> initalize()
    method _getUpdateInterval (line 63) | Duration _getUpdateInterval()
    method _setUpdateInterval (line 68) | Future<void> _setUpdateInterval(Duration interval)
    method _calculateNextInterval (line 75) | Duration _calculateNextInterval(double? distanceInMeters)
    method start (line 85) | Future<void> start()
    method _rescheduleAlarm (line 135) | Future<void> _rescheduleAlarm(Duration interval)
    method stop (line 151) | Future<void> stop()
  class LocationService (line 168) | @pragma('vm:entry-point')
    method _$task (line 177) | Future<void> _$task()
    method _$showProcessingNotification (line 279) | Future<void> _$showProcessingNotification()
    method _$dismissNotification (line 303) | Future<void> _$dismissNotification()
    method _$getDeviceGeographicalLocation (line 324) | Future<LatLng?> _$getDeviceGeographicalLocation()
    method _$getLocationFromCoordinates (line 396) | ({String code, Location location})? _$getLocationFromCoordinates(
    method _$updatePosition (line 468) | Future<void> _$updatePosition(LatLng? position)

FILE: lib/core/update.dart
  function updateInfoToServer (line 8) | Future<void> updateInfoToServer()

FILE: lib/dialog/welcome/announcement.dart
  class WelcomeAnnouncementDialog (line 5) | class WelcomeAnnouncementDialog extends StatelessWidget {
    method build (line 9) | Widget build(BuildContext context)

FILE: lib/dialog/welcome/changelog.dart
  class WelcomeChangelogDialog (line 5) | class WelcomeChangelogDialog extends StatelessWidget {
    method build (line 9) | Widget build(BuildContext context)

FILE: lib/global.dart
  type TimeTable (line 14) | typedef TimeTable = Map<String, List<({double P, double S, double R})>>;
  class Global (line 16) | class Global {
    method _loadCompressedJson (line 28) | Future<Map<String, dynamic>> _loadCompressedJson(
    method loadLocationData (line 61) | Future<Map<String, Location>> loadLocationData()
    method loadTimeTableData (line 68) | Future<TimeTable> loadTimeTableData()
    method loadNotifyTestContent (line 84) | Future<void> loadNotifyTestContent()
    method loadBoxGeojson (line 96) | Future<GeoJSONFeatureCollection> loadBoxGeojson()
    method loadTownGeojson (line 102) | Future<GeoJSONFeatureCollection> loadTownGeojson()
    method init (line 108) | Future init()

FILE: lib/main.dart
  function main (line 27) | void main()
  function getInitialShortcut (line 176) | Future<String?> getInitialShortcut()
  function _loggedTask (line 186) | Future<T> _loggedTask<T>(String taskName, Future<T> future)

FILE: lib/models/data.dart
  class _DpipDataModel (line 24) | class _DpipDataModel extends ChangeNotifier {
    method setStation (line 29) | void setStation(Map<String, Station> station)
    method setEew (line 63) | void setEew(List<Eew> eew)
    method setPartialReport (line 81) | void setPartialReport(List<PartialEarthquakeReport> partialReport)
    method appendPartialReport (line 86) | void appendPartialReport(List<PartialEarthquakeReport> partialReport)
    method setReport (line 99) | void setReport(String id, EarthquakeReport report)
    method setReports (line 104) | void setReports(Map<String, EarthquakeReport> report)
    method setRadar (line 113) | void setRadar(List<String> radar)
    method setTemperature (line 122) | void setTemperature(List<String> temperature)
    method setWeatherData (line 132) | void setWeatherData(String time, List<WeatherStation> weather)
    method setPrecipitation (line 141) | void setPrecipitation(List<String> precipitation)
    method setRainData (line 150) | void setRainData(String time, List<RainStation> rain)
    method setWind (line 159) | void setWind(List<String> wind)
    method setLightning (line 168) | void setLightning(List<String> lightning)
    method setLightningData (line 178) | void setLightningData(String time, List<Lightning> lightning)
    method setTimeOffset (line 187) | void setTimeOffset(int timeOffset)
  class DpipDataModel (line 193) | class DpipDataModel extends _DpipDataModel {
    method setRts (line 221) | void setRts(Rts rts)
    method setReplayMode (line 236) | void setReplayMode(bool isReplay, [int? timestamp])
    method _updateRtsData (line 253) | void _updateRtsData(Rts? rts, List<Eew> eew)
    method _fetchRtsData (line 261) | Future<(Rts?, List<Eew>)> _fetchRtsData()
    method fetchRtsImmediately (line 279) | Future<void> fetchRtsImmediately()
    method startFetching (line 289) | void startFetching()
    method fetchCallback (line 292) | Future<void> fetchCallback()
    method everyMinuteCallback (line 332) | Future<void> everyMinuteCallback()
    method stopFetching (line 365) | void stopFetching()
    method onAppLifecycleStateChanged (line 375) | void onAppLifecycleStateChanged(AppLifecycleState state)
    method dispose (line 385) | void dispose()
    method getRtsGeoJson (line 390) | Map<String, dynamic> getRtsGeoJson()
    method getEewGeoJson (line 436) | Map<String, dynamic> getEewGeoJson()
    method getIntensityGeoJson (line 469) | Map<String, dynamic> getIntensityGeoJson()
    method getBoxGeoJson (line 501) | Map<String, dynamic> getBoxGeoJson()

FILE: lib/models/map/earthquake.dart
  class MapEarthquakeModel (line 5) | class MapEarthquakeModel extends ChangeNotifier {
    method setRts (line 9) | void setRts(Rts? rts)
    method setEew (line 14) | void setEew(String id, Eew? eew)

FILE: lib/models/settings/location.dart
  class _SettingsLocationModel (line 9) | class _SettingsLocationModel extends ChangeNotifier {
    method setCode (line 28) | void setCode(String? value)
    method setCoordinates (line 96) | void setCoordinates(LatLng? value)
    method setAuto (line 127) | void setAuto(bool value)
    method favorite (line 154) | void favorite(String code)
    method unfavorite (line 169) | void unfavorite(String code)
    method isFavorited (line 180) | bool isFavorited(String code)
    method refresh (line 187) | void refresh()
  class SettingsLocationModel (line 198) | class SettingsLocationModel extends _SettingsLocationModel {}

FILE: lib/models/settings/map.dart
  class _SettingsMapModel (line 11) | class _SettingsMapModel extends ChangeNotifier {
    method _log (line 12) | void _log(String message)
    method setUpdateInterval (line 30) | void setUpdateInterval(int value)
    method setBaseMapType (line 57) | void setBaseMapType(BaseMapType value)
    method setLayers (line 84) | void setLayers(Set<MapLayer> value)
    method setAutoZoom (line 108) | void setAutoZoom(bool value)
    method refresh (line 119) | void refresh()
  class SettingsMapModel (line 130) | class SettingsMapModel extends _SettingsMapModel {}

FILE: lib/models/settings/notify.dart
  type NotifyChannel (line 11) | enum NotifyChannel {
  type EewNotifyType (line 41) | enum EewNotifyType {
  type EarthquakeNotifyType (line 53) | enum EarthquakeNotifyType {
  type WeatherNotifyType (line 65) | enum WeatherNotifyType {
  type TsunamiNotifyType (line 74) | enum TsunamiNotifyType {
  type BasicNotifyType (line 83) | enum BasicNotifyType {
  class _SettingsNotificationModel (line 91) | class _SettingsNotificationModel extends ChangeNotifier {
    method _log (line 92) | void _log(String message)
    method apply (line 117) | void apply(NotifySettings settings)
    method setEew (line 142) | Future<void> setEew(EewNotifyType value)
    method setMonitor (line 165) | Future<void> setMonitor(EarthquakeNotifyType value)
    method setReport (line 190) | Future<void> setReport(EarthquakeNotifyType value)
    method setIntensity (line 215) | Future<void> setIntensity(EarthquakeNotifyType value)
    method setThunderstorm (line 240) | Future<void> setThunderstorm(WeatherNotifyType value)
    method setWeatherAdvisory (line 265) | Future<void> setWeatherAdvisory(WeatherNotifyType value)
    method setEvacuation (line 290) | Future<void> setEvacuation(WeatherNotifyType value)
    method setTsunami (line 315) | Future<void> setTsunami(TsunamiNotifyType value)
    method setAnnouncement (line 340) | Future<void> setAnnouncement(BasicNotifyType value)
  class SettingsNotificationModel (line 356) | class SettingsNotificationModel extends _SettingsNotificationModel {}

FILE: lib/models/settings/ui.dart
  type HomeDisplaySection (line 10) | enum HomeDisplaySection {
  class SettingsUserInterfaceModel (line 22) | class SettingsUserInterfaceModel extends ChangeNotifier {
    method _log (line 23) | void _log(String message)
    method setThemeMode (line 57) | void setThemeMode(ThemeMode value)
    method setThemeColor (line 66) | void setThemeColor(Color? color)
    method setLocale (line 76) | void setLocale(Locale? value)
    method setUseFahrenheit (line 86) | void setUseFahrenheit(bool value)
    method isEnabled (line 94) | bool isEnabled(HomeDisplaySection section)
    method toggleSection (line 96) | void toggleSection(HomeDisplaySection section, bool enabled)
    method reorderSection (line 106) | void reorderSection(int oldIndex, int newIndex)
    method _saveHomeSections (line 116) | void _saveHomeSections()

FILE: lib/route/announcement/announcement.dart
  function _getTagTypeById (line 24) | TagType _getTagTypeById(int id)
  function _formatDate (line 31) | String _formatDate(int timestamp)
  class TagType (line 36) | class TagType {
  class AnnouncementPage (line 44) | class AnnouncementPage extends StatefulWidget {
    method createState (line 48) | _AnnouncementPageState createState()
  class _AnnouncementPageState (line 51) | class _AnnouncementPageState extends State<AnnouncementPage> {
    method initState (line 57) | void initState()
    method _fetchAnnouncements (line 62) | Future<void> _fetchAnnouncements()
    method build (line 78) | Widget build(BuildContext context)
    method _buildAnnouncementList (line 96) | Widget _buildAnnouncementList()
  class AnnouncementCard (line 132) | class AnnouncementCard extends StatelessWidget {
    method build (line 145) | Widget build(BuildContext context)
    method _buildDateChip (line 191) | Widget _buildDateChip(BuildContext context)
    method _buildTags (line 208) | Widget _buildTags(BuildContext context)
    method _buildGlassyTag (line 218) | Widget _buildGlassyTag(BuildContext context, TagType tagType)
  class AnnouncementDetailPage (line 232) | class AnnouncementDetailPage extends StatelessWidget {
    method build (line 243) | Widget build(BuildContext context)
    method _buildDateChip (line 290) | Widget _buildDateChip(BuildContext context)
    method _buildGlassyTag (line 317) | Widget _buildGlassyTag(BuildContext context, TagType tagType)

FILE: lib/route/event_viewer/intensity.dart
  class IntensityPage (line 25) | class IntensityPage extends StatefulWidget {
    method createState (line 31) | _IntensityPageState createState()
  class _IntensityPageState (line 34) | class _IntensityPageState extends State<IntensityPage> {
    method dispose (line 45) | void dispose()
    method _initMap (line 51) | void _initMap(MapLibreMapController controller)
    method _loadMap (line 55) | Future<void> _loadMap()
    method start (line 72) | Future<void> start()
    method getEventInfo (line 98) | Future<void> getEventInfo()
    method _toggleLegend (line 127) | void _toggleLegend()
    method _buildLegend (line 133) | Widget _buildLegend()
    method _buildColorBar (line 148) | Widget _buildColorBar()
    method _buildColorBarLabels (line 163) | Widget _buildColorBarLabels()
    method build (line 189) | Widget build(BuildContext context)
    method _buildDraggableSheet (line 236) | Widget _buildDraggableSheet(BuildContext context)
    method _buildWarningHeader (line 273) | Widget _buildWarningHeader()
    method _buildWarningDetails (line 311) | Widget _buildWarningDetails()
    method _buildTimeBar (line 332) | Widget _buildTimeBar(
    method _buildTimeInfo (line 354) | Widget _buildTimeInfo(
    method _buildAffectedAreas (line 383) | Widget _buildAffectedAreas()

FILE: lib/route/event_viewer/thunderstorm.dart
  class ThunderstormPage (line 26) | class ThunderstormPage extends StatefulWidget {
    method createState (line 32) | _ThunderstormPageState createState()
  class _ThunderstormPageState (line 35) | class _ThunderstormPageState extends State<ThunderstormPage> {
    method dispose (line 47) | void dispose()
    method _initMap (line 53) | void _initMap(MapLibreMapController controller)
    method _loadMap (line 57) | Future<void> _loadMap()
    method start (line 130) | Future<void> start()
    method _toggleLegend (line 144) | void _toggleLegend()
    method _buildLegend (line 150) | Widget _buildLegend()
    method build (line 183) | Widget build(BuildContext context)
    method _buildDraggableSheet (line 287) | Widget _buildDraggableSheet(BuildContext context)
    method _buildWarningHeader (line 317) | Widget _buildWarningHeader()
    method _buildWarningDetails (line 365) | Widget _buildWarningDetails()
    method _buildTimeBar (line 386) | Widget _buildTimeBar(
    method _buildTimeInfo (line 439) | Widget _buildTimeInfo(
    method _buildAffectedAreas (line 468) | Widget _buildAffectedAreas()

FILE: lib/route/image_viewer/image_viewer.dart
  class ImageViewerRoute (line 16) | class ImageViewerRoute extends StatefulWidget {
    method createState (line 29) | State<ImageViewerRoute> createState()
  class ImageSaver (line 32) | class ImageSaver {
    method saveToPhotos (line 35) | Future<void> saveToPhotos(String path)
  class _ImageViewerRouteState (line 42) | class _ImageViewerRouteState extends State<ImageViewerRoute> {
    method saveImageToDownloads (line 48) | Future<void> saveImageToDownloads()
    method build (line 163) | Widget build(BuildContext context)

FILE: lib/route/log/log.dart
  class LogViewerPage (line 6) | class LogViewerPage extends StatelessWidget {
    method build (line 10) | Widget build(BuildContext context)

FILE: lib/route/notification/notification.dart
  class NotificationHistoryPage (line 7) | class NotificationHistoryPage extends StatefulWidget {
    method createState (line 11) | _NotificationHistoryPageState createState()
  class _NotificationHistoryPageState (line 14) | class _NotificationHistoryPageState extends State<NotificationHistoryPag...
    method initState (line 20) | void initState()
    method _fetchNotificationRecords (line 25) | Future<void> _fetchNotificationRecords()
    method build (line 38) | Widget build(BuildContext context)
    method _buildNotificationList (line 45) | Widget _buildNotificationList()
  class NotificationCard (line 80) | class NotificationCard extends StatelessWidget {
    method build (line 91) | Widget build(BuildContext context)
    method _buildCriticalityChip (line 151) | Widget _buildCriticalityChip(BuildContext context)
    method _buildDateChip (line 165) | Widget _buildDateChip(BuildContext context)
    method _buildAreaChips (line 182) | Widget _buildAreaChips(BuildContext context)
    method _formatDate (line 226) | String _formatDate(int timestamp)
  class NotificationDetailPage (line 232) | class NotificationDetailPage extends StatelessWidget {
    method build (line 238) | Widget build(BuildContext context)
    method _buildDateChip (line 268) | Widget _buildDateChip(BuildContext context)
    method _buildCriticalityChip (line 295) | Widget _buildCriticalityChip(BuildContext context)
    method _buildAreasList (line 309) | Widget _buildAreasList(BuildContext context)
    method _formatDate (line 329) | String _formatDate(int timestamp)

FILE: lib/route/report/report.dart
  class ReportRoute (line 20) | class ReportRoute extends StatefulWidget {
    method createState (line 26) | State<ReportRoute> createState()
  class _ReportRouteState (line 29) | class _ReportRouteState extends State<ReportRoute> with TickerProviderSt...
    method refreshReport (line 69) | Future<void> refreshReport()
    method focus (line 253) | Future<void> focus(LatLng target)
    method initState (line 271) | void initState()
    method build (line 295) | Widget build(BuildContext context)

FILE: lib/route/report/report_sheet_content.dart
  class ReportSheetContent (line 19) | class ReportSheetContent extends StatelessWidget {
    method build (line 32) | Widget build(BuildContext context)

FILE: lib/route/status/status.dart
  class ServerStatusPage (line 7) | class ServerStatusPage extends StatefulWidget {
    method createState (line 11) | _ServerStatusPageState createState()
  class _ServerStatusPageState (line 14) | class _ServerStatusPageState extends State<ServerStatusPage> {
    method initState (line 19) | void initState()
    method _fetchServerStatus (line 24) | Future<List<ServerStatus>> _fetchServerStatus()
    method _toggleExpanded (line 28) | void _toggleExpanded(String cardId)
    method build (line 39) | Widget build(BuildContext context)
    method _buildInfoBox (line 105) | Widget _buildInfoBox(bool isDarkMode)
    method _buildStatusCard (line 142) | Widget _buildStatusCard(ServerStatus status, bool isDarkMode)
    method _buildServiceTile (line 254) | Widget _buildServiceTile(
    method getStatusColor (line 259) | Color getStatusColor(int status)
    method getStatusText (line 272) | String getStatusText(int status)
    method _formatDateTime (line 316) | String _formatDateTime(String dateTimeString)

FILE: lib/router.dart
  class WelcomeRoute (line 52) | @TypedGoRoute<WelcomeRoute>(path: '/welcome')
    method build (line 58) | Widget build(BuildContext context, GoRouterState state)
  class WelcomeExptechRoute (line 64) | @TypedGoRoute<WelcomeExptechRoute>(path: '/welcome/exptech')
    method build (line 70) | Widget build(BuildContext context, GoRouterState state)
  class WelcomeNoticeRoute (line 76) | @TypedGoRoute<WelcomeNoticeRoute>(path: '/welcome/notice')
    method build (line 82) | Widget build(BuildContext context, GoRouterState state)
  class WelcomePermissionsRoute (line 88) | @TypedGoRoute<WelcomePermissionsRoute>(path: '/welcome/permissions')
    method build (line 94) | Widget build(BuildContext context, GoRouterState state)
  class HomeRoute (line 100) | @TypedGoRoute<HomeRoute>(path: '/home')
    method build (line 106) | Widget build(BuildContext context, GoRouterState state)
  class SettingsShellRoute (line 112) | @TypedShellRoute<SettingsShellRoute>(
    method builder (line 176) | Widget builder(BuildContext context, GoRouterState state, Widget navig...
  class SettingsIndexRoute (line 184) | class SettingsIndexRoute extends GoRouteData with $SettingsIndexRoute {
    method build (line 189) | Widget build(BuildContext context, GoRouterState state)
  class SettingsLocationRoute (line 195) | class SettingsLocationRoute extends GoRouteData with $SettingsLocationRo...
    method build (line 200) | Widget build(BuildContext context, GoRouterState state)
  class SettingsLocationSelectRoute (line 206) | class SettingsLocationSelectRoute extends GoRouteData with $SettingsLoca...
    method build (line 211) | Widget build(BuildContext context, GoRouterState state)
  class SettingsLocationSelectCityRoute (line 217) | class SettingsLocationSelectCityRoute extends GoRouteData with $Settings...
    method build (line 225) | Widget build(BuildContext context, GoRouterState state)
  class SettingsLayoutRoute (line 230) | class SettingsLayoutRoute extends GoRouteData with $SettingsLayoutRoute {
    method build (line 235) | Widget build(BuildContext context, GoRouterState state)
  class SettingsThemeRoute (line 241) | class SettingsThemeRoute extends GoRouteData with $SettingsThemeRoute {
    method build (line 246) | Widget build(BuildContext context, GoRouterState state)
  class SettingsThemeModeRoute (line 252) | class SettingsThemeModeRoute extends GoRouteData with $SettingsThemeMode...
    method build (line 257) | Widget build(BuildContext context, GoRouterState state)
  class SettingsThemeColorRoute (line 263) | class SettingsThemeColorRoute extends GoRouteData with $SettingsThemeCol...
    method build (line 268) | Widget build(BuildContext context, GoRouterState state)
  class SettingsLocaleRoute (line 274) | class SettingsLocaleRoute extends GoRouteData with $SettingsLocaleRoute {
    method build (line 279) | Widget build(BuildContext context, GoRouterState state)
  class SettingsLocaleSelectRoute (line 285) | class SettingsLocaleSelectRoute extends GoRouteData with $SettingsLocale...
    method build (line 290) | Widget build(BuildContext context, GoRouterState state)
  class SettingsUnitRoute (line 296) | class SettingsUnitRoute extends GoRouteData with $SettingsUnitRoute {
    method build (line 301) | Widget build(BuildContext context, GoRouterState state)
  class SettingsMapRoute (line 307) | class SettingsMapRoute extends GoRouteData with $SettingsMapRoute {
    method build (line 312) | Widget build(BuildContext context, GoRouterState state)
  class SettingsProxyRoute (line 318) | class SettingsProxyRoute extends GoRouteData with $SettingsProxyRoute {
    method build (line 323) | Widget build(BuildContext context, GoRouterState state)
  class SettingsExperimentalRoute (line 329) | class SettingsExperimentalRoute extends GoRouteData with $SettingsExperi...
    method build (line 334) | Widget build(BuildContext context, GoRouterState state)
  class SettingsNotifyRoute (line 340) | class SettingsNotifyRoute extends GoRouteData with $SettingsNotifyRoute {
    method build (line 345) | Widget build(BuildContext context, GoRouterState state)
  class SettingsNotifyEewRoute (line 351) | class SettingsNotifyEewRoute extends GoRouteData with $SettingsNotifyEew...
    method build (line 356) | Widget build(BuildContext context, GoRouterState state)
  class SettingsNotifyMonitorRoute (line 362) | class SettingsNotifyMonitorRoute extends GoRouteData with $SettingsNotif...
    method build (line 367) | Widget build(BuildContext context, GoRouterState state)
  class SettingsNotifyReportRoute (line 373) | class SettingsNotifyReportRoute extends GoRouteData with $SettingsNotify...
    method build (line 378) | Widget build(BuildContext context, GoRouterState state)
  class SettingsNotifyIntensityRoute (line 384) | class SettingsNotifyIntensityRoute extends GoRouteData with $SettingsNot...
    method build (line 389) | Widget build(BuildContext context, GoRouterState state)
  class SettingsNotifyThunderstormRoute (line 395) | class SettingsNotifyThunderstormRoute extends GoRouteData with $Settings...
    method build (line 400) | Widget build(BuildContext context, GoRouterState state)
  class SettingsNotifyAdvisoryRoute (line 406) | class SettingsNotifyAdvisoryRoute extends GoRouteData with $SettingsNoti...
    method build (line 411) | Widget build(BuildContext context, GoRouterState state)
  class SettingsNotifyEvacuationRoute (line 417) | class SettingsNotifyEvacuationRoute extends GoRouteData with $SettingsNo...
    method build (line 422) | Widget build(BuildContext context, GoRouterState state)
  class SettingsNotifyTsunamiRoute (line 428) | class SettingsNotifyTsunamiRoute extends GoRouteData with $SettingsNotif...
    method build (line 433) | Widget build(BuildContext context, GoRouterState state)
  class SettingsNotifyAnnouncementRoute (line 439) | class SettingsNotifyAnnouncementRoute extends GoRouteData with $Settings...
    method build (line 444) | Widget build(BuildContext context, GoRouterState state)
  class SettingsDonateRoute (line 450) | class SettingsDonateRoute extends GoRouteData with $SettingsDonateRoute {
    method build (line 455) | Widget build(BuildContext context, GoRouterState state)
  class MapRoute (line 461) | @TypedGoRoute<MapRoute>(path: '/map')
    method build (line 473) | Widget build(BuildContext context, GoRouterState state)
  class AnnouncementRoute (line 484) | @TypedGoRoute<AnnouncementRoute>(path: '/announcement')
    method build (line 490) | Widget build(BuildContext context, GoRouterState state)
  class ChangelogRoute (line 496) | @TypedGoRoute<ChangelogRoute>(path: '/changelog')
    method build (line 502) | Widget build(BuildContext context, GoRouterState state)
  class LicenseRoute (line 508) | @TypedGoRoute<LicenseRoute>(path: '/license')
    method build (line 514) | Widget build(BuildContext context, GoRouterState state)
  class AppDebugLogsRoute (line 520) | @TypedGoRoute<AppDebugLogsRoute>(path: '/debug/logs')
    method build (line 526) | Widget build(BuildContext context, GoRouterState state)

FILE: lib/utils/depth_color.dart
  function getDepthColor (line 11) | Color getDepthColor(double depth)

FILE: lib/utils/extensions/asset_bundle.dart
  function loadJson (line 22) | Future<Map<String, dynamic>> loadJson(String path)

FILE: lib/utils/extensions/build_context.dart
  function popUntil (line 71) | void popUntil(String path)

FILE: lib/utils/extensions/color_scheme.dart
  class ExtendedColors (line 3) | class ExtendedColors {

FILE: lib/utils/extensions/datetime.dart
  function _getDateFormat (line 18) | DateFormat _getDateFormat(String pattern, [String? locale])
  function toSimpleDateTimeString (line 39) | String toSimpleDateTimeString()
  function toLocaleFullDateString (line 45) | String toLocaleFullDateString(BuildContext context)
  function toDateTimeString (line 53) | String toDateTimeString()
  function toLocaleTimeString (line 58) | String toLocaleTimeString()
  function toFullSimpleDateTimeString (line 63) | String toFullSimpleDateTimeString()
  function toSimpleDateTimeString (line 74) | String toSimpleDateTimeString()
  function toLocaleFullDateString (line 80) | String toLocaleFullDateString(BuildContext context)
  function toLocaleDateTimeString (line 89) | String toLocaleDateTimeString(BuildContext context)
  function toLocaleTimeString (line 98) | String toLocaleTimeString(BuildContext context)
  function toFullSimpleDateTimeString (line 104) | String toFullSimpleDateTimeString()

FILE: lib/utils/extensions/go_router.dart
  function popUntil (line 30) | void popUntil(String routePath)

FILE: lib/utils/extensions/iterable.dart
  function orderedBy (line 26) | Iterable<T> orderedBy(Iterable<T> order)
  function containsWhere (line 42) | bool containsWhere(bool Function(T element) test)
  function superJoin (line 69) | List<T> superJoin(T separator)
  function expandBounds (line 108) | List<double> expandBounds(LatLng point)
  function orderedBy (line 154) | Set<T> orderedBy(Iterable<T> order)

FILE: lib/utils/extensions/latlng.dart
  function toGeoJsonFeatureBuilder (line 25) | GeoJsonFeatureBuilder toGeoJsonFeatureBuilder()
  function toGeoJsonBuilder (line 33) | GeoJsonBuilder toGeoJsonBuilder()
  function toGeoJsonMap (line 41) | Map<String, dynamic> toGeoJsonMap()
  function to (line 59) | double to(LatLng other)

FILE: lib/utils/extensions/maplibre.dart
  function setBaseMap (line 18) | Future<void> setBaseMap(BaseMapType baseMapType)
  function setOSMVisibility (line 36) | Future<void> setOSMVisibility(bool visible)
  function setGoogleVisibility (line 53) | Future<void> setGoogleVisibility(bool visible)
  function setExptechVisibility (line 70) | Future<void> setExptechVisibility(bool visible)
  function exists (line 97) | Future<bool> exists(String id, {bool? source, bool? layer})

FILE: lib/utils/extensions/number.dart
  function toSimpleDateTimeString (line 56) | String toSimpleDateTimeString()
  function toFullSimpleDateTimeString (line 61) | String toFullSimpleDateTimeString()
  function toLocaleFullDateString (line 67) | String toLocaleFullDateString(BuildContext context)
  function toLocaleDateTimeString (line 74) | String toLocaleDateTimeString(BuildContext context)
  function toLocaleTimeString (line 81) | String toLocaleTimeString(BuildContext context)
  function precision (line 92) | double precision(int precision)
  function precisionString (line 98) | String precisionString(int precision)

FILE: lib/utils/extensions/preference.dart
  function set (line 35) | Future<void> set<T>(String key, [T? value])

FILE: lib/utils/extensions/string.dart
  function toLocaleFullDateString (line 45) | String toLocaleFullDateString(BuildContext context)
  function toLocaleTimeString (line 52) | String toLocaleTimeString(BuildContext context)
  function toSimpleDateTimeString (line 58) | String toSimpleDateTimeString()
  function getLocation (line 91) | Location getLocation()
  function launch (line 118) | void launch()
  function copy (line 130) | Future<void> copy()

FILE: lib/utils/functions.dart
  function noop (line 15) | void noop()
  function ascending (line 26) | int ascending(num a, num b)
  function descending (line 37) | int descending(num a, num b)

FILE: lib/utils/geojson.dart
  type GeoJsonFeatureType (line 7) | enum GeoJsonFeatureType {
  class GeoJsonBuilder (line 51) | class GeoJsonBuilder {
    method setFeatures (line 69) | GeoJsonBuilder setFeatures(Iterable<GeoJsonFeatureBuilder> features)
    method addFeature (line 80) | GeoJsonBuilder addFeature(GeoJsonFeatureBuilder feature)
    method clearFeatures (line 90) | GeoJsonBuilder clearFeatures()
    method build (line 100) | Map<String, dynamic> build()
  class GeoJsonFeatureBuilder (line 127) | class GeoJsonFeatureBuilder<T extends GeoJsonFeatureType> {
    method setId (line 157) | GeoJsonFeatureBuilder setId(int id)
    method setGeometry (line 173) | GeoJsonFeatureBuilder setGeometry(List<dynamic> coordinates)
    method setProperty (line 193) | GeoJsonFeatureBuilder setProperty(String key, dynamic value)
    method build (line 203) | Map<String, dynamic> build()

FILE: lib/utils/instrumental_intensity_color.dart
  class InstrumentalIntensityColor (line 3) | class InstrumentalIntensityColor {
    method intensity (line 18) | Color intensity(int intensity)
    method i (line 47) | Color i(double? intensity)

FILE: lib/utils/intensity_color.dart
  class IntensityColor (line 3) | class IntensityColor {
    method intensity (line 17) | Color intensity(int intensity)
    method onIntensity (line 44) | Color onIntensity(int intensity)

FILE: lib/utils/intervals.dart
  type Intervals (line 1) | enum Intervals {

FILE: lib/utils/list_icon.dart
  function getListIcon (line 4) | IconData getListIcon(String name)

FILE: lib/utils/log.dart
  class CustomLoggerFormatter (line 3) | class CustomLoggerFormatter implements LoggerFormatter {
    method fmt (line 7) | String fmt(LogDetails details, TalkerLoggerSettings settings)
  class TalkerManager (line 16) | class TalkerManager {

FILE: lib/utils/magnitude_color.dart
  class MagnitudeColor (line 3) | class MagnitudeColor {
    method magnitude (line 13) | Color magnitude(double mag)

FILE: lib/utils/map_utils.dart
  type Units (line 10) | enum Units {
  function degreesToRadians (line 61) | double degreesToRadians(double degrees)
  function radiansToDegrees (line 67) | double radiansToDegrees(double radians)
  function lengthToRadians (line 77) | double lengthToRadians(double distance, {Units units = Units.kilometers})
  function destination (line 93) | LatLng destination(
  function circle (line 124) | Map<String, dynamic> circle(
  function circleFeature (line 162) | GeoJsonFeatureBuilder circleFeature({
  function checkBoxSkip (line 223) | bool checkBoxSkip(
  function getTownCodeFromCoordinates (line 249) | String? getTownCodeFromCoordinates(LatLng target)

FILE: lib/utils/need_location.dart
  function showLocationDialog (line 5) | Future<void> showLocationDialog(BuildContext context)

FILE: lib/utils/page_route_builder/forward_back.dart
  class ForwardBackPageRouteBuilder (line 3) | class ForwardBackPageRouteBuilder extends PageRouteBuilder {

FILE: lib/utils/serialization.dart
  function parseBoolishInt (line 24) | bool parseBoolishInt(v)
  function parseDouble (line 38) | double parseDouble(v)
  function parseDateTime (line 52) | TZDateTime parseDateTime(v)
  function dateTimeToJson (line 69) | int dateTimeToJson(TZDateTime v)

FILE: lib/utils/shader_selector.dart
  function parseVisibility (line 6) | double parseVisibility(dynamic value)
  class ShaderConfig (line 49) | class ShaderConfig {
  class ShaderSelector (line 63) | class ShaderSelector {
    method _isThunderstormCode (line 66) | bool _isThunderstormCode(int code)
    method _isRainCode (line 78) | bool _isRainCode(int code)
    method _isFogCode (line 93) | bool _isFogCode(int code)
    method selectShaderConfig (line 97) | ShaderConfig selectShaderConfig(RealtimeWeather? weather)
    method calculateFogIntensity (line 128) | double calculateFogIntensity(double visibility)
    method buildShaderBackground (line 138) | Widget buildShaderBackground({

FILE: lib/utils/toast.dart
  function showToast (line 5) | void showToast(BuildContext context, ToastWidget toast)
  class ToastWidget (line 17) | class ToastWidget extends StatelessWidget {
    method build (line 29) | Widget build(BuildContext context)

FILE: lib/utils/wallpaper_selector.dart
  class WallpaperSelector (line 1) | class WallpaperSelector {
    method _hashDate (line 29) | int _hashDate(DateTime date)
    method selectWallpaper (line 34) | String selectWallpaper(DateTime utc8Time)
    method getUtc8Time (line 56) | DateTime getUtc8Time()

FILE: lib/utils/weather_icon.dart
  class WeatherIcons (line 5) | class WeatherIcons {
    method getWeatherIcon (line 271) | IconData getWeatherIcon(int code, bool isDay)
    method getWeatherContent (line 280) | String getWeatherContent(BuildContext context, int code)
    method mapNumberToWeather (line 395) | String mapNumberToWeather(int number)

FILE: lib/widgets/blurred_container.dart
  class BlurredContainer (line 6) | class BlurredContainer extends StatelessWidget {
    method build (line 23) | Widget build(BuildContext context)

FILE: lib/widgets/chip/label_chip.dart
  class LabelChip (line 4) | class LabelChip extends StatelessWidget {
    method build (line 19) | Widget build(BuildContext context)

FILE: lib/widgets/error/region_out_of_service.dart
  class RegionOutOfService (line 5) | class RegionOutOfService extends StatelessWidget {
    method build (line 9) | Widget build(BuildContext context)

FILE: lib/widgets/fog_shader_background.dart
  class FogShaderBackground (line 7) | class FogShaderBackground extends StatefulWidget {
    method createState (line 28) | State<FogShaderBackground> createState()
  class _FogShaderBackgroundState (line 31) | class _FogShaderBackgroundState extends State<FogShaderBackground>
    method initState (line 41) | void initState()
    method _loadAssets (line 53) | Future<void> _loadAssets()
    method _loadImage (line 71) | Future<ui.Image> _loadImage(String path)
    method didUpdateWidget (line 79) | void didUpdateWidget(FogShaderBackground oldWidget)
    method dispose (line 92) | void dispose()
    method build (line 100) | Widget build(BuildContext context)
  class _FogShaderPainter (line 139) | class _FogShaderPainter extends CustomPainter {
    method paint (line 147) | void paint(Canvas canvas, Size size)
    method shouldRepaint (line 199) | bool shouldRepaint(covariant CustomPainter oldDelegate)

FILE: lib/widgets/home/event_list_route.dart
  function shouldShowArrow (line 10) | bool shouldShowArrow(History item)
  function handleEventList (line 22) | void handleEventList(BuildContext context, History history)

FILE: lib/widgets/home/forecast_weather_card.dart
  class ForecastWeatherCard (line 5) | class ForecastWeatherCard extends StatelessWidget {
    method build (line 22) | Widget build(BuildContext context)

FILE: lib/widgets/layout.dart
  class _VerticalLayout (line 3) | class _VerticalLayout {
    method copyWith (line 22) | _VerticalLayout copyWith({
    method call (line 42) | Widget call({Key? key, required List<Widget> children, EdgeInsets? pad...
  class VLayout (line 76) | class VLayout {
    method raw (line 100) | Column raw({
  class _HorizontalLayout (line 125) | class _HorizontalLayout {
    method copyWith (line 144) | _HorizontalLayout copyWith({
    method call (line 164) | Widget call({
  class HLayout (line 205) | class HLayout {
    method raw (line 231) | Row raw({
  class Layout (line 256) | class Layout {

FILE: lib/widgets/list/detail_field_tile.dart
  class DetailFieldTile (line 4) | class DetailFieldTile extends StatelessWidget {
    method build (line 11) | Widget build(BuildContext context)

FILE: lib/widgets/list/rain_time_selector.dart
  class RainTimeSelector (line 5) | class RainTimeSelector extends StatefulWidget {
    method createState (line 18) | State<RainTimeSelector> createState()
  class _RainTimeSelectorState (line 21) | class _RainTimeSelectorState extends State<RainTimeSelector> with Single...
    method initState (line 56) | void initState()
    method _convertTimestamp (line 76) | DateTime _convertTimestamp(String timestamp)
    method dispose (line 81) | void dispose()
    method _scrollToSelected (line 88) | void _scrollToSelected()
    method _scrollToSelectedInterval (line 112) | void _scrollToSelectedInterval()
    method _toggleExpanded (line 136) | void _toggleExpanded()
    method _buildTimeSelector (line 148) | Widget _buildTimeSelector()
    method _buildIntervalSelector (line 226) | Widget _buildIntervalSelector()
    method build (line 288) | Widget build(BuildContext context)

FILE: lib/widgets/list/segmented_list.dart
  class SegmentedList (line 29) | class SegmentedList extends StatelessWidget {
    method build (line 60) | Widget build(BuildContext context)
  class SliverSegmentedList (line 112) | class SliverSegmentedList extends StatelessWidget {
    method build (line 127) | Widget build(BuildContext context)
  class SegmentedListTile (line 177) | class SegmentedListTile extends StatelessWidget {
    method build (line 269) | Widget build(BuildContext context)
  class SectionText (line 383) | class SectionText extends StatelessWidget {
    method build (line 406) | Widget build(BuildContext context)

FILE: lib/widgets/list/tile_group_header.dart
  class ListTileGroupHeader (line 4) | class ListTileGroupHeader extends StatelessWidget {
    method build (line 10) | Widget build(BuildContext context)

FILE: lib/widgets/list/time_selector.dart
  class TimeSelector (line 5) | class TimeSelector extends StatefulWidget {
    method createState (line 18) | State<TimeSelector> createState()
  class _TimeSelectorState (line 21) | class _TimeSelectorState extends State<TimeSelector> with SingleTickerPr...
    method initState (line 30) | void initState()
    method _convertTimestamp (line 45) | DateTime _convertTimestamp(String timestamp)
    method dispose (line 50) | void dispose()
    method _scrollToSelected (line 56) | void _scrollToSelected()
    method _toggleExpanded (line 71) | void _toggleExpanded()
    method build (line 84) | Widget build(BuildContext context)

FILE: lib/widgets/list/timeline_tile.dart
  class TimeLineTile (line 5) | class TimeLineTile extends StatelessWidget {
    method build (line 28) | Widget build(BuildContext context)

FILE: lib/widgets/list/typhoon_time_selector.dart
  class TyphoonTimeSelector (line 5) | class TyphoonTimeSelector extends StatefulWidget {
    method createState (line 24) | State<TyphoonTimeSelector> createState()
  class _TyphoonTimeSelectorState (line 27) | class _TyphoonTimeSelectorState extends State<TyphoonTimeSelector>
    method initState (line 39) | void initState()
    method _convertTimestamp (line 59) | DateTime _convertTimestamp(String timestamp)
    method dispose (line 64) | void dispose()
    method _scrollToSelected (line 71) | void _scrollToSelected()
    method _scrollToSelectedTyphoon (line 95) | void _scrollToSelectedTyphoon()
    method _toggleExpanded (line 119) | void _toggleExpanded()
    method _buildTimeSelector (line 131) | Widget _buildTimeSelector()
    method _buildTyphoonSelector (line 201) | Widget _buildTyphoonSelector()
    method build (line 265) | Widget build(BuildContext context)

FILE: lib/widgets/map/intensity_legend.dart
  type IntensityLegendMode (line 5) | enum IntensityLegendMode {
  class IntensityLegend (line 13) | class IntensityLegend extends StatelessWidget {
    method build (line 27) | Widget build(BuildContext context)
    method _buildLegendItems (line 35) | List<Widget> _buildLegendItems()

FILE: lib/widgets/map/latlng_altitude.dart
  class LatLngAltitude (line 7) | class LatLngAltitude extends LatLng {
    method toGeoJsonCoordinates (line 21) | List<double> toGeoJsonCoordinates()
    method toString (line 24) | String toString()

FILE: lib/widgets/map/legend.dart
  class MapLegend (line 4) | class MapLegend extends StatelessWidget {
    method build (line 11) | Widget build(BuildContext context)

FILE: lib/widgets/map/map.dart
  type BaseMapType (line 14) | enum BaseMapType { exptech, osm, google }
  class BaseMapSourceIds (line 16) | class BaseMapSourceIds {
    method values (line 22) | Iterable<String> values()
  class BaseMapLayerIds (line 28) | class BaseMapLayerIds {
    method values (line 38) | Iterable<String> values()
  class DpipMap (line 47) | class DpipMap extends StatefulWidget {
    method createState (line 95) | State<DpipMap> createState()
    method adjustedZoom (line 97) | double adjustedZoom(BuildContext context, double zoom)
  class DpipMapState (line 114) | class DpipMapState extends State<DpipMap> {
    method _updateUserLocation (line 119) | Future<void> _updateUserLocation()
    method _initMap (line 166) | void _initMap()
    method initState (line 173) | void initState()
    method setThemeColors (line 181) | Future<void> setThemeColors(ColorScheme colors)
    method didChangeDependencies (line 209) | void didChangeDependencies()
    method build (line 225) | Widget build(BuildContext context)
    method dispose (line 297) | void dispose()

FILE: lib/widgets/map/style.dart
  class MapStyle (line 14) | class MapStyle {
    method save (line 50) | Future<String> save()
    method osmSource (line 66) | Map<String, dynamic> osmSource()
    method background (line 82) | Map<String, dynamic> background()
    method osmLayers (line 89) | List<Map<String, dynamic>> osmLayers(
    method googleSource (line 1119) | Map<String, dynamic> googleSource()
    method googleLayers (line 1129) | List<Map<String, dynamic>> googleLayers({bool visible = false})
    method exptechSource (line 1138) | Map<String, dynamic> exptechSource()
    method exptechLayers (line 1147) | List<Map<String, dynamic>> exptechLayers(
    method locationSource (line 1194) | Map<String, dynamic> locationSource()
    method locationLayer (line 1198) | Map<String, dynamic> locationLayer()

FILE: lib/widgets/markdown.dart
  type Language (line 26) | enum Language {
  function resolveLanguage (line 125) | Language? resolveLanguage(String language)
  class MarkdownPreWrapper (line 186) | class MarkdownPreWrapper extends StatefulWidget {
    method createState (line 200) | State<MarkdownPreWrapper> createState()
  class _MarkdownPreWrapperState (line 203) | class _MarkdownPreWrapperState extends State<MarkdownPreWrapper> {
    method copy (line 207) | void copy()
    method build (line 218) | Widget build(BuildContext context)
    method blockquote (line 313) | String blockquote(String text)
  function applyFont (line 322) | TextStyle applyFont(TextStyle style)
  class _H1Config (line 435) | class _H1Config extends H1Config {
  class _H2Config (line 444) | class _H2Config extends H2Config {
  class _H3Config (line 453) | class _H3Config extends H3Config {
  class Markdown (line 460) | class Markdown extends StatelessWidget {
    method build (line 466) | Widget build(BuildContext context)
    method applyFont (line 469) | TextStyle applyFont(TextStyle style)

FILE: lib/widgets/report/enlargeable_image.dart
  class EnlargeableImage (line 5) | class EnlargeableImage extends StatelessWidget {
    method build (line 22) | Widget build(BuildContext context)

FILE: lib/widgets/report/intensity_box.dart
  class IntensityBox (line 6) | class IntensityBox extends StatelessWidget {
    method build (line 21) | Widget build(BuildContext context)

FILE: lib/widgets/report/list_item.dart
  class ReportListItem (line 9) | class ReportListItem extends StatelessWidget {
    method build (line 26) | Widget build(BuildContext context)

FILE: lib/widgets/responsive/responsive_container.dart
  type ResponsiveMode (line 5) | enum ResponsiveMode {
  class ResponsiveContainer (line 10) | class ResponsiveContainer extends StatelessWidget {
    method build (line 23) | Widget build(BuildContext context)

FILE: lib/widgets/settings/theme/theme_radio_tile.dart
  class ThemeRadioTile (line 5) | class ThemeRadioTile extends StatelessWidget {
    method build (line 24) | Widget build(BuildContext context)

FILE: lib/widgets/sheet/bottom_sheet_drag_handle.dart
  class BottomSheetDragHandle (line 4) | class BottomSheetDragHandle extends StatelessWidget {
    method build (line 8) | Widget build(BuildContext context)

FILE: lib/widgets/sheet/morphing_sheet.dart
  type MorphingSheetBuilder (line 7) | typedef MorphingSheetBuilder =
  class MorphingSheet (line 14) | class MorphingSheet extends StatefulWidget {
    method createState (line 47) | State<MorphingSheet> createState()
  class _MorphingSheetState (line 50) | class _MorphingSheetState extends State<MorphingSheet> with SingleTicker...
    method initState (line 65) | void initState()
    method didUpdateWidget (line 82) | void didUpdateWidget(MorphingSheet oldWidget)
    method _attachController (line 90) | void _attachController()
    method _detachController (line 101) | void _detachController(MorphingSheetController? oldController)
    method _measureSizes (line 107) | void _measureSizes()
    method _onSheetPositionChanged (line 153) | void _onSheetPositionChanged()
    method _snapToPosition (line 161) | Future<void> _snapToPosition(double targetPosition)
    method _onDragEnd (line 182) | void _onDragEnd(double position)
    method build (line 191) | Widget build(BuildContext context)
    method _buildFullContent (line 459) | Widget _buildFullContent(ScrollController scrollController)
    method dispose (line 474) | void dispose()

FILE: lib/widgets/sheet/morphing_sheet_controller.dart
  class MorphingSheetController (line 5) | class MorphingSheetController {
    method attach (line 28) | void attach({
    method detach (line 41) | void detach()
    method expand (line 65) | Future<void> expand()
    method collapse (line 71) | Future<void> collapse()
    method snapToSize (line 77) | Future<void> snapToSize(double targetSize)
    method dispose (line 97) | void dispose()

FILE: lib/widgets/sheet/sheet_container.dart
  class SheetContainer (line 4) | class SheetContainer extends StatelessWidget {
    method build (line 23) | Widget build(BuildContext context)

FILE: lib/widgets/shell_wrapper.dart
  class ShellWrapper (line 5) | class ShellWrapper extends StatelessWidget {
    method _canPop (line 10) | bool _canPop(BuildContext context)
    method build (line 21) | Widget build(BuildContext context)

FILE: lib/widgets/thunderstorm_shader_background.dart
  class ThunderstormShaderBackground (line 6) | class ThunderstormShaderBackground extends StatefulWidget {
    method createState (line 23) | State<ThunderstormShaderBackground> createState()
  class _ThunderstormShaderBackgroundState (line 26) | class _ThunderstormShaderBackgroundState extends State<ThunderstormShade...
    method initState (line 36) | void initState()
    method _loadAssets (line 52) | Future<void> _loadAssets()
    method _loadImage (line 70) | Future<ui.Image> _loadImage(String path)
    method didUpdateWidget (line 78) | void didUpdateWidget(ThunderstormShaderBackground oldWidget)
    method dispose (line 93) | void dispose()
    method build (line 101) | Widget build(BuildContext context)
  class _ThunderstormShaderPainter (line 134) | class _ThunderstormShaderPainter extends CustomPainter {
    method paint (line 150) | void paint(Canvas canvas, Size size)
    method shouldRepaint (line 164) | bool shouldRepaint(covariant _ThunderstormShaderPainter oldDelegate)

FILE: lib/widgets/typography.dart
  class DisplayText (line 12) | class DisplayText extends StatelessWidget {
    method build (line 68) | Widget build(BuildContext context)
  class HeadLineText (line 84) | class HeadLineText extends StatelessWidget {
    method build (line 140) | Widget build(BuildContext context)
  class TitleText (line 157) | class TitleText extends StatelessWidget {
    method build (line 228) | Widget build(BuildContext context)
  class BodyText (line 245) | class BodyText extends StatelessWidget {
    method build (line 316) | Widget build(BuildContext context)
  class LabelText (line 333) | class LabelText extends StatelessWidget {
    method build (line 404) | Widget build(BuildContext context)

FILE: lib/widgets/ui/color_picker.dart
  function toHexString (line 12) | String toHexString([bool includeAlpha = false])
  class ColorPickerBackgroundPainter (line 19) | class ColorPickerBackgroundPainter extends CustomPainter {
    method paint (line 26) | void paint(Canvas canvas, Size size)
    method shouldRepaint (line 56) | bool shouldRepaint(covariant ColorPickerBackgroundPainter oldDelegate)
  class ColorPicker (line 60) | class ColorPicker extends StatefulWidget {
    method createState (line 73) | State<ColorPicker> createState()
  function _ColorFromAHSV (line 84) | Color _ColorFromAHSV(num alpha, num hue, num saturation, num value)
  function _calculatePositionFromColor (line 91) | Offset _calculatePositionFromColor(HSVColor color, Size size)
  function _updateFromPosition (line 105) | void _updateFromPosition(Offset position, Size size)
  function _update (line 123) | void _update({num? alpha, num? hue, num? saturation, num? value})
  function initState (line 178) | void initState()
  function didUpdateWidget (line 184) | void didUpdateWidget(covariant ColorPicker oldWidget)
  function build (line 193) | Widget build(BuildContext context)

FILE: lib/widgets/ui/icon_container.dart
  class ContainedIcon (line 37) | class ContainedIcon extends StatelessWidget {
    method build (line 133) | Widget build(BuildContext context)

FILE: lib/widgets/ui/labeled_divider.dart
  class LabeledDivider (line 4) | class LabeledDivider extends StatelessWidget {
    method build (line 10) | Widget build(BuildContext context)

FILE: lib/widgets/ui/loading_icon.dart
  class LoadingIcon (line 3) | class LoadingIcon extends StatelessWidget {
    method build (line 7) | Widget build(BuildContext context)
Condensed preview — 367 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,253K chars).
[
  {
    "path": ".crowdin/location_names.csv",
    "chars": 7161,
    "preview": "key,zh-Hant,en,ja,ko,ru,vi,zh-Hans\r\n連江,連江,Lienchiang,,,,,\r\n宜蘭,宜蘭,Yilan,,,,,\r\n彰化,彰化,Changhua,,,,,\r\n南投,南投,Nantou,,,,,\r\n雲林,"
  },
  {
    "path": ".crowdin/strings.pot",
    "chars": 33121,
    "preview": "#: ./lib/core/service.dart:291\nmsgid \"正在更新位置\"\nmsgstr \"\"\n\n#: ./lib/core/service.dart:292\nmsgid \"取得 GPS 位置中...\"\nmsgstr \"\"\n"
  },
  {
    "path": ".crowdin/weather_station_names.csv",
    "chars": 21329,
    "preview": "key,zh-Hant,en,ja,ko,ru,vi,zh-Hans\n466850,五分山雷達站,Wufenshan,,,,,\n466881,新北,New Taipei,,,,,\n466900,淡水,Tamsui,,,,,\n466910,鞍"
  },
  {
    "path": ".cursorrules",
    "chars": 2710,
    "preview": "# Cursor AI Rules\n\nLast Modified: 2025-12-29\n\nCheck for staleness: If this file is older than 2 months, ask the user to "
  },
  {
    "path": ".github/CODEOWNERS",
    "chars": 154,
    "preview": "/.github/ @exptechtw/dpip-developers\n\n/lib/app/ @kamiya10\n/lib/models/ @kamiya10\n/lib/core/service.dart @kamiya10\n/tools"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 873,
    "preview": "# These are supported funding model platforms\n\ngithub: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [u"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/Bug.yml",
    "chars": 1029,
    "preview": "name: \"🚧問題回報\"\nlabels: [\"錯誤\"]\nprojects: [\"ExpTechTW/12\"]\ndescription: |\n  請詳細描述你遇到的問題協助我們排除問題\ntitle: '[Bug]: '\nbody:\n- ty"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/Idea.md",
    "chars": 130,
    "preview": "---\nname: \"\\U0001F50C想法補充\"\nabout: 快來說說你的想法吧\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n### 🌟想法補充\n* 補充說明:\n\n#### 此檔案由 ExpTec"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 884,
    "preview": "<!--\n  如果是正在進行中的 Pull Request,請使用草稿 PR 功能,\n  詳情請參見:https://github.blog/2019-02-14-introducing-draft-pull-requests/\n\n  為了"
  },
  {
    "path": ".github/workflows/android.yml",
    "chars": 3185,
    "preview": "name: Build Android\n\non:\n  push:\n    branches: [\"main\"]\n  pull_request:\n    branches: [\"main\"]\n\njobs:\n  changes:\n    run"
  },
  {
    "path": ".github/workflows/claude-code-review.yml",
    "chars": 1870,
    "preview": "name: Claude Code Review\n\non:\n  pull_request:\n    types: [opened]\n    paths:\n      - '.crowdin/**'\n      - 'android/**'\n"
  },
  {
    "path": ".github/workflows/claude.yml",
    "chars": 1932,
    "preview": "name: Claude Code\n\non:\n  issue_comment:\n    types: [created]\n  pull_request_review_comment:\n    types: [created]\n  issue"
  },
  {
    "path": ".github/workflows/ios.yml",
    "chars": 1857,
    "preview": "name: Build iOS\n\non:\n  push:\n    branches: [\"main\"]\n  pull_request:\n    branches: [\"main\"]\n\njobs:\n  changes:\n    runs-on"
  },
  {
    "path": ".github/workflows/lock.yml",
    "chars": 950,
    "preview": "# Configuration for Lock Threads - https://github.com/dessant/lock-threads\n\nname: \"Lock Threads\"\n\n# By specifying the ac"
  },
  {
    "path": ".gitignore",
    "chars": 1449,
    "preview": "# Flutter/Dart specific\n.dart_tool/\n.flutter-plugins\n.flutter-plugins-dependencies\n.packages\n.pub-cache/\n.pub/\nbuild/\n*."
  },
  {
    "path": ".idx/dev.nix",
    "chars": 657,
    "preview": "{pkgs}: {\n  channel = \"stable-24.05\";\n  packages = [\n    pkgs.jdk17\n    pkgs.unzip\n  ];\n  idx.extensions = [\n    \n  ];\n "
  },
  {
    "path": ".metadata",
    "chars": 1114,
    "preview": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrade"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 5818,
    "preview": "# 更新日誌\n\n本專案的所有重要更改都將記錄在此文件中。\n\n格式基於 [如何維護更新日誌](https://keepachangelog.com/zh-TW/1.1.0/),\n並且本專案遵循 [語意化版本](https://semver.o"
  },
  {
    "path": "CLAUDE.md",
    "chars": 4266,
    "preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 1094,
    "preview": "# 貢獻者公約\n\n## 我們的承諾\n\n為了促進一個開放透明且受歡迎的環境,我們作為貢獻者和維護者保證,無論年齡、種族、民族、性別認同和表達、體型、殘疾、經驗水平、國籍、個人表現、宗教或性別取向,在我們的專案以及社群的參與者都有不被騷擾的體驗"
  },
  {
    "path": "LICENSE",
    "chars": 5301,
    "preview": "DPIP Public License\nCopyright (C) 2026 ExpTech Studio. All rights reserved.\n\n                        TERMS AND CONDITION"
  },
  {
    "path": "README.md",
    "chars": 5630,
    "preview": "[![splash](/.github/assets/splash.png)](#下載)\n\n<div align=\"center\">\n<a href=\"https://github.com/ExpTechTW/DPIP-Pocket/tre"
  },
  {
    "path": "analysis_options.yaml",
    "chars": 341,
    "preview": "include: package:lint/strict.yaml\n\nanalyzer:\n  errors:\n    todo: info\n  exclude:\n    - \"**.freezed.dart\"\n    - \"**.g.dar"
  },
  {
    "path": "android/.gitignore",
    "chars": 285,
    "preview": "gradle-wrapper.jar\n/.gradle\n/captures/\n/gradlew\n/gradlew.bat\n/local.properties\nGeneratedPluginRegistrant.java\n\n# Remembe"
  },
  {
    "path": "android/app/build.gradle",
    "chars": 2807,
    "preview": "plugins {\n    id \"com.android.application\"\n    id \"org.jetbrains.kotlin.android\"\n    id \"dev.flutter.flutter-gradle-plug"
  },
  {
    "path": "android/app/google-services.json",
    "chars": 658,
    "preview": "{\n  \"project_info\": {\n    \"project_number\": \"141632948166\",\n    \"project_id\": \"dpip-a658c\",\n    \"storage_bucket\": \"dpip-"
  },
  {
    "path": "android/app/src/debug/AndroidManifest.xml",
    "chars": 378,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <!-- The INTERNET permission is required for d"
  },
  {
    "path": "android/app/src/main/AndroidManifest.xml",
    "chars": 4417,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" xmlns:tools=\"http://schemas.android.com/tools\">\n\n  "
  },
  {
    "path": "android/app/src/main/kotlin/com/exptech/dpip/MainActivity.kt",
    "chars": 1511,
    "preview": "package com.exptech.dpip\n\nimport android.content.Intent\nimport android.os.Bundle\nimport io.flutter.embedding.android.Flu"
  },
  {
    "path": "android/app/src/main/res/drawable/launch_background.xml",
    "chars": 433,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmln"
  },
  {
    "path": "android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
    "chars": 334,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <b"
  },
  {
    "path": "android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
    "chars": 334,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <b"
  },
  {
    "path": "android/app/src/main/res/values/colors.xml",
    "chars": 76,
    "preview": "<resources>\n    <color name=\"splash_background\">#FFFFFF</color>\n</resources>"
  },
  {
    "path": "android/app/src/main/res/values/strings.xml",
    "chars": 199,
    "preview": "<resources>\n    <string name=\"app_name\">DPIP</string>\n    <string name=\"shortcut_monitor_short\">Monitor</string>\n    <st"
  },
  {
    "path": "android/app/src/main/res/values/styles.xml",
    "chars": 602,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- Theme applied to the Android Window while the process is sta"
  },
  {
    "path": "android/app/src/main/res/values-ja/strings.xml",
    "chars": 186,
    "preview": "<resources>\n    <string name=\"app_name\">DPIP防災</string>\n    <string name=\"shortcut_monitor_short\">強震モニター</string>\n    <s"
  },
  {
    "path": "android/app/src/main/res/values-ko/strings.xml",
    "chars": 187,
    "preview": "<resources>\n    <string name=\"app_name\">DPIP 재해</string>\n    <string name=\"shortcut_monitor_short\">강진 모니터</string>\n    <"
  },
  {
    "path": "android/app/src/main/res/values-night/colors.xml",
    "chars": 76,
    "preview": "<resources>\n    <color name=\"splash_background\">#000000</color>\n</resources>"
  },
  {
    "path": "android/app/src/main/res/values-night/styles.xml",
    "chars": 601,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- Theme applied to the Android Window while the process is sta"
  },
  {
    "path": "android/app/src/main/res/values-night-v31/styles.xml",
    "chars": 792,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- Theme applied to the Android Window while the process is sta"
  },
  {
    "path": "android/app/src/main/res/values-sw600dp/styles.xml",
    "chars": 181,
    "preview": "<resources>\n    <style name=\"NormalTheme\" parent=\"Theme.Material3.DayNight.NoActionBar\">\n        <item name=\"android:scr"
  },
  {
    "path": "android/app/src/main/res/values-v31/styles.xml",
    "chars": 792,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- Theme applied to the Android Window while the process is sta"
  },
  {
    "path": "android/app/src/main/res/values-zh/strings.xml",
    "chars": 184,
    "preview": "<resources>\n    <string name=\"app_name\">DPIP 防災</string>\n    <string name=\"shortcut_monitor_short\">強震監視器</string>\n    <s"
  },
  {
    "path": "android/app/src/main/res/values-zh-rTW/strings.xml",
    "chars": 184,
    "preview": "<resources>\n    <string name=\"app_name\">DPIP 防災</string>\n    <string name=\"shortcut_monitor_short\">強震監視器</string>\n    <s"
  },
  {
    "path": "android/app/src/main/res/xml/shortcuts.xml",
    "chars": 667,
    "preview": "<shortcuts xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <shortcut\n            android:shortcutId=\"mon"
  },
  {
    "path": "android/app/src/profile/AndroidManifest.xml",
    "chars": 2058,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          xmlns:tools=\"http://schemas.android.com/t"
  },
  {
    "path": "android/build.gradle",
    "chars": 322,
    "preview": "allprojects {\n    repositories {\n        google()\n        mavenCentral()\n    }\n}\n\nrootProject.buildDir = '../build'\n\nsub"
  },
  {
    "path": "android/gradle/wrapper/gradle-wrapper.properties",
    "chars": 202,
    "preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dist"
  },
  {
    "path": "android/gradle.properties",
    "chars": 122,
    "preview": "org.gradle.jvmargs=-Xmx4G\nandroid.useAndroidX=true\nandroid.enableJetifier=true\nkotlin.jvm.target.validation.mode = IGNOR"
  },
  {
    "path": "android/settings.gradle",
    "chars": 929,
    "preview": "pluginManagement {\n    def flutterSdkPath = {\n        def properties = new Properties()\n        file(\"local.properties\")"
  },
  {
    "path": "assets/box.json",
    "chars": 7047,
    "preview": "{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[121.38,25.1],[12"
  },
  {
    "path": "assets/notify_test.json",
    "chars": 2080,
    "preview": "{\"eew_alert-important-v2\":{\"title\":\"🚨 《緊急地震速報 (氣象署發布) 》\",\"body\":\"花蓮縣壽豐鄉發生地震 強烈搖晃警戒\\n〈預估強烈搖晃地區〉\\n花蓮 南投 臺東 宜蘭\"},\"eew_alert"
  },
  {
    "path": "assets/translations/en.po",
    "chars": 44740,
    "preview": "msgid \"\"\nmsgstr \"\"\n\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n\"X-Crowdin-Project: dpip\\n\"\n\"X-Crowdin-Project-ID: 696"
  },
  {
    "path": "assets/translations/ja.po",
    "chars": 37566,
    "preview": "msgid \"\"\nmsgstr \"\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"X-Crowdin-Project: dpip\\n\"\n\"X-Crowdin-Project-ID: 696803\\n\"\n"
  },
  {
    "path": "assets/translations/ko.po",
    "chars": 38720,
    "preview": "msgid \"\"\nmsgstr \"\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"X-Crowdin-Project: dpip\\n\"\n\"X-Crowdin-Project-ID: 696803\\n\"\n"
  },
  {
    "path": "assets/translations/location_names.csv",
    "chars": 16432,
    "preview": "\"key\",\"zh-Hant\",\"en\",\"ja\",\"ko\",\"ru\",\"vi\",\"zh-Hans\"\n\"連江\",\"連江\",\"Lienchiang\",\"連江\",\"롄장\",\"連江\",\"連江\",\"连江\"\n\"宜蘭\",\"宜蘭\",\"Yilan\",\"宜蘭"
  },
  {
    "path": "assets/translations/ru.po",
    "chars": 34154,
    "preview": "msgid \"\"\nmsgstr \"\"\n\"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 1"
  },
  {
    "path": "assets/translations/vi.po",
    "chars": 41546,
    "preview": "msgid \"\"\nmsgstr \"\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"X-Crowdin-Project: dpip\\n\"\n\"X-Crowdin-Project-ID: 696803\\n\"\n"
  },
  {
    "path": "assets/translations/weather_station_names.csv",
    "chars": 45953,
    "preview": "\"key\",\"zh-Hant\",\"en\",\"ja\",\"ko\",\"ru\",\"vi\",\"zh-Hans\"\n\"466850\",\"五分山雷達站\",\"Wufenshan\",\"五分山レーダー局\",\"五分山雷達站\",\"五分山雷達站\",\"五分山雷達站\",\""
  },
  {
    "path": "assets/translations/zh-Hans.po",
    "chars": 37188,
    "preview": "msgid \"\"\nmsgstr \"\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"X-Crowdin-Project: dpip\\n\"\n\"X-Crowdin-Project-ID: 696803\\n\"\n"
  },
  {
    "path": "assets/translations/zh-Hant.po",
    "chars": 37954,
    "preview": "msgid \"\"\nmsgstr \"\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"X-Crowdin-Project: dpip\\n\"\n\"X-Crowdin-Project-ID: 696803\\n\"\n"
  },
  {
    "path": "crowdin.yml",
    "chars": 296,
    "preview": "files:\n  - source: /.crowdin/strings.pot\n    translation: /assets/translations/%osx_locale%.po\n  - source: /.crowdin/*.c"
  },
  {
    "path": "devtools_options.yaml",
    "chars": 231,
    "preview": "description: This file stores settings for Dart & Flutter DevTools.\ndocumentation: https://docs.flutter.dev/tools/devtoo"
  },
  {
    "path": "docs/sound.mdx",
    "chars": 1025,
    "preview": "# 緊急地震速報\n\n## 緊急地震速報(重大)\n\n- 條件:最大震度 5 弱以上以及所在地(鄉鎮)預估震度 4 以上。\n- 音效:eew_alert\n\n## 緊急地震速報(一般)\n\n- 條件:最大震度 5 弱以上以及所在地(鄉鎮)預估震度 "
  },
  {
    "path": "ios/.gitignore",
    "chars": 569,
    "preview": "**/dgph\n*.mode1v3\n*.mode2v3\n*.moved-aside\n*.pbxuser\n*.perspectivev3\n**/*sync/\n.sconsign.dblite\n.tags*\n**/.vagrant/\n**/De"
  },
  {
    "path": "ios/Flutter/AppFrameworkInfo.plist",
    "chars": 720,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ios/Flutter/Debug.xcconfig",
    "chars": 107,
    "preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "ios/Flutter/Profile.xcconfig",
    "chars": 109,
    "preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "ios/Flutter/Release.xcconfig",
    "chars": 109,
    "preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "ios/Podfile",
    "chars": 2551,
    "preview": "# Uncomment this line to define a global platform for your project\nplatform :ios, '13.0'\n\n# CocoaPods analytics sends ne"
  },
  {
    "path": "ios/Runner/AppDelegate.swift",
    "chars": 11183,
    "preview": "import CoreLocation\nimport Flutter\nimport UIKit\nimport Intents\nimport Photos\nimport UserNotifications\n\n@UIApplicationMai"
  },
  {
    "path": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 2710,
    "preview": "{\n  \"images\": [\n    {\n      \"size\": \"20x20\",\n      \"idiom\": \"iphone\",\n      \"filename\": \"Icon-App-20x20@2x.png\",\n      \""
  },
  {
    "path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
    "chars": 186,
    "preview": "{\n  \"images\" : [\n    {\n      \"filename\" : \"LaunchImage@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n"
  },
  {
    "path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
    "chars": 336,
    "preview": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in"
  },
  {
    "path": "ios/Runner/Base.lproj/InfoPlist.strings",
    "chars": 32,
    "preview": "\"CFBundleDisplayName\" = \"DPIP\";\n"
  },
  {
    "path": "ios/Runner/Base.lproj/LaunchScreen.storyboard",
    "chars": 3412,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "ios/Runner/Base.lproj/Main.storyboard",
    "chars": 1605,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "ios/Runner/GoogleService-Info.plist",
    "chars": 865,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ios/Runner/Info.plist",
    "chars": 3014,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ios/Runner/Runner-Bridging-Header.h",
    "chars": 38,
    "preview": "#import \"GeneratedPluginRegistrant.h\"\n"
  },
  {
    "path": "ios/Runner/Runner.entitlements",
    "chars": 321,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ios/Runner/RunnerProfile.entitlements",
    "chars": 321,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ios/Runner/en.lproj/Monitor.strings",
    "chars": 113,
    "preview": "\"l2uH53\" = \"This shortcut opens the Earthquake Monitor screen directly\";\n\n\"qno9IY\" = \"Open Earthquake Monitor\";\n\n"
  },
  {
    "path": "ios/Runner/ja.lproj/InfoPlist.strings",
    "chars": 34,
    "preview": "\"CFBundleDisplayName\" = \"DPIP防災\";\n"
  },
  {
    "path": "ios/Runner/ja.lproj/Monitor.strings",
    "chars": 66,
    "preview": "\"l2uH53\" = \"このショートカットは強震モニター画面を直接開きます\";\n\n\"qno9IY\" = \"強震モニターを開く\";\n\n"
  },
  {
    "path": "ios/Runner/ko.lproj/InfoPlist.strings",
    "chars": 35,
    "preview": "\"CFBundleDisplayName\" = \"DPIP 재해\";\n"
  },
  {
    "path": "ios/Runner/ko.lproj/Monitor.strings",
    "chars": 65,
    "preview": "\"l2uH53\" = \"이 단축키는 강진 모니터 화면을 직접 엽니다\";\n\n\"qno9IY\" = \"강진 모니터 열기\";\n\n"
  },
  {
    "path": "ios/Runner/zh.lproj/InfoPlist.strings",
    "chars": 35,
    "preview": "\"CFBundleDisplayName\" = \"DPIP 防灾\";\n"
  },
  {
    "path": "ios/Runner/zh_TW.lproj/InfoPlist.strings",
    "chars": 35,
    "preview": "\"CFBundleDisplayName\" = \"DPIP 防災\";\n"
  },
  {
    "path": "ios/Runner/zh_TW.lproj/Monitor.intentdefinition",
    "chars": 2062,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ios/Runner.xcodeproj/project.pbxproj",
    "chars": 42808,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 135,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef"
  },
  {
    "path": "ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "chars": 226,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
    "chars": 3833,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "ios/Runner.xcworkspace/contents.xcworkspacedata",
    "chars": 224,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodepr"
  },
  {
    "path": "ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "chars": 226,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ios/RunnerTests/RunnerTests.swift",
    "chars": 285,
    "preview": "import Flutter\nimport UIKit\nimport XCTest\n\nclass RunnerTests: XCTestCase {\n\n  func testExample() {\n    // If you add cod"
  },
  {
    "path": "lib/api/_client.dart",
    "chars": 2394,
    "preview": "part of 'exptech.dart';\n\n/// Thrown when RTS data is unavailable for the requested time.\nclass Rtsnodata implements Exce"
  },
  {
    "path": "lib/api/endpoints/app.dart",
    "chars": 1894,
    "preview": "part of '../exptech.dart';\n\n/// App meta endpoint methods.\nmixin AppEndpoints {\n  /// Fetches Crowdin localization progr"
  },
  {
    "path": "lib/api/endpoints/device.dart",
    "chars": 3075,
    "preview": "part of '../exptech.dart';\n\n/// Device, NTP, and notification endpoint methods.\nmixin DeviceEndpoints {\n  /// Returns th"
  },
  {
    "path": "lib/api/endpoints/earthquake.dart",
    "chars": 2426,
    "preview": "part of '../exptech.dart';\n\n/// Earthquake, EEW, and RTS endpoint methods.\nmixin EarthquakeEndpoints {\n  /// Fetches a f"
  },
  {
    "path": "lib/api/endpoints/history.dart",
    "chars": 1449,
    "preview": "part of '../exptech.dart';\n\n/// History, realtime, and event endpoint methods.\nmixin HistoryEndpoints {\n  /// Fetches th"
  },
  {
    "path": "lib/api/endpoints/station.dart",
    "chars": 901,
    "preview": "part of '../exptech.dart';\n\n/// Station and radar endpoint methods.\nmixin StationEndpoints {\n  /// Fetches the TREM stat"
  },
  {
    "path": "lib/api/endpoints/tsunami.dart",
    "chars": 528,
    "preview": "part of '../exptech.dart';\n\n/// Tsunami endpoint methods.\nmixin TsunamiEndpoints {\n  /// Fetches tsunami data by [id].\n "
  },
  {
    "path": "lib/api/endpoints/weather.dart",
    "chars": 2781,
    "preview": "part of '../exptech.dart';\n\n/// Weather, rain, lightning, and typhoon endpoint methods.\nmixin WeatherEndpoints {\n  /// F"
  },
  {
    "path": "lib/api/exptech.dart",
    "chars": 2096,
    "preview": "import 'dart:convert';\nimport 'dart:io';\nimport 'dart:typed_data';\n\nimport 'package:dio/dio.dart';\nimport 'package:dio/i"
  },
  {
    "path": "lib/api/model/announcement.dart",
    "chars": 628,
    "preview": "import 'package:json_annotation/json_annotation.dart';\n\npart 'announcement.g.dart';\n\n@JsonSerializable()\nclass Announcem"
  },
  {
    "path": "lib/api/model/changelog/changelog.dart",
    "chars": 5434,
    "preview": "import 'package:json_annotation/json_annotation.dart';\n\npart 'changelog.g.dart';\n\n@JsonSerializable()\nclass GithubReleas"
  },
  {
    "path": "lib/api/model/crowdin/localization_progress.dart",
    "chars": 742,
    "preview": "import 'package:freezed_annotation/freezed_annotation.dart';\n\npart 'localization_progress.g.dart';\n\n@JsonSerializable()\n"
  },
  {
    "path": "lib/api/model/eew.dart",
    "chars": 897,
    "preview": "import 'package:dpip/api/model/eew_info.dart';\nimport 'package:dpip/utils/serialization.dart';\nimport 'package:json_anno"
  },
  {
    "path": "lib/api/model/eew_info.dart",
    "chars": 1475,
    "preview": "import 'package:json_annotation/json_annotation.dart';\nimport 'package:maplibre_gl/maplibre_gl.dart';\n\npart 'eew_info.g."
  },
  {
    "path": "lib/api/model/history/history.dart",
    "chars": 3345,
    "preview": "import 'package:dpip/api/model/history/intensity_history.dart';\nimport 'package:dpip/api/model/history/report_history.da"
  },
  {
    "path": "lib/api/model/history/intensity_history.dart",
    "chars": 1322,
    "preview": "import 'package:dpip/api/model/history/history.dart';\nimport 'package:dpip/utils/serialization.dart';\nimport 'package:fr"
  },
  {
    "path": "lib/api/model/history/report_history.dart",
    "chars": 982,
    "preview": "import 'package:dpip/api/model/history/history.dart';\nimport 'package:freezed_annotation/freezed_annotation.dart';\n\npart"
  },
  {
    "path": "lib/api/model/intensity_listing.dart",
    "chars": 511,
    "preview": "import 'package:json_annotation/json_annotation.dart';\n\npart 'intensity_listing.g.dart';\n\n@JsonSerializable()\nclass Inte"
  },
  {
    "path": "lib/api/model/location/location.dart",
    "chars": 10924,
    "preview": "import 'package:dpip/core/i18n.dart';\nimport 'package:dpip/global.dart';\nimport 'package:i18n_extension/i18n_extension.d"
  },
  {
    "path": "lib/api/model/meteor_station.dart",
    "chars": 1682,
    "preview": "import 'package:json_annotation/json_annotation.dart';\n\npart 'meteor_station.g.dart';\n\n@JsonSerializable()\nclass MeteorS"
  },
  {
    "path": "lib/api/model/notification_record.dart",
    "chars": 689,
    "preview": "import 'package:json_annotation/json_annotation.dart';\n\npart 'notification_record.g.dart';\n\n@JsonSerializable()\nclass No"
  },
  {
    "path": "lib/api/model/notify/notify_settings.dart",
    "chars": 1769,
    "preview": "import 'package:dpip/models/settings/notify.dart';\n\nclass NotifySettings {\n  final EewNotifyType eew;\n  final Earthquake"
  },
  {
    "path": "lib/api/model/received_notification.dart",
    "chars": 247,
    "preview": "class ReceivedNotification {\n  ReceivedNotification({\n    required this.id,\n    required this.title,\n    required this.b"
  },
  {
    "path": "lib/api/model/report/area_intensity.dart",
    "chars": 535,
    "preview": "import 'package:dpip/api/model/station_intensity.dart';\nimport 'package:json_annotation/json_annotation.dart';\n\npart 'ar"
  },
  {
    "path": "lib/api/model/report/earthquake_report.dart",
    "chars": 5795,
    "preview": "import 'package:collection/collection.dart';\nimport 'package:dpip/api/model/report/area_intensity.dart';\nimport 'package"
  },
  {
    "path": "lib/api/model/report/partial_earthquake_report.dart",
    "chars": 4840,
    "preview": "import 'package:dpip/utils/extensions/latlng.dart';\nimport 'package:dpip/utils/geojson.dart';\nimport 'package:dpip/utils"
  },
  {
    "path": "lib/api/model/rts/rts.dart",
    "chars": 1486,
    "preview": "import 'package:dpip/api/model/rts/rts_intensity.dart';\nimport 'package:dpip/api/model/rts/rts_station.dart';\nimport 'pa"
  },
  {
    "path": "lib/api/model/rts/rts_intensity.dart",
    "chars": 396,
    "preview": "import 'package:json_annotation/json_annotation.dart';\n\npart 'rts_intensity.g.dart';\n\n@JsonSerializable()\nclass RtsInten"
  },
  {
    "path": "lib/api/model/rts/rts_station.dart",
    "chars": 647,
    "preview": "import 'package:dpip/utils/serialization.dart';\nimport 'package:json_annotation/json_annotation.dart';\n\npart 'rts_statio"
  },
  {
    "path": "lib/api/model/server_status.dart",
    "chars": 1021,
    "preview": "import 'package:intl/intl.dart';\nimport 'package:json_annotation/json_annotation.dart';\n\npart 'server_status.g.dart';\n\n@"
  },
  {
    "path": "lib/api/model/station.dart",
    "chars": 571,
    "preview": "import 'package:dpip/api/model/station_info.dart';\nimport 'package:json_annotation/json_annotation.dart';\n\npart 'station"
  },
  {
    "path": "lib/api/model/station_info.dart",
    "chars": 705,
    "preview": "import 'package:json_annotation/json_annotation.dart';\nimport 'package:maplibre_gl/maplibre_gl.dart';\n\npart 'station_inf"
  },
  {
    "path": "lib/api/model/station_intensity.dart",
    "chars": 928,
    "preview": "import 'package:dpip/utils/extensions/latlng.dart';\nimport 'package:dpip/utils/geojson.dart';\nimport 'package:json_annot"
  },
  {
    "path": "lib/api/model/tsunami/tsunami.dart",
    "chars": 1465,
    "preview": "import 'package:dpip/api/model/tsunami/tsunami_earthquake.dart';\nimport 'package:dpip/api/model/tsunami/tsunami_info.dar"
  },
  {
    "path": "lib/api/model/tsunami/tsunami_actual.dart",
    "chars": 1078,
    "preview": "import 'package:json_annotation/json_annotation.dart';\n\npart 'tsunami_actual.g.dart';\n\n@JsonSerializable()\nclass Tsunami"
  },
  {
    "path": "lib/api/model/tsunami/tsunami_earthquake.dart",
    "chars": 1132,
    "preview": "import 'package:json_annotation/json_annotation.dart';\n\npart 'tsunami_earthquake.g.dart';\n\n@JsonSerializable()\nclass Tsu"
  },
  {
    "path": "lib/api/model/tsunami/tsunami_estimate.dart",
    "chars": 759,
    "preview": "import 'package:json_annotation/json_annotation.dart';\n\npart 'tsunami_estimate.g.dart';\n\n@JsonSerializable()\nclass Tsuna"
  },
  {
    "path": "lib/api/model/tsunami/tsunami_info.dart",
    "chars": 1219,
    "preview": "import 'package:dpip/api/model/tsunami/tsunami_actual.dart';\nimport 'package:dpip/api/model/tsunami/tsunami_estimate.dar"
  },
  {
    "path": "lib/api/model/tsunami/tsunami_list.dart",
    "chars": 340,
    "preview": "import 'package:freezed_annotation/freezed_annotation.dart';\n\npart 'tsunami_list.g.dart';\n\n@JsonSerializable()\nclass Tsu"
  },
  {
    "path": "lib/api/model/wave_time.dart",
    "chars": 110,
    "preview": "class WaveTime {\n  final double p;\n  final double s;\n\n  const WaveTime({required this.p, required this.s});\n}\n"
  },
  {
    "path": "lib/api/model/weather/lightning.dart",
    "chars": 1335,
    "preview": "import 'package:dpip/utils/geojson.dart';\nimport 'package:json_annotation/json_annotation.dart';\n\npart 'lightning.g.dart"
  },
  {
    "path": "lib/api/model/weather/rain.dart",
    "chars": 3152,
    "preview": "import 'package:dpip/utils/extensions/latlng.dart';\nimport 'package:dpip/utils/geojson.dart';\nimport 'package:dpip/widge"
  },
  {
    "path": "lib/api/model/weather/weather.dart",
    "chars": 3963,
    "preview": "import 'package:dpip/utils/extensions/latlng.dart';\nimport 'package:dpip/utils/geojson.dart';\nimport 'package:json_annot"
  },
  {
    "path": "lib/api/model/weather_schema.dart",
    "chars": 2720,
    "preview": "import 'package:json_annotation/json_annotation.dart';\n\npart 'weather_schema.g.dart';\n\n@JsonSerializable()\nclass Realtim"
  },
  {
    "path": "lib/api/route.dart",
    "chars": 1183,
    "preview": "import 'dart:math';\n\nclass _BaseUrlGenerator {\n  final String _prefix;\n  final int _count;\n\n  const _BaseUrlGenerator({r"
  },
  {
    "path": "lib/app/changelog/_widgets/update_card.dart",
    "chars": 3306,
    "preview": "/// A card widget that highlights an available app update.\nlibrary;\n\nimport 'package:dpip/utils/extensions/build_context"
  },
  {
    "path": "lib/app/changelog/page.dart",
    "chars": 7540,
    "preview": "/// The changelog page, displaying a list of GitHub releases for the app.\nlibrary;\n\nimport 'dart:async';\n\nimport 'packag"
  },
  {
    "path": "lib/app/debug/logs/page.dart",
    "chars": 966,
    "preview": "/// The debug logs page, displaying in-app Talker log output.\nlibrary;\n\nimport 'package:dpip/core/i18n.dart';\nimport 'pa"
  },
  {
    "path": "lib/app/home/_models/home_location.dart",
    "chars": 815,
    "preview": "/// Model for temporarily overriding the home screen location.\nlibrary;\n\nimport 'package:flutter/material.dart';\n\n/// Ho"
  },
  {
    "path": "lib/app/home/_widgets/blurred_button.dart",
    "chars": 4490,
    "preview": "/// Blurred glass-effect button widgets for the home screen overlay.\nlibrary;\n\nimport 'dart:ui';\n\nimport 'package:dpip/u"
  },
  {
    "path": "lib/app/home/_widgets/date_timeline_item.dart",
    "chars": 6790,
    "preview": "/// Timeline item widget that shows a date header with an optional mode selector.\nlibrary;\n\nimport 'package:dpip/app/hom"
  },
  {
    "path": "lib/app/home/_widgets/eew_card.dart",
    "chars": 14739,
    "preview": "/// Earthquake Early Warning (EEW) alert card for the home screen.\nlibrary;\n\nimport 'dart:async';\n\nimport 'package:dpip/"
  },
  {
    "path": "lib/app/home/_widgets/forecast_card.dart",
    "chars": 7321,
    "preview": "/// 24-hour weather forecast card for the home screen.\nlibrary;\n\nimport 'dart:math';\n\nimport 'package:dpip/core/i18n.dar"
  },
  {
    "path": "lib/app/home/_widgets/hero_weather.dart",
    "chars": 6464,
    "preview": "/// Full-screen hero weather section displayed at the top of the home page.\nlibrary;\n\nimport 'dart:math';\n\nimport 'packa"
  },
  {
    "path": "lib/app/home/_widgets/history_timeline_item.dart",
    "chars": 5536,
    "preview": "/// Timeline item widget for a single history event entry.\nlibrary;\n\nimport 'package:dpip/api/model/history/history.dart"
  },
  {
    "path": "lib/app/home/_widgets/location_button.dart",
    "chars": 9740,
    "preview": "/// Location selector button and bottom sheet for the home screen.\nlibrary;\n\nimport 'package:dpip/api/model/location/loc"
  },
  {
    "path": "lib/app/home/_widgets/location_not_set_card.dart",
    "chars": 1752,
    "preview": "/// Card shown when no home location has been configured.\nlibrary;\n\nimport 'package:dpip/core/i18n.dart';\nimport 'packag"
  },
  {
    "path": "lib/app/home/_widgets/location_out_of_service.dart",
    "chars": 1317,
    "preview": "/// Card shown when the user's GPS location is outside the service area.\nlibrary;\n\nimport 'package:dpip/core/i18n.dart';"
  },
  {
    "path": "lib/app/home/_widgets/mode_toggle_button.dart",
    "chars": 5822,
    "preview": "/// Mode toggle button and [HomeMode] enum for the home screen history filter.\nlibrary;\n\nimport 'dart:ui';\n\nimport 'pack"
  },
  {
    "path": "lib/app/home/_widgets/radar_card.dart",
    "chars": 7772,
    "preview": "/// Radar map card that shows the latest precipitation radar imagery.\nlibrary;\n\nimport 'dart:async';\n\nimport 'package:dp"
  },
  {
    "path": "lib/app/home/_widgets/thunderstorm_card.dart",
    "chars": 5032,
    "preview": "/// Card that alerts the user to active thunderstorm warnings near their\n/// location.\nlibrary;\n\nimport 'package:dpip/ap"
  },
  {
    "path": "lib/app/home/_widgets/weather_header.dart",
    "chars": 12571,
    "preview": "/// Detailed weather header widget showing temperature, conditions, and\n/// station metadata.\nlibrary;\n\nimport 'dart:mat"
  },
  {
    "path": "lib/app/home/_widgets/wind_card.dart",
    "chars": 19604,
    "preview": "/// Wind and compass card displaying real-time wind data for the home screen.\nlibrary;\n\nimport 'dart:async';\nimport 'dar"
  },
  {
    "path": "lib/app/home/layout.dart",
    "chars": 787,
    "preview": "/// Home screen layout providing the [HomeLocationModel] to descendant widgets.\nlibrary;\n\nimport 'package:dpip/app/home/"
  },
  {
    "path": "lib/app/home/page.dart",
    "chars": 33385,
    "preview": "/// Main home page presenting weather, EEW alerts, and event history.\nlibrary;\n\nimport 'dart:ui';\n\nimport 'package:colle"
  },
  {
    "path": "lib/app/map/_lib/manager.dart",
    "chars": 2044,
    "preview": "/// Base class for all map layer managers used in the DPIP map feature.\nlibrary;\n\nimport 'package:flutter/material.dart'"
  },
  {
    "path": "lib/app/map/_lib/managers/lightning.dart",
    "chars": 15847,
    "preview": "/// Map layer manager and associated UI for lightning data.\nlibrary;\n\nimport 'dart:async';\n\nimport 'package:collection/c"
  },
  {
    "path": "lib/app/map/_lib/managers/monitor.dart",
    "chars": 58873,
    "preview": "/// Map layer manager and associated UI for the real-time seismic monitor.\nlibrary;\n\nimport 'dart:async';\nimport 'dart:c"
  },
  {
    "path": "lib/app/map/_lib/managers/precipitation.dart",
    "chars": 23513,
    "preview": "/// Map layer manager and associated UI for precipitation data.\nlibrary;\n\nimport 'package:collection/collection.dart';\ni"
  },
  {
    "path": "lib/app/map/_lib/managers/radar.dart",
    "chars": 39045,
    "preview": "/// Map layer manager and associated UI for radar echo data.\nlibrary;\n\nimport 'dart:async';\n\nimport 'package:collection/"
  },
  {
    "path": "lib/app/map/_lib/managers/report.dart",
    "chars": 51451,
    "preview": "/// Map layer manager and associated UI for earthquake report data.\nlibrary;\n\nimport 'package:collection/collection.dart"
  },
  {
    "path": "lib/app/map/_lib/managers/temperature.dart",
    "chars": 18600,
    "preview": "/// Map layer manager and associated UI for temperature data.\nlibrary;\n\nimport 'package:collection/collection.dart';\nimp"
  },
  {
    "path": "lib/app/map/_lib/managers/tsunami.dart",
    "chars": 31551,
    "preview": "/// Map layer manager and associated UI for tsunami warning data.\nlibrary;\n\nimport 'dart:async';\n\nimport 'package:dpip/a"
  },
  {
    "path": "lib/app/map/_lib/managers/wind.dart",
    "chars": 16754,
    "preview": "/// Map layer manager and associated UI for wind direction and speed data.\nlibrary;\n\nimport 'package:collection/collecti"
  },
  {
    "path": "lib/app/map/_lib/utils.dart",
    "chars": 7655,
    "preview": "/// Utilities, enumerations, and ID helpers shared across map layer managers.\nlibrary;\n\nimport 'package:dpip/widgets/map"
  },
  {
    "path": "lib/app/map/_widgets/layer_toggle.dart",
    "chars": 3168,
    "preview": "/// A toggleable layer-selection tile used inside the layer picker sheet.\nlibrary;\n\nimport 'package:dpip/utils/extension"
  },
  {
    "path": "lib/app/map/_widgets/layer_toggle_sheet.dart",
    "chars": 6402,
    "preview": "/// The bottom sheet widget that lets users toggle map layers and base maps.\nlibrary;\n\nimport 'package:dpip/app/map/_lib"
  },
  {
    "path": "lib/app/map/_widgets/map_legend.dart",
    "chars": 8606,
    "preview": "/// Legend widgets used in the map overlay panels.\nlibrary;\n\nimport 'package:collection/collection.dart';\nimport 'packag"
  },
  {
    "path": "lib/app/map/_widgets/sheet.dart",
    "chars": 2387,
    "preview": "/// A generic draggable bottom sheet used on the map page.\nlibrary;\n\nimport 'package:dpip/utils/extensions/build_context"
  },
  {
    "path": "lib/app/map/_widgets/tos_sheet.dart",
    "chars": 6915,
    "preview": "/// The terms-of-service sheet shown before activating the seismic monitor.\nlibrary;\n\nimport 'package:dpip/utils/extensi"
  },
  {
    "path": "lib/app/map/_widgets/ui/positioned_back_button.dart",
    "chars": 930,
    "preview": "/// A back-navigation button positioned in the top-left corner of the map.\nlibrary;\n\nimport 'package:dpip/app/home/_widg"
  },
  {
    "path": "lib/app/map/_widgets/ui/positioned_layer_button.dart",
    "chars": 2403,
    "preview": "/// A layer-picker button positioned in the top-right corner of the map.\nlibrary;\n\nimport 'package:dpip/app/home/_widget"
  },
  {
    "path": "lib/app/map/page.dart",
    "chars": 13352,
    "preview": "/// The main map page and supporting options for the DPIP map view.\nlibrary;\n\nimport 'dart:async';\n\nimport 'package:dpip"
  },
  {
    "path": "lib/app/settings/_widgets/settings_header.dart",
    "chars": 2291,
    "preview": "/// Reusable header widget for settings pages.\nlibrary;\n\nimport 'package:dpip/utils/extensions/build_context.dart';\nimpo"
  },
  {
    "path": "lib/app/settings/donate/page.dart",
    "chars": 21897,
    "preview": "/// Donate settings page for in-app purchase and donation options.\nlibrary;\n\nimport 'dart:async';\nimport 'dart:io';\n\nimp"
  },
  {
    "path": "lib/app/settings/experimental/page.dart",
    "chars": 9692,
    "preview": "/// Experimental features settings page.\nlibrary;\n\nimport 'dart:async';\n\nimport 'package:dpip/core/i18n.dart';\nimport 'p"
  },
  {
    "path": "lib/app/settings/layout/page.dart",
    "chars": 9573,
    "preview": "/// Home layout settings page for reordering and toggling displayed sections.\nlibrary;\n\nimport 'package:dpip/app/setting"
  },
  {
    "path": "lib/app/settings/layout.dart",
    "chars": 1362,
    "preview": "/// Shared scaffold layout for all settings pages.\nlibrary;\n\nimport 'package:dpip/core/i18n.dart';\nimport 'package:dpip/"
  },
  {
    "path": "lib/app/settings/locale/page.dart",
    "chars": 2740,
    "preview": "/// Locale settings page for adjusting the app display language.\nlibrary;\n\nimport 'package:dpip/app/settings/_widgets/se"
  },
  {
    "path": "lib/app/settings/locale/select/page.dart",
    "chars": 5713,
    "preview": "/// Locale selection page showing all supported languages with translation\n/// progress.\nlibrary;\n\nimport 'dart:math';\n\n"
  },
  {
    "path": "lib/app/settings/location/page.dart",
    "chars": 19017,
    "preview": "/// Location settings page for managing the user's saved locations and\n/// automatic GPS tracking.\nlibrary;\n\nimport 'dar"
  },
  {
    "path": "lib/app/settings/location/select/[city]/page.dart",
    "chars": 4580,
    "preview": "/// City-level district selection page for location settings.\nlibrary;\n\nimport 'dart:collection';\n\nimport 'package:dpip/"
  },
  {
    "path": "lib/app/settings/location/select/page.dart",
    "chars": 2164,
    "preview": "/// Location selection page listing all available cities.\nlibrary;\n\nimport 'package:dpip/core/i18n.dart';\nimport 'packag"
  },
  {
    "path": "lib/app/settings/map/page.dart",
    "chars": 5603,
    "preview": "/// Map display settings page.\nlibrary;\n\nimport 'package:dpip/app/map/_widgets/layer_toggle_sheet.dart';\nimport 'package"
  },
  {
    "path": "lib/app/settings/notify/(1.eew)/eew/page.dart",
    "chars": 2561,
    "preview": "/// EEW notification settings page.\nlibrary;\n\nimport 'package:dpip/app/settings/notify/_widgets/eew_notify_section.dart'"
  },
  {
    "path": "lib/app/settings/notify/(2.earthquake)/intensity/page.dart",
    "chars": 1866,
    "preview": "/// Intensity report notification settings page.\nlibrary;\n\nimport 'package:dpip/app/settings/notify/_widgets/earthquake_"
  },
  {
    "path": "lib/app/settings/notify/(2.earthquake)/monitor/page.dart",
    "chars": 1662,
    "preview": "/// Strong motion monitor notification settings page.\nlibrary;\n\nimport 'package:dpip/app/settings/notify/_widgets/earthq"
  },
  {
    "path": "lib/app/settings/notify/(2.earthquake)/report/page.dart",
    "chars": 1835,
    "preview": "/// Earthquake report notification settings page.\nlibrary;\n\nimport 'package:dpip/app/settings/notify/_widgets/earthquake"
  },
  {
    "path": "lib/app/settings/notify/(3.weather)/advisory/page.dart",
    "chars": 1882,
    "preview": "/// Weather advisory notification settings page.\nlibrary;\n\nimport 'package:dpip/app/settings/notify/_widgets/sound_list_"
  },
  {
    "path": "lib/app/settings/notify/(3.weather)/evacuation/page.dart",
    "chars": 1889,
    "preview": "/// Evacuation / disaster prevention notification settings page.\nlibrary;\n\nimport 'package:dpip/app/settings/notify/_wid"
  },
  {
    "path": "lib/app/settings/notify/(3.weather)/thunderstorm/page.dart",
    "chars": 1886,
    "preview": "/// Thunderstorm notification settings page.\nlibrary;\n\nimport 'package:dpip/app/settings/notify/_widgets/sound_list_tile"
  }
]

// ... and 167 more files (download for full content)

About this extraction

This page contains the full source code of the ExpTechTW/DPIP GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 367 files (1.9 MB), approximately 538.3k tokens, and a symbol index with 1446 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!