├── .github
└── workflows
│ ├── android.yaml
│ ├── arm64.yaml
│ ├── ios.yaml
│ ├── macos.yaml
│ ├── snap.yaml
│ └── windows.yaml
├── .gitignore
├── .metadata
├── .vscode
└── launch.json
├── LICENSE
├── README.md
├── analysis_options.yaml
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── apps4av
│ │ │ │ └── avaremp
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable-v21
│ │ │ └── launch_background.xml
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── launcher_icon.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── launcher_icon.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── launcher_icon.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── launcher_icon.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── launcher_icon.png
│ │ │ ├── values-night
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── assets
├── audio
│ └── traffic_alerts
│ │ ├── tr_00.mp3
│ │ ├── tr_01.mp3
│ │ ├── tr_02.mp3
│ │ ├── tr_03.mp3
│ │ ├── tr_04.mp3
│ │ ├── tr_05.mp3
│ │ ├── tr_06.mp3
│ │ ├── tr_07.mp3
│ │ ├── tr_08.mp3
│ │ ├── tr_09.mp3
│ │ ├── tr_10.mp3
│ │ ├── tr_100.mp3
│ │ ├── tr_1000.mp3
│ │ ├── tr_11.mp3
│ │ ├── tr_12.mp3
│ │ ├── tr_13.mp3
│ │ ├── tr_14.mp3
│ │ ├── tr_15.mp3
│ │ ├── tr_16.mp3
│ │ ├── tr_17.mp3
│ │ ├── tr_18.mp3
│ │ ├── tr_19.mp3
│ │ ├── tr_20.mp3
│ │ ├── tr_30.mp3
│ │ ├── tr_40.mp3
│ │ ├── tr_50.mp3
│ │ ├── tr_60.mp3
│ │ ├── tr_70.mp3
│ │ ├── tr_80.mp3
│ │ ├── tr_90.mp3
│ │ ├── tr_alpha.mp3
│ │ ├── tr_at.mp3
│ │ ├── tr_bogey.mp3
│ │ ├── tr_bravo.mp3
│ │ ├── tr_charlie.mp3
│ │ ├── tr_cl_chirp.mp3
│ │ ├── tr_cl_closingin.mp3
│ │ ├── tr_cl_over.mp3
│ │ ├── tr_climbing.mp3
│ │ ├── tr_delta.mp3
│ │ ├── tr_descending.mp3
│ │ ├── tr_echo.mp3
│ │ ├── tr_foxtrot.mp3
│ │ ├── tr_golf.mp3
│ │ ├── tr_high.mp3
│ │ ├── tr_hotel.mp3
│ │ ├── tr_india.mp3
│ │ ├── tr_juliet.mp3
│ │ ├── tr_kilo.mp3
│ │ ├── tr_level.mp3
│ │ ├── tr_lima.mp3
│ │ ├── tr_low.mp3
│ │ ├── tr_mike.mp3
│ │ ├── tr_miles.mp3
│ │ ├── tr_november.mp3
│ │ ├── tr_oclock.mp3
│ │ ├── tr_oscar.mp3
│ │ ├── tr_papa.mp3
│ │ ├── tr_point.mp3
│ │ ├── tr_quebec.mp3
│ │ ├── tr_romeo.mp3
│ │ ├── tr_same_altitude.mp3
│ │ ├── tr_seconds.mp3
│ │ ├── tr_sierra.mp3
│ │ ├── tr_tango.mp3
│ │ ├── tr_traffic.mp3
│ │ ├── tr_uniform.mp3
│ │ ├── tr_victor.mp3
│ │ ├── tr_whiskey.mp3
│ │ ├── tr_within.mp3
│ │ ├── tr_xray.mp3
│ │ ├── tr_yankee.mp3
│ │ └── tr_zulu.mp3
└── images
│ ├── 512.png
│ ├── black.png
│ ├── dl_ak.png
│ ├── dl_ec.png
│ ├── dl_nc.png
│ ├── dl_ne.png
│ ├── dl_nw.png
│ ├── dl_pac.png
│ ├── dl_sc.png
│ ├── dl_se.png
│ ├── dl_sw.png
│ ├── download.png
│ ├── forum.png
│ ├── intro.png
│ ├── layers.png
│ ├── logo.png
│ ├── plane.png
│ ├── regions.jpeg
│ └── warning.png
├── integration_test
└── app_test.dart
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── GithubActionsExportOptions.plist
├── 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
├── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-50x50@1x.png
│ │ │ ├── Icon-App-50x50@2x.png
│ │ │ ├── Icon-App-57x57@1x.png
│ │ │ ├── Icon-App-57x57@2x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-72x72@1x.png
│ │ │ ├── Icon-App-72x72@2x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ └── LaunchImage.imageset
│ │ │ ├── Contents.json
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ └── README.md
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── Info.plist
│ └── Runner-Bridging-Header.h
└── RunnerTests
│ └── RunnerTests.swift
├── lib
├── aircraft.dart
├── aircraft_screen.dart
├── app_log.dart
├── app_settings.dart
├── area.dart
├── autopilot.dart
├── chart.dart
├── checklist.dart
├── checklist_screen.dart
├── constants.dart
├── data
│ ├── altitude_profile.dart
│ ├── cifp.dart
│ ├── db_general.dart
│ ├── main_database_helper.dart
│ ├── user_database_helper.dart
│ └── weather_database_helper.dart
├── destination
│ ├── airport.dart
│ ├── airway.dart
│ ├── destination.dart
│ ├── destination_calculations.dart
│ └── nav.dart
├── documents_screen.dart
├── donate_screen.dart
├── download.dart
├── download_manager.dart
├── download_screen.dart
├── faa_dates.dart
├── filterable_logbook_dashboard.dart
├── find_screen.dart
├── flight_status.dart
├── flight_timer.dart
├── gdl90
│ ├── ahrs_message.dart
│ ├── airmet_product.dart
│ ├── dlac.dart
│ ├── fis_buffer.dart
│ ├── fis_graphics.dart
│ ├── gdl90_buffer.dart
│ ├── message.dart
│ ├── message_factory.dart
│ ├── nexrad_cache.dart
│ ├── nexrad_high_product.dart
│ ├── nexrad_medium_product.dart
│ ├── nexrad_product.dart
│ ├── notam_product.dart
│ ├── ownship_geometric_altitude_message.dart
│ ├── ownship_message.dart
│ ├── product.dart
│ ├── product_factory.dart
│ ├── sigmet_product.dart
│ ├── sua_product.dart
│ ├── textual_weather_product.dart
│ ├── traffic_alerts.dart
│ ├── traffic_cache.dart
│ ├── traffic_report_message.dart
│ └── uplink_message.dart
├── geo_calculations.dart
├── geojson_parser.dart
├── gps.dart
├── gps_recorder.dart
├── image_utils.dart
├── instrument_list.dart
├── io_screen.dart
├── log_entry.dart
├── logbook_screen.dart
├── longpress_screen.dart
├── main.dart
├── main_screen.dart
├── map_screen.dart
├── nmea
│ ├── bod_packet.dart
│ ├── gga_message.dart
│ ├── gga_packet.dart
│ ├── nmea_buffer.dart
│ ├── nmea_message.dart
│ ├── nmea_message_factory.dart
│ ├── nmea_ownship_message.dart
│ ├── packet.dart
│ ├── rmb_packet.dart
│ ├── rmc_message.dart
│ ├── rmc_packet.dart
│ ├── rtm_message.dart
│ └── rtm_packet.dart
├── onboarding_screen.dart
├── path_utils.dart
├── pdf_viewer.dart
├── pfd_painter.dart
├── plan
│ ├── passage.dart
│ ├── plan_action_screen.dart
│ ├── plan_create_widget.dart
│ ├── plan_file_widget.dart
│ ├── plan_item_widget.dart
│ ├── plan_line_widget.dart
│ ├── plan_lmfs.dart
│ ├── plan_load_save_widget.dart
│ ├── plan_manage_widget.dart
│ ├── plan_route.dart
│ ├── plan_screen.dart
│ └── waypoint.dart
├── plate_screen.dart
├── progress_button_message_input_widget.dart
├── progress_button_message_widget.dart
├── saa.dart
├── settings_cache_provider.dart
├── stack_with_one.dart
├── storage.dart
├── twilight_calculator.dart
├── udp_receiver.dart
├── unit_conversion.dart
├── warnings_widget.dart
├── weather
│ ├── airep.dart
│ ├── airep_cache.dart
│ ├── airsigmet.dart
│ ├── airsigmet_cache.dart
│ ├── metar.dart
│ ├── metar_cache.dart
│ ├── notam.dart
│ ├── notam_cache.dart
│ ├── sounding.dart
│ ├── taf.dart
│ ├── taf_cache.dart
│ ├── tfr.dart
│ ├── tfr_cache.dart
│ ├── time_segment_pie_chart.dart
│ ├── weather.dart
│ ├── weather_cache.dart
│ ├── winds_aloft.dart
│ └── winds_cache.dart
├── wnb.dart
├── wnb_screen.dart
└── writing_screen.dart
├── linux
├── .gitignore
├── CMakeLists.txt
├── flutter
│ ├── CMakeLists.txt
│ ├── generated_plugin_registrant.cc
│ ├── generated_plugin_registrant.h
│ └── generated_plugins.cmake
├── main.cc
├── my_application.cc
└── my_application.h
├── macos
├── .gitignore
├── Flutter
│ ├── Flutter-Debug.xcconfig
│ ├── Flutter-Release.xcconfig
│ └── GeneratedPluginRegistrant.swift
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ └── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── app_icon_1024.png
│ │ │ ├── app_icon_128.png
│ │ │ ├── app_icon_16.png
│ │ │ ├── app_icon_256.png
│ │ │ ├── app_icon_32.png
│ │ │ ├── app_icon_512.png
│ │ │ └── app_icon_64.png
│ ├── Base.lproj
│ │ └── MainMenu.xib
│ ├── Configs
│ │ ├── AppInfo.xcconfig
│ │ ├── Debug.xcconfig
│ │ ├── Release.xcconfig
│ │ └── Warnings.xcconfig
│ ├── DebugProfile.entitlements
│ ├── Info.plist
│ ├── MainFlutterWindow.swift
│ └── Release.entitlements
└── RunnerTests
│ └── RunnerTests.swift
├── pubspec.lock
├── pubspec.yaml
├── snap
├── gui
│ ├── avarex.desktop
│ └── avarex.png
└── snapcraft.yaml
├── tests
├── adsb_dallas.bin
├── adsb_daytona.bin
├── adsb_lancaster.bin
├── dynon.bin
├── gdl90_test.py
├── levil.bin
├── mmu.bin
├── nmea_bos.txt
└── nmea_test.py
├── web
├── favicon.png
├── icons
│ ├── Icon-192.png
│ ├── Icon-512.png
│ ├── Icon-maskable-192.png
│ └── Icon-maskable-512.png
├── index.html
└── manifest.json
└── windows
├── .gitignore
├── CMakeLists.txt
├── flutter
├── CMakeLists.txt
├── generated_plugin_registrant.cc
├── generated_plugin_registrant.h
└── generated_plugins.cmake
├── runner
├── CMakeLists.txt
├── Runner.rc
├── flutter_window.cpp
├── flutter_window.h
├── main.cpp
├── resource.h
├── resources
│ └── app_icon.ico
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
└── sqlite3.dll
/.github/workflows/android.yaml:
--------------------------------------------------------------------------------
1 | name: Android
2 |
3 | on: push
4 |
5 | jobs:
6 |
7 | build-and-release:
8 | runs-on: ubuntu-24.04
9 |
10 | steps:
11 | - uses: actions/checkout@v4
12 | - uses: subosito/flutter-action@v2
13 | with:
14 | channel: 'stable'
15 | flutter-version: '3.35.1'
16 |
17 | - name: Find and Replace OpenAIP
18 | uses: richardrigutins/replace-in-files@v2
19 | with:
20 | files: '**/*.dart'
21 | search-text: '@@___openaip_client_id__@@'
22 | replacement-text: ${{ secrets.OPENAIP_CLIENT_ID }}
23 | encoding: 'utf8'
24 | max-parallelism: 10
25 |
26 | - name: Find and Replace ASA
27 | uses: richardrigutins/replace-in-files@v2
28 | with:
29 | files: '**/*.dart'
30 | search-text: '@@___asa_password__@@'
31 | replacement-text: ${{ secrets.ASA_PASSWORD }}
32 | encoding: 'utf8'
33 | max-parallelism: 10
34 |
35 | - name: Install project dependencies
36 | run: flutter pub get
37 |
38 | - name: Enable KVM
39 | run: |
40 | echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
41 | sudo udevadm control --reload-rules
42 | sudo udevadm trigger --name-match=kvm
43 |
44 | - name: Integration Test
45 | uses: reactivecircus/android-emulator-runner@v2
46 | with:
47 | target: playstore
48 | api-level: 29
49 | arch: x86_64
50 | profile: Nexus 6
51 | script: flutter test integration_test/app_test.dart
52 |
53 | - name: Build APK
54 | run: flutter build apk --release
55 |
56 | - name: Sign APK with keystore
57 | uses: r0adkll/sign-android-release@v1
58 | id: sign_apk
59 | with:
60 | releaseDirectory: build/app/outputs/apk/release
61 | signingKeyBase64: ${{ secrets.KEY_STORE }}
62 | alias: ${{ secrets.KEY_STORE_ALIAS }}
63 | keyStorePassword: ${{ secrets.KEY_STORE_PASS }}
64 | keyPassword: ${{ secrets.KEY_STORE_PASS }}
65 | env:
66 | BUILD_TOOLS_VERSION: "34.0.0"
67 |
68 | - name: Build AAB
69 | run: flutter build appbundle --release
70 |
71 | - name: Sign AAB with keystore
72 | uses: r0adkll/sign-android-release@v1
73 | id: sign_aab
74 | with:
75 | releaseDirectory: build/app/outputs/bundle/release
76 | signingKeyBase64: ${{ secrets.KEY_STORE }}
77 | alias: ${{ secrets.KEY_STORE_ALIAS }}
78 | keyStorePassword: ${{ secrets.KEY_STORE_PASS }}
79 | keyPassword: ${{ secrets.KEY_STORE_PASS }}
80 | env:
81 | BUILD_TOOLS_VERSION: "34.0.0"
82 |
83 | - name: Upload release
84 | uses: actions/upload-artifact@v4
85 | with:
86 | name: Android
87 | path: |
88 | ${{steps.sign_apk.outputs.signedReleaseFile}}
89 | ${{steps.sign_aab.outputs.signedReleaseFile}}
90 |
--------------------------------------------------------------------------------
/.github/workflows/arm64.yaml:
--------------------------------------------------------------------------------
1 | name: Arm64-Linux
2 |
3 | on: push
4 |
5 | jobs:
6 |
7 | build-and-release:
8 | runs-on: self-hosted
9 |
10 | steps:
11 | - uses: actions/checkout@v4
12 |
13 | - name: Find and Replace OpenAIP
14 | uses: richardrigutins/replace-in-files@v2
15 | with:
16 | files: '**/*.dart'
17 | search-text: '@@___openaip_client_id__@@'
18 | replacement-text: ${{ secrets.OPENAIP_CLIENT_ID }}
19 | encoding: 'utf8'
20 | max-parallelism: 10
21 |
22 | - name: Find and Replace ASA
23 | uses: richardrigutins/replace-in-files@v2
24 | with:
25 | files: '**/*.dart'
26 | search-text: '@@___asa_password__@@'
27 | replacement-text: ${{ secrets.ASA_PASSWORD }}
28 | encoding: 'utf8'
29 | max-parallelism: 10
30 |
31 | - name: Build Flutter
32 | run: export PATH=${PATH}:/home/zkhan/flutter/bin && flutter build linux --release
33 |
34 | - name: Integration Test
35 | run: export PATH=${PATH}:/home/zkhan/flutter/bin && xvfb-run flutter test integration_test/app_test.dart -d linux
36 |
37 | - name: Upload Artifact
38 | uses: actions/upload-artifact@v4
39 | with:
40 | name: RaspberryPi
41 | path: build/linux/arm64/release/bundle/*
42 |
--------------------------------------------------------------------------------
/.github/workflows/macos.yaml:
--------------------------------------------------------------------------------
1 | name: MacOS
2 |
3 | on: push
4 |
5 | jobs:
6 |
7 | build-and-release:
8 | runs-on: macos-14
9 |
10 | steps:
11 | - uses: actions/checkout@v4
12 | - uses: subosito/flutter-action@v2
13 | with:
14 | channel: 'stable'
15 | flutter-version: '3.35.1'
16 |
17 | - name: Find and Replace OpenAIP
18 | uses: richardrigutins/replace-in-files@v2
19 | with:
20 | files: '**/*.dart'
21 | search-text: '@@___openaip_client_id__@@'
22 | replacement-text: ${{ secrets.OPENAIP_CLIENT_ID }}
23 | encoding: 'utf8'
24 | max-parallelism: 10
25 |
26 | - name: Find and Replace ASA
27 | uses: richardrigutins/replace-in-files@v2
28 | with:
29 | files: '**/*.dart'
30 | search-text: '@@___asa_password__@@'
31 | replacement-text: ${{ secrets.ASA_PASSWORD }}
32 | encoding: 'utf8'
33 | max-parallelism: 10
34 |
35 | - name: Install project dependencies
36 | run: |
37 | flutter pub get
38 | brew install create-dmg
39 |
40 | - name: Integration Test
41 | run: |
42 | flutter test integration_test/app_test.dart -d macos
43 |
44 | - name: Build artifacts and sign
45 | run: |
46 | flutter build macos --release
47 | echo -n ${{ secrets.MACOS_DIST_CERTIFICATE }} | base64 --decode --output certificate.p12
48 | # create temporary keychain
49 | security create-keychain -p test_password sign.keychain
50 | security default-keychain -s sign.keychain
51 | security unlock-keychain -p test_password sign.keychain
52 | security import certificate.p12 -k sign.keychain -P ${{ secrets.MACOS_DIST_CERTIFICATE_PASSWORD }} -T /usr/bin/codesign
53 | security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k test_password sign.keychain
54 | security find-identity
55 | # sign
56 | /usr/bin/codesign --force --deep -s LPHGYCR8ZX build/macos/Build/Products/Release/AvareX.app
57 | # make dmg
58 | pushd build/macos/Build/Products/Release
59 | create-dmg \
60 | --volname "AvareX" \
61 | --window-pos 200 200 \
62 | --window-size 800 600 \
63 | --icon-size 130 \
64 | --text-size 14 \
65 | --icon "AvareX.app" 260 250 \
66 | --hide-extension "AvareX.app" \
67 | --app-drop-link 540 250 \
68 | --hdiutil-quiet \
69 | "AvareX.dmg" \
70 | "AvareX.app"
71 | popd
72 | # sign dmg
73 | /usr/bin/codesign --force --deep -s LPHGYCR8ZX build/macos/Build/Products/Release/AvareX.dmg
74 | # delete keychain
75 | security delete-keychain sign.keychain
76 | rm certificate.p12
77 |
78 | - name: Upload Artifact
79 | uses: actions/upload-artifact@v4
80 | with:
81 | name: MacOS
82 | path: build/macos/Build/Products/Release/AvareX.dmg
83 |
--------------------------------------------------------------------------------
/.github/workflows/snap.yaml:
--------------------------------------------------------------------------------
1 | name: Snap-Linux
2 |
3 | on: push
4 |
5 | jobs:
6 |
7 | build-and-release:
8 | runs-on: ubuntu-22.04
9 |
10 | steps:
11 | - uses: actions/checkout@v4
12 | - uses: subosito/flutter-action@v2
13 | with:
14 | channel: 'stable'
15 | flutter-version: '3.35.1'
16 |
17 | - name: Find and Replace OpenAIP
18 | uses: richardrigutins/replace-in-files@v2
19 | with:
20 | files: '**/*.dart'
21 | search-text: '@@___openaip_client_id__@@'
22 | replacement-text: ${{ secrets.OPENAIP_CLIENT_ID }}
23 | encoding: 'utf8'
24 | max-parallelism: 10
25 |
26 | - name: Find and Replace ASA
27 | uses: richardrigutins/replace-in-files@v2
28 | with:
29 | files: '**/*.dart'
30 | search-text: '@@___asa_password__@@'
31 | replacement-text: ${{ secrets.ASA_PASSWORD }}
32 | encoding: 'utf8'
33 | max-parallelism: 10
34 |
35 | - name: Update source repo
36 | run: sudo apt-get update
37 | - name: Pre-empt libunwind issue for gstreamer
38 | run: sudo apt-get install -y libunwind-dev
39 | - name: Install audioplayers dependencies
40 | run: sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
41 | - name: Install dependencies
42 | run: sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev
43 |
44 | - name: Install Snapcraft
45 | uses: samuelmeuli/action-snapcraft@v2
46 |
47 | - name: Integration Test
48 | run: xvfb-run flutter test integration_test/app_test.dart -d linux
49 |
50 | - name: Build Snap Image
51 | run: sudo snapcraft --destructive-mode
52 |
53 | - name: Upload Artifact
54 | uses: actions/upload-artifact@v4
55 | with:
56 | name: Snap
57 | path: avarex*.snap
58 |
--------------------------------------------------------------------------------
/.github/workflows/windows.yaml:
--------------------------------------------------------------------------------
1 | name: Windows
2 |
3 | on: push
4 |
5 | jobs:
6 |
7 | build-and-release:
8 | runs-on: windows-2022
9 |
10 | steps:
11 | - uses: actions/checkout@v4
12 | - uses: subosito/flutter-action@v2
13 | with:
14 | channel: 'stable'
15 | flutter-version: '3.35.1'
16 |
17 | - name: Find and Replace OpenAIP
18 | uses: richardrigutins/replace-in-files@v2
19 | with:
20 | files: '**/*.dart'
21 | search-text: '@@___openaip_client_id__@@'
22 | replacement-text: ${{ secrets.OPENAIP_CLIENT_ID }}
23 | encoding: 'utf8'
24 | max-parallelism: 10
25 |
26 | - name: Find and Replace ASA
27 | uses: richardrigutins/replace-in-files@v2
28 | with:
29 | files: '**/*.dart'
30 | search-text: '@@___asa_password__@@'
31 | replacement-text: ${{ secrets.ASA_PASSWORD }}
32 | encoding: 'utf8'
33 | max-parallelism: 10
34 |
35 | - name: Install project dependencies
36 | run: flutter pub get
37 |
38 | - name: Integration Test
39 | run: flutter test integration_test/app_test.dart -d windows
40 |
41 | - name: Build artifacts
42 | run: flutter build windows --release
43 | - name: Build artifacts MSIX
44 | run: dart run msix:create
45 | - name: Archive Release
46 | uses: thedoctor0/zip-release@master
47 | with:
48 | type: 'zip'
49 | filename: ${{github.ref_name}}-windows.zip
50 | directory: build/windows/x64/runner/Release
51 | - name: Windows Release
52 | uses: softprops/action-gh-release@v1
53 | if: startsWith(github.ref, 'refs/tags/')
54 | env:
55 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
56 | with:
57 | files: build/windows/x64/runner/Release/${{github.ref_name}}-windows.zip
58 | - name: Upload Artifact
59 | uses: actions/upload-artifact@v4
60 | with:
61 | name: WindowsX64
62 | path: build/windows/x64/runner/Release/${{github.ref_name}}-windows.zip
63 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | *.xccconfig
7 | *.cc
8 | *.lock
9 | *.cmake
10 | generated_plugin*
11 | pubspec.lock
12 | .DS_Store
13 | Podfile
14 | Podfile.lock
15 | .atom/
16 | .buildlog/
17 | .history
18 | .svn/
19 | migrate_working_dir/
20 |
21 | # IntelliJ related
22 | *.iml
23 | *.ipr
24 | *.iws
25 | .idea/
26 |
27 | # The .vscode folder contains launch configuration and tasks you configure in
28 | # VS Code which you may wish to be included in version control, so this line
29 | # is commented out by default.
30 | #.vscode/
31 |
32 | # Flutter/Dart/Pub related
33 | **/doc/api/
34 | **/ios/Flutter/.last_build_id
35 | .dart_tool/
36 | .flutter-plugins
37 | .flutter-plugins-dependencies
38 | .pub-cache/
39 | .pub/
40 | /build/
41 |
42 | # Symbolication related
43 | app.*.symbols
44 |
45 | # Obfuscation related
46 | app.*.map.json
47 |
48 | # Android Studio will place build artifacts here
49 | /android/app/debug
50 | /android/app/profile
51 | /android/app/release
52 |
53 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: "db7ef5bf9f59442b0e200a90587e8fa5e0c6336a"
8 | channel: "stable"
9 |
10 | project_type: app
11 |
12 | # Tracks metadata for the flutter migrate command
13 | migration:
14 | platforms:
15 | - platform: root
16 | create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
17 | base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
18 | - platform: android
19 | create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
20 | base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
21 | - platform: ios
22 | create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
23 | base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
24 | - platform: linux
25 | create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
26 | base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
27 | - platform: macos
28 | create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
29 | base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
30 | - platform: web
31 | create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
32 | base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
33 | - platform: windows
34 | create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
35 | base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
36 |
37 | # User provided section
38 |
39 | # List of Local paths (relative to this file) that should be
40 | # ignored by the migrate tool.
41 | #
42 | # Files that are not part of the templates will be ignored by default.
43 | unmanaged_files:
44 | - 'lib/main.dart'
45 | - 'ios/Runner.xcodeproj/project.pbxproj'
46 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": "avarex",
9 | "request": "launch",
10 | "type": "dart"
11 | },
12 | {
13 | "name": "avarex (profile mode)",
14 | "request": "launch",
15 | "type": "dart",
16 | "flutterMode": "profile"
17 | },
18 | {
19 | "name": "avarex (release mode)",
20 | "request": "launch",
21 | "type": "dart",
22 | "flutterMode": "release"
23 | }
24 | ]
25 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright 2024 Apps4Av Inc.
2 |
3 | Contact apps4av@gmail.com for commercial use of code.
4 |
5 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # AvareX
2 |
3 | Avare, written in Flutter. Runs on Linux, Windows, MacOS, iOS, Android, and Raspberry Pi.
4 |
5 | AvareX is a pilot's all in one electronic flight bag solution.
6 |
7 | By Apps4Av.
8 |
9 | ## Getting Started
10 |
11 |
12 |
13 | ### Downloading
14 |
15 |
16 | ** Windows
17 |
18 | Download on Windows using Microsoft Store.
19 |
20 | ** MacOS
21 |
22 | Download on Apple App Store from your Mac with Apple Silicon.
23 |
24 | ** Linux
25 |
26 | Download on Linux using Snap Store.
27 |
28 | ** iOS
29 |
30 | Download on Apple App Store from your iPhone or iPad.
31 |
32 | ** Android
33 |
34 | Download on Google Play Store from your Android device.
35 |
36 | ** Raspberry Pi
37 |
38 | Download at https://github.com/apps4av/avarex/actions/workflows/arm64.yaml from your Pi.
39 |
40 | Tested on 64-bit Raspberry Pi OS (may run on other configurations).
41 | - Pi 5 with 8 GB memory
42 | - Pi 4 with 1 GB memory
43 | - Prerequisites: sudo apt-get install libgtk-3-0 libblkid1 liblzma5 libsqlite3-dev
44 |
45 | ## Store Consoles
46 |
47 | Google / Android: https://play.google.com/console
48 |
49 | iOS, MacOS: https://appstoreconnect.apple.com/login
50 |
51 | Linux: https://snapcraft.io
52 |
53 | Windows: https://partner.microsoft.com/en-us/dashboard/home
54 |
55 | ## Store Locations
56 |
57 | Google / Android : https://play.google.com/store/apps/details?id=com.apps4av.avaremp
58 |
59 | iOS, MacOS: https://apps.apple.com/us/app/avarex/id6502421523
60 |
61 | Linux: https://snapcraft.io/avarex
62 |
63 | Windows: https://apps.microsoft.com/detail/9mx4hkl30mww?hl=en-us&gl=US
64 |
65 | ## Building:
66 |
67 | Github Actions builds all store builds.
68 |
69 | Microsoft version scheme: pubspec.yaml (versions go like 1.0.9.0, last digit must be 0)
70 |
71 | Apple version scheme: pubspec.yaml 0.0.9+9
72 |
73 | Google version scheme: pubspec.yaml 0.0.9+9 (+9) is what shows up in the package)
74 |
75 | Snap version scheme: snap/snapcraft.yaml 0.0.9
76 |
77 |
78 |
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | # This file configures the analyzer, which statically analyzes Dart code to
2 | # check for errors, warnings, and lints.
3 | #
4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled
5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
6 | # invoked from the command line by running `flutter analyze`.
7 |
8 | # The following line activates a set of recommended lints for Flutter apps,
9 | # packages, and plugins designed to encourage good coding practices.
10 | include: package:flutter_lints/flutter.yaml
11 |
12 | linter:
13 | # The lint rules applied to this project can be customized in the
14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml`
15 | # included above or to enable additional rules. A list of all available lints
16 | # and their documentation is published at https://dart.dev/lints.
17 | #
18 | # Instead of disabling a lint rule for the entire project in the
19 | # section below, it can also be suppressed for a single line of code
20 | # or a specific dart file by using the `// ignore: name_of_lint` and
21 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file
22 | # producing the lint.
23 | rules:
24 | # avoid_print: false # Uncomment to disable the `avoid_print` rule
25 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
26 |
27 | # Additional information about this file can be found at
28 | # https://dart.dev/guides/language/analysis-options
29 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 | **/*.keystore
13 | **/*.jks
14 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id "com.android.application"
3 | id "kotlin-android"
4 | id "dev.flutter.flutter-gradle-plugin"
5 | }
6 |
7 | def localProperties = new Properties()
8 | def localPropertiesFile = rootProject.file('local.properties')
9 | if (localPropertiesFile.exists()) {
10 | localPropertiesFile.withReader('UTF-8') { reader ->
11 | localProperties.load(reader)
12 | }
13 | }
14 |
15 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
16 | if (flutterVersionCode == null) {
17 | flutterVersionCode = '1'
18 | }
19 |
20 | def flutterVersionName = localProperties.getProperty('flutter.versionName')
21 | if (flutterVersionName == null) {
22 | flutterVersionName = '1.0'
23 | }
24 |
25 | android {
26 | namespace "com.apps4av.avaremp"
27 | compileSdkVersion flutter.compileSdkVersion
28 | ndkVersion flutter.ndkVersion
29 |
30 | compileOptions {
31 | sourceCompatibility JavaVersion.VERSION_17
32 | targetCompatibility JavaVersion.VERSION_17
33 | }
34 |
35 | kotlinOptions {
36 | jvmTarget = JavaVersion.VERSION_17.toString()
37 | }
38 |
39 |
40 | sourceSets {
41 | main.java.srcDirs += 'src/main/kotlin'
42 | }
43 |
44 | defaultConfig {
45 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
46 | applicationId "com.apps4av.avaremp"
47 | // You can update the following values to match your application needs.
48 | // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
49 | minSdkVersion flutter.minSdkVersion
50 | targetSdkVersion flutter.targetSdkVersion
51 | versionCode flutterVersionCode.toInteger()
52 | versionName flutterVersionName
53 | }
54 |
55 | buildTypes {
56 | release {
57 | // TODO: Add your own signing config for the release build.
58 | // Signing with the debug keys for now, so `flutter run --release` works.
59 | // signingConfig signingConfigs.debug
60 | }
61 | }
62 | }
63 |
64 | flutter {
65 | source '../..'
66 | }
67 |
68 | dependencies {}
69 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
16 |
24 |
28 |
32 |
33 |
34 |
35 |
36 |
37 |
39 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/apps4av/avaremp/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.apps4av.avaremp
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/android/app/src/main/res/mipmap-hdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/android/app/src/main/res/mipmap-mdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.8.22'
3 | repositories {
4 | google()
5 | mavenCentral()
6 | }
7 |
8 | dependencies {
9 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
10 | }
11 | }
12 |
13 | allprojects {
14 | repositories {
15 | google()
16 | mavenCentral()
17 | }
18 | }
19 |
20 | rootProject.buildDir = '../build'
21 | subprojects {
22 | project.buildDir = "${rootProject.buildDir}/${project.name}"
23 | }
24 | subprojects {
25 | project.evaluationDependsOn(':app')
26 | }
27 |
28 | tasks.register("clean", Delete) {
29 | delete rootProject.buildDir
30 | }
31 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx4G
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 | android.defaults.buildfeatures.buildconfig=true
5 | android.nonTransitiveRClass=false
6 | android.nonFinalResIds=false
7 | android.ndk.suppressMinSdkVersionError=21
8 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | def flutterSdkPath = {
3 | def properties = new Properties()
4 | file("local.properties").withInputStream { properties.load(it) }
5 | def flutterSdkPath = properties.getProperty("flutter.sdk")
6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
7 | return flutterSdkPath
8 | }
9 | settings.ext.flutterSdkPath = flutterSdkPath()
10 |
11 | includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
12 |
13 | repositories {
14 | google()
15 | mavenCentral()
16 | gradlePluginPortal()
17 | }
18 |
19 | plugins {
20 | id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false
21 | }
22 | }
23 |
24 | plugins {
25 | id "dev.flutter.flutter-plugin-loader" version "1.0.0"
26 | id "com.android.application" version '8.7.0' apply false
27 | id 'org.jetbrains.kotlin.android' version '1.8.22' apply false
28 | }
29 |
30 | include ":app"
31 |
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_00.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_00.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_01.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_01.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_02.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_02.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_03.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_03.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_04.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_04.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_05.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_05.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_06.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_06.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_07.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_07.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_08.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_08.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_09.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_09.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_10.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_10.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_100.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_100.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_1000.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_1000.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_11.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_11.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_12.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_12.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_13.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_13.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_14.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_14.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_15.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_15.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_16.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_16.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_17.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_17.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_18.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_18.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_19.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_19.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_20.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_20.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_30.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_30.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_40.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_40.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_50.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_50.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_60.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_60.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_70.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_70.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_80.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_80.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_90.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_90.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_alpha.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_alpha.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_at.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_at.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_bogey.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_bogey.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_bravo.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_bravo.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_charlie.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_charlie.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_cl_chirp.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_cl_chirp.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_cl_closingin.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_cl_closingin.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_cl_over.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_cl_over.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_climbing.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_climbing.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_delta.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_delta.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_descending.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_descending.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_echo.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_echo.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_foxtrot.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_foxtrot.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_golf.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_golf.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_high.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_high.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_hotel.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_hotel.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_india.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_india.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_juliet.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_juliet.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_kilo.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_kilo.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_level.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_level.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_lima.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_lima.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_low.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_low.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_mike.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_mike.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_miles.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_miles.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_november.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_november.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_oclock.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_oclock.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_oscar.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_oscar.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_papa.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_papa.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_point.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_point.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_quebec.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_quebec.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_romeo.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_romeo.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_same_altitude.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_same_altitude.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_seconds.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_seconds.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_sierra.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_sierra.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_tango.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_tango.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_traffic.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_traffic.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_uniform.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_uniform.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_victor.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_victor.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_whiskey.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_whiskey.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_within.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_within.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_xray.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_xray.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_yankee.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_yankee.mp3
--------------------------------------------------------------------------------
/assets/audio/traffic_alerts/tr_zulu.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/audio/traffic_alerts/tr_zulu.mp3
--------------------------------------------------------------------------------
/assets/images/512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/512.png
--------------------------------------------------------------------------------
/assets/images/black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/black.png
--------------------------------------------------------------------------------
/assets/images/dl_ak.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/dl_ak.png
--------------------------------------------------------------------------------
/assets/images/dl_ec.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/dl_ec.png
--------------------------------------------------------------------------------
/assets/images/dl_nc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/dl_nc.png
--------------------------------------------------------------------------------
/assets/images/dl_ne.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/dl_ne.png
--------------------------------------------------------------------------------
/assets/images/dl_nw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/dl_nw.png
--------------------------------------------------------------------------------
/assets/images/dl_pac.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/dl_pac.png
--------------------------------------------------------------------------------
/assets/images/dl_sc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/dl_sc.png
--------------------------------------------------------------------------------
/assets/images/dl_se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/dl_se.png
--------------------------------------------------------------------------------
/assets/images/dl_sw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/dl_sw.png
--------------------------------------------------------------------------------
/assets/images/download.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/download.png
--------------------------------------------------------------------------------
/assets/images/forum.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/forum.png
--------------------------------------------------------------------------------
/assets/images/intro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/intro.png
--------------------------------------------------------------------------------
/assets/images/layers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/layers.png
--------------------------------------------------------------------------------
/assets/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/logo.png
--------------------------------------------------------------------------------
/assets/images/plane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/plane.png
--------------------------------------------------------------------------------
/assets/images/regions.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/regions.jpeg
--------------------------------------------------------------------------------
/assets/images/warning.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/assets/images/warning.png
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | **/dgph
2 | *.mode1v3
3 | *.mode2v3
4 | *.moved-aside
5 | *.pbxuser
6 | *.perspectivev3
7 | **/*sync/
8 | .sconsign.dblite
9 | .tags*
10 | **/.vagrant/
11 | **/DerivedData/
12 | Icon?
13 | **/Pods/
14 | **/.symlinks/
15 | profile
16 | xcuserdata
17 | **/.generated/
18 | Flutter/App.framework
19 | Flutter/Flutter.framework
20 | Flutter/Flutter.podspec
21 | Flutter/Generated.xcconfig
22 | Flutter/ephemeral/
23 | Flutter/app.flx
24 | Flutter/app.zip
25 | Flutter/flutter_assets/
26 | Flutter/flutter_export_environment.sh
27 | ServiceDefinitions.json
28 | Runner/GeneratedPluginRegistrant.*
29 |
30 | # Exceptions to above rules.
31 | !default.mode1v3
32 | !default.mode2v3
33 | !default.pbxuser
34 | !default.perspectivev3
35 |
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 13.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/GithubActionsExportOptions.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | compileBitcode
6 |
7 | method
8 | app-store
9 | provisioningProfiles
10 |
11 | com.apps4av.avaremp
12 | AvareX
13 |
14 | signingCertificate
15 | iOS Distribution
16 | signingStyle
17 | manual
18 | stripSwiftSymbols
19 |
20 | teamID
21 | LPHGYCR8ZX
22 | thinning
23 | <none>
24 |
25 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @main
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apps4av/avarex/c2e8ef8c0fe8c7bae022905f6d627a90c20b9382/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleDisplayName
8 | AvareX
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | AvareX
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | $(FLUTTER_BUILD_NAME)
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | $(FLUTTER_BUILD_NUMBER)
25 | LSRequiresIPhoneOS
26 |
27 | UILaunchStoryboardName
28 | LaunchScreen
29 | UIMainStoryboardFile
30 | Main
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 | CADisableMinimumFrameDurationOnPhone
45 |
46 | UIApplicationSupportsIndirectInputEvents
47 |
48 | NSMicrophoneUsageDescription
49 | This app does not use the microphone for any purpose, but an SDK used for developing this app may contain calls to the microphone API.
50 | NSLocationWhenInUseUsageDescription
51 | This app needs access to your GPS location to show your position on the Map and Plate screens. If you deny this permission, you will still be able to use the app, but your position on the map will not change during your flight. Your location is not shared with Apps4Av.
52 | NSLocationAlwaysAndWhenInUseUsageDescription
53 | This app needs continuous access to your GPS location to show your position on the Map and Plate screens. If you deny this permission, you will still be able to use the app, but your position on the map will not change during your flight. Your location is not shared with Apps4Av.
54 | NSPhotoLibraryUsageDescription
55 | This app needs access to photo library to show images on a map.
56 |
57 |
58 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/ios/RunnerTests/RunnerTests.swift:
--------------------------------------------------------------------------------
1 | import Flutter
2 | import UIKit
3 | import XCTest
4 |
5 | class RunnerTests: XCTestCase {
6 |
7 | func testExample() {
8 | // If you add code to the Runner application, consider adding tests here.
9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/lib/aircraft.dart:
--------------------------------------------------------------------------------
1 | class Aircraft {
2 | final String tail;
3 | final String type;
4 | final String wake;
5 | final String icao;
6 | final String equipment;
7 | final String cruiseTas;
8 | final String surveillance;
9 | final String fuelEndurance;
10 | final String color;
11 | final String pic;
12 | final String picInfo;
13 | final String sinkRate;
14 | final String fuelBurn;
15 | final String base;
16 | final String other;
17 |
18 | Aircraft(
19 | this.tail,
20 | this.type,
21 | this.wake,
22 | this.icao,
23 | this.equipment,
24 | this.cruiseTas,
25 | this.surveillance,
26 | this.fuelEndurance,
27 | this.color,
28 | this.pic,
29 | this.picInfo,
30 | this.sinkRate,
31 | this.fuelBurn,
32 | this.base,
33 | this.other);
34 |
35 | factory Aircraft.empty() {
36 | return Aircraft(
37 | "",
38 | "",
39 | "LIGHT",
40 | "",
41 | "S",
42 | "",
43 | "N",
44 | "",
45 | "",
46 | "",
47 | "",
48 | "",
49 | "",
50 | "",
51 | "");
52 | }
53 |
54 | factory Aircraft.fromMap(Map map) {
55 | return Aircraft(
56 | (map['tail'] as String).toUpperCase(),
57 | (map['type'] as String).toUpperCase(),
58 | (map['wake'] as String).toUpperCase(),
59 | (map['icao'] as String).toUpperCase(),
60 | (map['equipment'] as String).toUpperCase(),
61 | (map['cruiseTas'] as String).toUpperCase(),
62 | (map['surveillance'] as String).toUpperCase(),
63 | (map['fuelEndurance'] as String).toUpperCase(),
64 | (map['color'] as String).toUpperCase(),
65 | (map['pic'] as String).toUpperCase(),
66 | (map['picInfo'] as String).toUpperCase(),
67 | (map['sinkRate'] as String).toUpperCase(),
68 | (map['fuelBurn'] as String).toUpperCase(),
69 | (map['base'] as String).toUpperCase(),
70 | (map['other'] as String).toUpperCase(),
71 | );
72 | }
73 |
74 | Map toMap() {
75 | return {
76 | 'tail': tail.toUpperCase(),
77 | 'type': type.toUpperCase(),
78 | 'wake': wake.toUpperCase(),
79 | 'icao': icao.toUpperCase(),
80 | 'equipment': equipment.toUpperCase(),
81 | 'cruiseTas': cruiseTas.toUpperCase(),
82 | 'surveillance': surveillance.toUpperCase(),
83 | 'fuelEndurance': fuelEndurance.toUpperCase(),
84 | 'color': color.toUpperCase(),
85 | 'pic': pic.toUpperCase(),
86 | 'picInfo': picInfo.toUpperCase(),
87 | 'sinkRate': sinkRate.toUpperCase(),
88 | 'fuelBurn': fuelBurn.toUpperCase(),
89 | 'base': base.toUpperCase(),
90 | 'other': other.toUpperCase(),
91 | };
92 | }
93 | }
--------------------------------------------------------------------------------
/lib/app_log.dart:
--------------------------------------------------------------------------------
1 | import 'dart:developer';
2 | import 'package:flutter/foundation.dart';
3 |
4 | class AppLog {
5 | static void logMessage(String message) {
6 | // In a real application, you might want to log to a file or external service
7 | if(kDebugMode) log(message);
8 | }
9 | }
--------------------------------------------------------------------------------
/lib/area.dart:
--------------------------------------------------------------------------------
1 | import 'package:avaremp/data/main_database_helper.dart';
2 | import 'package:avaremp/destination/destination.dart';
3 | import 'package:avaremp/geo_calculations.dart';
4 | import 'package:avaremp/storage.dart';
5 | import 'package:avaremp/weather/winds_aloft.dart';
6 | import 'package:avaremp/weather/winds_cache.dart';
7 | import 'package:flutter/cupertino.dart';
8 | import 'package:geolocator/geolocator.dart';
9 | import 'package:latlong2/latlong.dart';
10 | import 'gps.dart';
11 |
12 | class Area {
13 |
14 | double geoAltitude = 0;
15 | WindsAloft? _windsAloft;
16 | Destination? closestAirport;
17 | List obstacles = [];
18 | double variation = 0;
19 | ValueNotifier change = ValueNotifier(0);
20 |
21 | Future update(Position position) async {
22 | double geo = 0;
23 | double declination = 0;
24 | (geo, declination) = await MainDatabaseHelper.db.getGeoInfo(Gps.toLatLng(position));
25 | geoAltitude = geo;
26 | variation = declination;
27 | List d = await MainDatabaseHelper.db.findNearestAirportsWithRunways(Gps.toLatLng(position), 1000);
28 | if(d.isNotEmpty) {
29 | closestAirport = d[0];
30 | }
31 |
32 | final List layers = Storage().settings.getLayers();
33 | final List layersOpacity = Storage().settings.getLayersOpacity();
34 | int lIndex = layers.indexOf('Obstacles');
35 | if(layersOpacity[lIndex] > 0) {
36 | obstacles = await MainDatabaseHelper.db.findObstacles(Gps.toLatLng(position), GeoCalculations.convertAltitude(position.altitude));
37 | }
38 | // get surface wind from nearest airport
39 | String wind = WindsCache.getWind0kFromMetar(Gps.toLatLng(position));
40 | // get aloft wind from nearest station
41 | String? station = WindsCache.locateNearestStation(Gps.toLatLng(position));
42 | WindsAloft? wa = Storage().winds.get("${station}06H") as WindsAloft?;
43 | if(null != wa) {
44 | // combine surface and aloft wind
45 | _windsAloft = WindsAloft(wa.station, wa.expires, wa.received, wa.source, wind, wa.w3k, wa.w6k, wa.w9k, wa.w12k, wa.w18k, wa.w24k, wa.w30k, wa.w34k, wa.w39k);
46 | }
47 | change.value++;
48 | }
49 |
50 | (double?, double?) getWind(double altitude) {
51 | double? direction = 0;
52 | double? speed = 0;
53 | if(null != _windsAloft) {
54 | (direction, speed) = _windsAloft!.getWindAtAltitude(altitude);
55 | }
56 | return (direction, speed);
57 | }
58 | }
--------------------------------------------------------------------------------
/lib/checklist.dart:
--------------------------------------------------------------------------------
1 | import 'dart:convert';
2 |
3 | class Checklist {
4 | final String name;
5 | final String aircraft;
6 | final List steps;
7 |
8 | Checklist(this.name, this.aircraft, this.steps);
9 |
10 | factory Checklist.empty() {
11 | return Checklist("", "", []);
12 | }
13 |
14 | factory Checklist.fromMap(Map map) {
15 | return Checklist(
16 | map['name'] as String,
17 | map['aircraft'] as String,
18 | List.from(jsonDecode(map['items'] as String))
19 | );
20 | }
21 |
22 | Map toMap() {
23 | return {
24 | 'name': name,
25 | 'aircraft': aircraft,
26 | 'items': jsonEncode(steps)
27 | };
28 | }
29 | }
--------------------------------------------------------------------------------
/lib/data/altitude_profile.dart:
--------------------------------------------------------------------------------
1 | import 'dart:convert';
2 | import 'package:avaremp/data/user_database_helper.dart';
3 | import 'package:avaremp/storage.dart';
4 | import 'package:http/http.dart' as http;
5 | import 'package:latlong2/latlong.dart';
6 |
7 |
8 | class AltitudeProfile {
9 |
10 | // this creates a local cache
11 | static Future> getAltitudeProfile(List points) async {
12 | // return as many as points
13 | List altitudes = List.generate(points.length, (index) => -double.infinity);
14 | // find all elevations stored in the database
15 | List ee = await UserDatabaseHelper.db.getElevations(points);
16 | for(int i = 0; i < ee.length; i++) {
17 | if(ee[i] != null) {
18 | // take what we have, ask for the rest from internet
19 | altitudes[i] = ee[i]!;
20 | }
21 | }
22 |
23 | bool store = false;
24 | List