├── linux
├── .gitignore
├── main.cc
├── flutter
│ ├── generated_plugin_registrant.h
│ ├── generated_plugin_registrant.cc
│ ├── generated_plugins.cmake
│ └── CMakeLists.txt
└── my_application.h
├── .github
├── ISSUE_TEMPLATE
│ ├── config.yml
│ ├── FEATURE-REQUEST.yml
│ └── BUG-REPORT.yml
├── FUNDING.yml
├── workflows
│ ├── pr-lint.yml
│ └── ci.yml
├── CODEOWNERS
├── dependabot.yml
├── SECURITY.md
├── pull_request_template.md
├── SUPPORT.md
└── CODE_OF_CONDUCT.md
├── ios
├── Runner
│ ├── Runner-Bridging-Header.h
│ ├── Assets.xcassets
│ │ ├── LaunchImage.imageset
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ ├── README.md
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset
│ │ │ ├── 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-38x38@2x.png
│ │ │ ├── Icon-App-38x38@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-64x64@2x.png
│ │ │ ├── Icon-App-64x64@3x.png
│ │ │ ├── Icon-App-68x68@2x.png
│ │ │ ├── Icon-App-72x72@1x.png
│ │ │ ├── Icon-App-72x72@2x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ ├── Icon-App-Dark-20x20@2x.png
│ │ │ ├── Icon-App-Dark-20x20@3x.png
│ │ │ ├── Icon-App-Dark-29x29@2x.png
│ │ │ ├── Icon-App-Dark-29x29@3x.png
│ │ │ ├── Icon-App-Dark-38x38@2x.png
│ │ │ ├── Icon-App-Dark-38x38@3x.png
│ │ │ ├── Icon-App-Dark-40x40@2x.png
│ │ │ ├── Icon-App-Dark-40x40@3x.png
│ │ │ ├── Icon-App-Dark-60x60@2x.png
│ │ │ ├── Icon-App-Dark-60x60@3x.png
│ │ │ ├── Icon-App-Dark-64x64@2x.png
│ │ │ ├── Icon-App-Dark-64x64@3x.png
│ │ │ ├── Icon-App-Dark-68x68@2x.png
│ │ │ ├── Icon-App-Dark-76x76@2x.png
│ │ │ ├── Icon-App-Tinted-20x20@2x.png
│ │ │ ├── Icon-App-Tinted-20x20@3x.png
│ │ │ ├── Icon-App-Tinted-29x29@2x.png
│ │ │ ├── Icon-App-Tinted-29x29@3x.png
│ │ │ ├── Icon-App-Tinted-38x38@2x.png
│ │ │ ├── Icon-App-Tinted-38x38@3x.png
│ │ │ ├── Icon-App-Tinted-40x40@2x.png
│ │ │ ├── Icon-App-Tinted-40x40@3x.png
│ │ │ ├── Icon-App-Tinted-60x60@2x.png
│ │ │ ├── Icon-App-Tinted-60x60@3x.png
│ │ │ ├── Icon-App-Tinted-64x64@2x.png
│ │ │ ├── Icon-App-Tinted-64x64@3x.png
│ │ │ ├── Icon-App-Tinted-68x68@2x.png
│ │ │ ├── Icon-App-Tinted-76x76@2x.png
│ │ │ ├── Icon-App-Dark-1024x1024@1x.png
│ │ │ ├── Icon-App-Dark-83.5x83.5@2x.png
│ │ │ ├── Icon-App-Tinted-1024x1024@1x.png
│ │ │ └── Icon-App-Tinted-83.5x83.5@2x.png
│ │ ├── BrandingImage.imageset
│ │ │ ├── BrandingImage.png
│ │ │ ├── BrandingImage@2x.png
│ │ │ ├── BrandingImage@3x.png
│ │ │ └── Contents.json
│ │ └── LaunchBackground.imageset
│ │ │ ├── background.png
│ │ │ └── Contents.json
│ ├── APIKey.plist.example
│ ├── Runner.entitlements
│ ├── KeyManager.swift
│ ├── AppDelegate.swift
│ ├── Base.lproj
│ │ ├── Main.storyboard
│ │ └── LaunchScreen.storyboard
│ └── Info.plist
├── Flutter
│ ├── Debug.xcconfig
│ ├── Release.xcconfig
│ └── AppFrameworkInfo.plist
├── Settings.bundle
│ ├── en.lproj
│ │ └── Root.strings
│ └── Root.plist
├── Runner.xcodeproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ ├── WorkspaceSettings.xcsettings
│ │ └── IDEWorkspaceChecks.plist
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── WorkspaceSettings.xcsettings
│ │ └── IDEWorkspaceChecks.plist
├── RunnerTests
│ └── RunnerTests.swift
├── .gitignore
└── Podfile
├── web
├── favicon.png
├── icons
│ ├── Icon-192.png
│ ├── Icon-512.png
│ ├── Icon-maskable-192.png
│ └── Icon-maskable-512.png
├── manifest.json
└── index.html
├── android
├── gradle.properties
├── app
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── drawable-hdpi
│ │ │ │ │ ├── splash.png
│ │ │ │ │ ├── branding.png
│ │ │ │ │ ├── android12splash.png
│ │ │ │ │ ├── ic_launcher_background.png
│ │ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── drawable-mdpi
│ │ │ │ │ ├── splash.png
│ │ │ │ │ ├── branding.png
│ │ │ │ │ ├── android12splash.png
│ │ │ │ │ ├── ic_launcher_background.png
│ │ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── drawable-xhdpi
│ │ │ │ │ ├── splash.png
│ │ │ │ │ ├── branding.png
│ │ │ │ │ ├── android12splash.png
│ │ │ │ │ ├── ic_launcher_background.png
│ │ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── drawable
│ │ │ │ │ ├── background.png
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21
│ │ │ │ │ ├── background.png
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-xxhdpi
│ │ │ │ │ ├── splash.png
│ │ │ │ │ ├── branding.png
│ │ │ │ │ ├── android12splash.png
│ │ │ │ │ ├── ic_launcher_background.png
│ │ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── drawable-xxxhdpi
│ │ │ │ │ ├── splash.png
│ │ │ │ │ ├── branding.png
│ │ │ │ │ ├── android12splash.png
│ │ │ │ │ ├── ic_launcher_background.png
│ │ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── ic_launcher_monochrome.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── ic_launcher_monochrome.png
│ │ │ │ ├── values-ar
│ │ │ │ │ └── Strings.xml
│ │ │ │ ├── values-de
│ │ │ │ │ └── Strings.xml
│ │ │ │ ├── values-en
│ │ │ │ │ └── Strings.xml
│ │ │ │ ├── values-fr
│ │ │ │ │ └── Strings.xml
│ │ │ │ ├── values-id
│ │ │ │ │ └── Strings.xml
│ │ │ │ ├── values-ms
│ │ │ │ │ └── Strings.xml
│ │ │ │ ├── values-pt
│ │ │ │ │ └── Strings.xml
│ │ │ │ ├── values
│ │ │ │ │ ├── Strings.xml
│ │ │ │ │ └── styles.xml
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── ic_launcher_monochrome.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── ic_launcher_monochrome.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── ic_launcher_monochrome.png
│ │ │ │ ├── values-pt-rBR
│ │ │ │ │ └── Strings.xml
│ │ │ │ ├── values-pt-rPT
│ │ │ │ │ └── Strings.xml
│ │ │ │ ├── drawable-hdpi-v31
│ │ │ │ │ └── android12branding.png
│ │ │ │ ├── drawable-mdpi-v31
│ │ │ │ │ └── android12branding.png
│ │ │ │ ├── drawable-night-hdpi
│ │ │ │ │ └── android12splash.png
│ │ │ │ ├── drawable-night-mdpi
│ │ │ │ │ └── android12splash.png
│ │ │ │ ├── drawable-night-xhdpi
│ │ │ │ │ └── android12splash.png
│ │ │ │ ├── drawable-xhdpi-v31
│ │ │ │ │ └── android12branding.png
│ │ │ │ ├── drawable-night-xxhdpi
│ │ │ │ │ └── android12splash.png
│ │ │ │ ├── drawable-night-xxxhdpi
│ │ │ │ │ └── android12splash.png
│ │ │ │ ├── drawable-xxhdpi-v31
│ │ │ │ │ └── android12branding.png
│ │ │ │ ├── drawable-xxxhdpi-v31
│ │ │ │ │ └── android12branding.png
│ │ │ │ ├── drawable-night-hdpi-v31
│ │ │ │ │ └── android12branding.png
│ │ │ │ ├── drawable-night-mdpi-v31
│ │ │ │ │ └── android12branding.png
│ │ │ │ ├── drawable-night-xhdpi-v31
│ │ │ │ │ └── android12branding.png
│ │ │ │ ├── drawable-night-xxhdpi-v31
│ │ │ │ │ └── android12branding.png
│ │ │ │ ├── drawable-night-xxxhdpi-v31
│ │ │ │ │ └── android12branding.png
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ │ └── ic_launcher.xml
│ │ │ │ ├── values-night
│ │ │ │ │ └── styles.xml
│ │ │ │ ├── values-v31
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night-v31
│ │ │ │ │ └── styles.xml
│ │ │ ├── kotlin
│ │ │ │ └── com
│ │ │ │ │ └── towardsikhlaas
│ │ │ │ │ └── simplyqibla
│ │ │ │ │ └── MainActivity.kt
│ │ │ └── AndroidManifest.xml
│ │ ├── debug
│ │ │ └── AndroidManifest.xml
│ │ └── profile
│ │ │ └── AndroidManifest.xml
│ └── build.gradle
├── key.properties.example
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
├── .gitignore
├── build.gradle
└── settings.gradle
├── assets
├── fonts
│ ├── Inter-Bold.ttf
│ ├── Inter-Black.ttf
│ └── Inter-Regular.ttf
├── app-icon
│ ├── app-icon.png
│ ├── background.png
│ ├── foreground.png
│ ├── app-icon-ios.png
│ ├── app-icon-ios-dark.png
│ └── app-icon-ios-tinted.png
├── brand
│ ├── branding-ti.png
│ ├── splash-circle.png
│ └── branding-ti-ios.png
├── repo
│ └── multi-device.png
└── illustrations
│ ├── support-illustration.png
│ ├── usage-illustration.png
│ └── location-illustration.png
├── l10n.yaml
├── macos
├── Runner
│ ├── Configs
│ │ ├── Debug.xcconfig
│ │ ├── Release.xcconfig
│ │ ├── Warnings.xcconfig
│ │ └── AppInfo.xcconfig
│ ├── Assets.xcassets
│ │ └── AppIcon.appiconset
│ │ │ ├── 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
│ │ │ └── Contents.json
│ ├── AppDelegate.swift
│ ├── Release.entitlements
│ ├── DebugProfile.entitlements
│ ├── MainFlutterWindow.swift
│ └── Info.plist
├── .gitignore
├── Flutter
│ ├── Flutter-Debug.xcconfig
│ ├── Flutter-Release.xcconfig
│ └── GeneratedPluginRegistrant.swift
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── Runner.xcodeproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── RunnerTests
│ └── RunnerTests.swift
└── Podfile
├── windows
├── runner
│ ├── resources
│ │ └── app_icon.ico
│ ├── resource.h
│ ├── utils.h
│ ├── runner.exe.manifest
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── CMakeLists.txt
│ ├── utils.cpp
│ ├── flutter_window.cpp
│ ├── Runner.rc
│ └── win32_window.h
├── .gitignore
└── flutter
│ ├── generated_plugin_registrant.h
│ ├── generated_plugin_registrant.cc
│ └── generated_plugins.cmake
├── lib
├── globals
│ └── globals.dart
├── helpers
│ ├── url_launcher_helper.dart
│ ├── shared_preferences_helper.dart
│ └── maps_renderer_helper.dart
├── widgets
│ ├── sq_app_bar_title.dart
│ ├── link_icon_button.dart
│ ├── sq_app_bar.dart
│ ├── info_button.dart
│ ├── coordinates_form_bar.dart
│ ├── center_console.dart
│ └── user_location_icon.dart
├── styles
│ └── style.dart
├── pages
│ └── map_page.dart
├── constants
│ └── constants.dart
├── theme
│ └── theme.dart
├── main.dart
└── l10n
│ ├── app_ar.arb
│ ├── app_id.arb
│ ├── app_ms.arb
│ ├── app_pt.arb
│ ├── app_pt_BR.arb
│ ├── app_pt_PT.arb
│ ├── app_de.arb
│ ├── app_fr.arb
│ ├── app_localizations_ar.dart
│ ├── app_localizations_en.dart
│ ├── app_localizations_id.dart
│ └── app_localizations_ms.dart
├── flutter_launcher_icons.yaml
├── .gitignore
├── analysis_options.yaml
├── .metadata
└── test
└── map_page_test.dart
/linux/.gitignore:
--------------------------------------------------------------------------------
1 | flutter/ephemeral
2 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: TowardsIkhlaas
2 | ko_fi: TowardsIkhlaas
3 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/web/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/web/favicon.png
--------------------------------------------------------------------------------
/web/icons/Icon-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/web/icons/Icon-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/web/icons/Icon-512.png
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx4G
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/assets/fonts/Inter-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/assets/fonts/Inter-Bold.ttf
--------------------------------------------------------------------------------
/l10n.yaml:
--------------------------------------------------------------------------------
1 | arb-dir: lib/l10n
2 | template-arb-file: app_en.arb
3 | output-localization-file: app_localizations.dart
4 |
--------------------------------------------------------------------------------
/assets/app-icon/app-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/assets/app-icon/app-icon.png
--------------------------------------------------------------------------------
/assets/app-icon/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/assets/app-icon/background.png
--------------------------------------------------------------------------------
/assets/app-icon/foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/assets/app-icon/foreground.png
--------------------------------------------------------------------------------
/assets/brand/branding-ti.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/assets/brand/branding-ti.png
--------------------------------------------------------------------------------
/assets/brand/splash-circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/assets/brand/splash-circle.png
--------------------------------------------------------------------------------
/assets/fonts/Inter-Black.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/assets/fonts/Inter-Black.ttf
--------------------------------------------------------------------------------
/assets/fonts/Inter-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/assets/fonts/Inter-Regular.ttf
--------------------------------------------------------------------------------
/assets/repo/multi-device.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/assets/repo/multi-device.png
--------------------------------------------------------------------------------
/macos/Runner/Configs/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "../../Flutter/Flutter-Debug.xcconfig"
2 | #include "Warnings.xcconfig"
3 |
--------------------------------------------------------------------------------
/assets/app-icon/app-icon-ios.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/assets/app-icon/app-icon-ios.png
--------------------------------------------------------------------------------
/assets/brand/branding-ti-ios.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/assets/brand/branding-ti-ios.png
--------------------------------------------------------------------------------
/macos/Runner/Configs/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "../../Flutter/Flutter-Release.xcconfig"
2 | #include "Warnings.xcconfig"
3 |
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/web/icons/Icon-maskable-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/web/icons/Icon-maskable-512.png
--------------------------------------------------------------------------------
/macos/.gitignore:
--------------------------------------------------------------------------------
1 | # Flutter-related
2 | **/Flutter/ephemeral/
3 | **/Pods/
4 |
5 | # Xcode-related
6 | **/dgph
7 | **/xcuserdata/
8 |
--------------------------------------------------------------------------------
/assets/app-icon/app-icon-ios-dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/assets/app-icon/app-icon-ios-dark.png
--------------------------------------------------------------------------------
/windows/runner/resources/app_icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/windows/runner/resources/app_icon.ico
--------------------------------------------------------------------------------
/assets/app-icon/app-icon-ios-tinted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/assets/app-icon/app-icon-ios-tinted.png
--------------------------------------------------------------------------------
/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/Settings.bundle/en.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Settings.bundle/en.lproj/Root.strings
--------------------------------------------------------------------------------
/assets/illustrations/support-illustration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/assets/illustrations/support-illustration.png
--------------------------------------------------------------------------------
/assets/illustrations/usage-illustration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/assets/illustrations/usage-illustration.png
--------------------------------------------------------------------------------
/assets/illustrations/location-illustration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/assets/illustrations/location-illustration.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-hdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-mdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-mdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable/background.png
--------------------------------------------------------------------------------
/android/key.properties.example:
--------------------------------------------------------------------------------
1 | # This is an example of how to define the key.properties file for this project.
2 | GOOGLE_MAPS_API_KEY_ANDROID="maps-api-key"
3 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-hdpi/branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-mdpi/branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-mdpi/branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-v21/background.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xhdpi/branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xhdpi/branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xxhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxxhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xxxhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-ar/Strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | سمبلي قبلة
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values-de/Strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | SimplyQibla
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values-en/Strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | SimplyQibla
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values-fr/Strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | SimplyQibla
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values-id/Strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | SimplyQibla
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values-ms/Strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | SimplyQibla
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values-pt/Strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | SimplyQibla
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/Strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | SimplyQibla
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxhdpi/branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xxhdpi/branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxxhdpi/branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xxxhdpi/branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-pt-rBR/Strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | SimplyQibla
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values-pt-rPT/Strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | SimplyQibla
4 |
--------------------------------------------------------------------------------
/macos/Flutter/Flutter-Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "ephemeral/Flutter-Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/macos/Flutter/Flutter-Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "ephemeral/Flutter-Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/lib/globals/globals.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | final GlobalKey snackbarKey =
4 | GlobalKey();
5 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/android12splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-hdpi/android12splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-mdpi/android12splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-mdpi/android12splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xhdpi/android12splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xhdpi/android12splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxhdpi/android12splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xxhdpi/android12splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxxhdpi/android12splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xxxhdpi/android12splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi-v31/android12branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-hdpi-v31/android12branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-hdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-mdpi-v31/android12branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-mdpi-v31/android12branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-mdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-mdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-night-hdpi/android12splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-night-hdpi/android12splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-night-mdpi/android12splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-night-mdpi/android12splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-night-xhdpi/android12splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-night-xhdpi/android12splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xhdpi-v31/android12branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xhdpi-v31/android12branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxhdpi-v31/android12branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xxhdpi-v31/android12branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xxhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxxhdpi-v31/android12branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xxxhdpi-v31/android12branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/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/TowardsIkhlaas/simply_qibla/HEAD/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/TowardsIkhlaas/simply_qibla/HEAD/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/TowardsIkhlaas/simply_qibla/HEAD/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/TowardsIkhlaas/simply_qibla/HEAD/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/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-38x38@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-38x38@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-38x38@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-38x38@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/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/TowardsIkhlaas/simply_qibla/HEAD/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/TowardsIkhlaas/simply_qibla/HEAD/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/TowardsIkhlaas/simply_qibla/HEAD/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/TowardsIkhlaas/simply_qibla/HEAD/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/TowardsIkhlaas/simply_qibla/HEAD/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/TowardsIkhlaas/simply_qibla/HEAD/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/TowardsIkhlaas/simply_qibla/HEAD/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/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-64x64@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-64x64@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-64x64@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-64x64@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-68x68@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-68x68@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/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/TowardsIkhlaas/simply_qibla/HEAD/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/TowardsIkhlaas/simply_qibla/HEAD/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/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-night-hdpi-v31/android12branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-night-hdpi-v31/android12branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-night-mdpi-v31/android12branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-night-mdpi-v31/android12branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@3x.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-night-xhdpi-v31/android12branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-night-xhdpi-v31/android12branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-night-xxhdpi-v31/android12branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-night-xxhdpi-v31/android12branding.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-38x38@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-38x38@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-38x38@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-38x38@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-64x64@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-64x64@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-64x64@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-64x64@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-68x68@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-68x68@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-76x76@2x.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-night-xxxhdpi-v31/android12branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/android/app/src/main/res/drawable-night-xxxhdpi-v31/android12branding.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-38x38@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-38x38@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-38x38@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-38x38@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-64x64@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-64x64@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-64x64@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-64x64@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-68x68@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-68x68@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/linux/main.cc:
--------------------------------------------------------------------------------
1 | #include "my_application.h"
2 |
3 | int main(int argc, char** argv) {
4 | g_autoptr(MyApplication) app = my_application_new();
5 | return g_application_run(G_APPLICATION(app), argc, argv);
6 | }
7 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TowardsIkhlaas/simply_qibla/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/towardsikhlaas/simplyqibla/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.towardsikhlaas.simplyqibla
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity()
6 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/macos/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/lib/helpers/url_launcher_helper.dart:
--------------------------------------------------------------------------------
1 | import 'package:url_launcher/url_launcher.dart';
2 |
3 | Future launchUrlHelper(Uri url) async {
4 | if (!await launchUrl(url)) {
5 | throw Exception('Could not launch $url');
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | zipStoreBase=GRADLE_USER_HOME
4 | zipStorePath=wrapper/dists
5 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
6 |
--------------------------------------------------------------------------------
/macos/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import Cocoa
2 | import FlutterMacOS
3 |
4 | @NSApplicationMain
5 | class AppDelegate: FlutterAppDelegate {
6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
7 | return true
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/macos/Runner/Release.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/macos/Runner.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.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Settings.bundle/Root.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | StringsTable
6 | Root
7 | PreferenceSpecifiers
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/macos/RunnerTests/RunnerTests.swift:
--------------------------------------------------------------------------------
1 | import FlutterMacOS
2 | import Cocoa
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 |
--------------------------------------------------------------------------------
/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 | keys.properties
13 | **/*.keystore
14 | **/*.jks
15 |
--------------------------------------------------------------------------------
/windows/.gitignore:
--------------------------------------------------------------------------------
1 | flutter/ephemeral/
2 |
3 | # Visual Studio user-specific files.
4 | *.suo
5 | *.user
6 | *.userosscache
7 | *.sln.docstates
8 |
9 | # Visual Studio build-related files.
10 | x64/
11 | x86/
12 |
13 | # Visual Studio cache files
14 | # files ending in .cache can be ignored
15 | *.[Cc]ache
16 | # but keep track of directories ending in .cache
17 | !*.[Cc]ache/
18 |
--------------------------------------------------------------------------------
/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.
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner/APIKey.plist.example:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | GoogleMapsApiKeyiOS
8 | maps-api-key
9 |
10 |
11 |
--------------------------------------------------------------------------------
/linux/flutter/generated_plugin_registrant.h:
--------------------------------------------------------------------------------
1 | //
2 | // Generated file. Do not edit.
3 | //
4 |
5 | // clang-format off
6 |
7 | #ifndef GENERATED_PLUGIN_REGISTRANT_
8 | #define GENERATED_PLUGIN_REGISTRANT_
9 |
10 | #include
11 |
12 | // Registers Flutter plugins.
13 | void fl_register_plugins(FlPluginRegistry* registry);
14 |
15 | #endif // GENERATED_PLUGIN_REGISTRANT_
16 |
--------------------------------------------------------------------------------
/windows/flutter/generated_plugin_registrant.h:
--------------------------------------------------------------------------------
1 | //
2 | // Generated file. Do not edit.
3 | //
4 |
5 | // clang-format off
6 |
7 | #ifndef GENERATED_PLUGIN_REGISTRANT_
8 | #define GENERATED_PLUGIN_REGISTRANT_
9 |
10 | #include
11 |
12 | // Registers Flutter plugins.
13 | void RegisterPlugins(flutter::PluginRegistry* registry);
14 |
15 | #endif // GENERATED_PLUGIN_REGISTRANT_
16 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | allprojects {
2 | repositories {
3 | google()
4 | mavenCentral()
5 | }
6 | }
7 |
8 | rootProject.buildDir = '../build'
9 | subprojects {
10 | project.buildDir = "${rootProject.buildDir}/${project.name}"
11 | }
12 | subprojects {
13 | project.evaluationDependsOn(':app')
14 | }
15 |
16 | tasks.register("clean", Delete) {
17 | delete rootProject.buildDir
18 | }
19 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/macos/Runner/DebugProfile.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 | com.apple.security.cs.allow-jit
8 |
9 | com.apple.security.network.server
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner/Runner.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | aps-environment
6 | development
7 | com.apple.developer.user-fonts
8 |
9 | app-usage
10 | system-installation
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "background.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/.github/workflows/pr-lint.yml:
--------------------------------------------------------------------------------
1 | name: "Lint PR"
2 |
3 | on:
4 | pull_request_target:
5 | types:
6 | - opened
7 | - edited
8 | - synchronize
9 | - reopened
10 |
11 | permissions:
12 | pull-requests: read
13 |
14 | jobs:
15 | main:
16 | name: Validate PR title
17 | runs-on: ubuntu-latest
18 | steps:
19 | - uses: amannn/action-semantic-pull-request@v5
20 | env:
21 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
22 |
--------------------------------------------------------------------------------
/linux/my_application.h:
--------------------------------------------------------------------------------
1 | #ifndef FLUTTER_MY_APPLICATION_H_
2 | #define FLUTTER_MY_APPLICATION_H_
3 |
4 | #include
5 |
6 | G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION,
7 | GtkApplication)
8 |
9 | /**
10 | * my_application_new:
11 | *
12 | * Creates a new Flutter-based application.
13 | *
14 | * Returns: a new #MyApplication.
15 | */
16 | MyApplication* my_application_new();
17 |
18 | #endif // FLUTTER_MY_APPLICATION_H_
19 |
--------------------------------------------------------------------------------
/macos/Runner/MainFlutterWindow.swift:
--------------------------------------------------------------------------------
1 | import Cocoa
2 | import FlutterMacOS
3 |
4 | class MainFlutterWindow: NSWindow {
5 | override func awakeFromNib() {
6 | let flutterViewController = FlutterViewController()
7 | let windowFrame = self.frame
8 | self.contentViewController = flutterViewController
9 | self.setFrame(windowFrame, display: true)
10 |
11 | RegisterGeneratedPlugins(registry: flutterViewController)
12 |
13 | super.awakeFromNib()
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | # https://help.github.com/articles/about-codeowners/
2 |
3 | # These owners will be the default owners for everything in
4 | # the repo. Unless a later match takes precedence, they will
5 | # be requested for review when someone opens a PR.
6 | * @ahmd-sh
7 |
8 | # Order is important; the last matching pattern takes the most
9 | # precedence. When someone opens a PR that only modifies
10 | # .yml files, only the following people and NOT the global
11 | # owner(s) will be requested for a review.
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 | -
7 |
8 |
9 | -
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/windows/runner/resource.h:
--------------------------------------------------------------------------------
1 | //{{NO_DEPENDENCIES}}
2 | // Microsoft Visual C++ generated include file.
3 | // Used by Runner.rc
4 | //
5 | #define IDI_APP_ICON 101
6 |
7 | // Next default values for new objects
8 | //
9 | #ifdef APSTUDIO_INVOKED
10 | #ifndef APSTUDIO_READONLY_SYMBOLS
11 | #define _APS_NEXT_RESOURCE_VALUE 102
12 | #define _APS_NEXT_COMMAND_VALUE 40001
13 | #define _APS_NEXT_CONTROL_VALUE 1001
14 | #define _APS_NEXT_SYMED_VALUE 101
15 | #endif
16 | #endif
17 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 | -
7 |
8 |
9 | -
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/linux/flutter/generated_plugin_registrant.cc:
--------------------------------------------------------------------------------
1 | //
2 | // Generated file. Do not edit.
3 | //
4 |
5 | // clang-format off
6 |
7 | #include "generated_plugin_registrant.h"
8 |
9 | #include
10 |
11 | void fl_register_plugins(FlPluginRegistry* registry) {
12 | g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
13 | fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
14 | url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
15 | }
16 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "LaunchImage.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "LaunchImage@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "LaunchImage@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/BrandingImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "BrandingImage.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "BrandingImage@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "BrandingImage@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ios/Runner/KeyManager.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | struct KeyManager {
4 | private let keyFilePath = Bundle.main.path(forResource: "APIKey", ofType: "plist")
5 | func getKeys() -> NSDictionary? {
6 | guard let keyFilePath = keyFilePath else {
7 | return nil
8 | }
9 | return NSDictionary(contentsOfFile: keyFilePath)
10 | }
11 |
12 | func getValue(key: String) -> AnyObject? {
13 | guard let keys = getKeys() else {
14 | return nil
15 | }
16 | return keys[key]! as AnyObject
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | # To get started with Dependabot version updates, you'll need to specify which
2 | # package ecosystems to update and where the package manifests are located.
3 | # Please see the documentation for all configuration options:
4 | # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
5 |
6 | version: 2
7 | updates:
8 | - package-ecosystem: "pub"
9 | directory: "/"
10 | target-branch: "develop"
11 | schedule:
12 | interval: "weekly"
13 | commit-message:
14 | prefix: "chore"
15 | include: "scope"
16 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 | import GoogleMaps
4 |
5 | @main
6 | @objc class AppDelegate: FlutterAppDelegate {
7 | override func application(
8 | _ application: UIApplication,
9 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
10 | ) -> Bool {
11 | if let APIKEY = KeyManager().getValue(key: "GoogleMapsApiKeyiOS") as? String {
12 | GMSServices.provideAPIKey(APIKEY)
13 | }
14 | GeneratedPluginRegistrant.register(with: self)
15 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/macos/Runner/Configs/Warnings.xcconfig:
--------------------------------------------------------------------------------
1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings
2 | GCC_WARN_UNDECLARED_SELECTOR = YES
3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE
5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
6 | CLANG_WARN_PRAGMA_PACK = YES
7 | CLANG_WARN_STRICT_PROTOTYPES = YES
8 | CLANG_WARN_COMMA = YES
9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES
10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES
11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES
12 | GCC_WARN_SHADOW = YES
13 | CLANG_WARN_UNREACHABLE_CODE = YES
14 |
--------------------------------------------------------------------------------
/macos/Runner/Configs/AppInfo.xcconfig:
--------------------------------------------------------------------------------
1 | // Application-level settings for the Runner target.
2 | //
3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the
4 | // future. If not, the values below would default to using the project name when this becomes a
5 | // 'flutter create' template.
6 |
7 | // The application's name. By default this is also the title of the Flutter window.
8 | PRODUCT_NAME = simply_qibla
9 |
10 | // The application's bundle identifier
11 | PRODUCT_BUNDLE_IDENTIFIER = com.towardsikhlaas.simplyqibla
12 |
13 | // The copyright displayed in application information
14 | PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved.
15 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | pull_request:
5 | branches: ["master", "develop"]
6 |
7 | jobs:
8 | flutter_test:
9 | name: Run flutter analyze and test
10 | runs-on: ubuntu-latest
11 |
12 | steps:
13 | - uses: actions/checkout@v4
14 |
15 | - uses: actions/setup-java@v2
16 | with:
17 | java-version: "17"
18 | distribution: "adopt"
19 |
20 | - uses: subosito/flutter-action@v2
21 | with:
22 | channel: "stable"
23 |
24 | - name: Install dependencies
25 | run: flutter pub get
26 |
27 | - name: Analyze project source
28 | run: flutter analyze
29 |
30 | - name: Run tests
31 | run: flutter test
32 |
--------------------------------------------------------------------------------
/.github/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | If you discover a security issue, please bring it to our attention right away!
4 |
5 | ## Reporting a Vulnerability
6 |
7 | Please **DO NOT** file a public issue to report a security vulberability, instead send your report privately to **towardsikhlaas+oss@gmail.com**. This will help ensure that any vulnerabilities that are found can be [disclosed responsibly](https://en.wikipedia.org/wiki/Responsible_disclosure) to any affected parties.
8 |
9 | ## Supported Versions
10 |
11 | Project versions that are currently being supported with security updates vary per project.
12 | Please see specific project repositories for details.
13 | If nothing is specified, only the latest major versions are supported.
14 |
--------------------------------------------------------------------------------
/windows/runner/utils.h:
--------------------------------------------------------------------------------
1 | #ifndef RUNNER_UTILS_H_
2 | #define RUNNER_UTILS_H_
3 |
4 | #include
5 | #include
6 |
7 | // Creates a console for the process, and redirects stdout and stderr to
8 | // it for both the runner and the Flutter library.
9 | void CreateAndAttachConsole();
10 |
11 | // Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string
12 | // encoded in UTF-8. Returns an empty std::string on failure.
13 | std::string Utf8FromUtf16(const wchar_t* utf16_string);
14 |
15 | // Gets the command line arguments passed in as a std::vector,
16 | // encoded in UTF-8. Returns an empty std::vector on failure.
17 | std::vector GetCommandLineArguments();
18 |
19 | #endif // RUNNER_UTILS_H_
20 |
--------------------------------------------------------------------------------
/windows/flutter/generated_plugin_registrant.cc:
--------------------------------------------------------------------------------
1 | //
2 | // Generated file. Do not edit.
3 | //
4 |
5 | // clang-format off
6 |
7 | #include "generated_plugin_registrant.h"
8 |
9 | #include
10 | #include
11 | #include
12 |
13 | void RegisterPlugins(flutter::PluginRegistry* registry) {
14 | GeolocatorWindowsRegisterWithRegistrar(
15 | registry->GetRegistrarForPlugin("GeolocatorWindows"));
16 | SharePlusWindowsPluginCApiRegisterWithRegistrar(
17 | registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi"));
18 | UrlLauncherWindowsRegisterWithRegistrar(
19 | registry->GetRegistrarForPlugin("UrlLauncherWindows"));
20 | }
21 |
--------------------------------------------------------------------------------
/flutter_launcher_icons.yaml:
--------------------------------------------------------------------------------
1 | flutter_launcher_icons:
2 | # dart run flutter_launcher_icons -f flutter_launcher_icons.yaml
3 | image_path: "assets/app-icon/app-icon.png"
4 |
5 | # Android specific config
6 | android: true
7 | min_sdk_android: 21
8 | image_path_android: "assets/app-icon/app-icon.png"
9 | adaptive_icon_background: "assets/app-icon/background.png"
10 | adaptive_icon_foreground: "assets/app-icon/foreground.png"
11 |
12 | # iOS specific config
13 | ios: true
14 | remove_alpha_ios: true
15 | image_path_ios: "assets/app-icon/app-icon-ios.png"
16 | # iOS 18 and above
17 | image_path_ios_dark_transparent: "assets/app-icon/app-icon-ios-dark.png"
18 | image_path_ios_tinted_grayscale: "assets/app-icon/app-icon-ios-tinted.png"
19 | desaturate_tinted_to_grayscale_ios: false
20 |
--------------------------------------------------------------------------------
/lib/helpers/shared_preferences_helper.dart:
--------------------------------------------------------------------------------
1 | import 'package:shared_preferences/shared_preferences.dart';
2 |
3 | Future getOnboardingStatus() async {
4 | final SharedPreferences prefs = await SharedPreferences.getInstance();
5 | await prefs.reload();
6 | return (prefs.getBool('hasSeenOnboarding') ?? false);
7 | }
8 |
9 | Future setOnboardingStatus(bool value) async {
10 | final SharedPreferences prefs = await SharedPreferences.getInstance();
11 | await prefs.setBool('hasSeenOnboarding', value);
12 | }
13 |
14 | Future getLaunchCount() async {
15 | final SharedPreferences prefs = await SharedPreferences.getInstance();
16 | await prefs.reload();
17 |
18 | int launchCount = prefs.getInt('launchCount') ?? 0;
19 | launchCount++;
20 | prefs.setInt('launchCount', launchCount);
21 |
22 | return launchCount;
23 | }
24 |
--------------------------------------------------------------------------------
/linux/flutter/generated_plugins.cmake:
--------------------------------------------------------------------------------
1 | #
2 | # Generated file, do not edit.
3 | #
4 |
5 | list(APPEND FLUTTER_PLUGIN_LIST
6 | url_launcher_linux
7 | )
8 |
9 | list(APPEND FLUTTER_FFI_PLUGIN_LIST
10 | )
11 |
12 | set(PLUGIN_BUNDLED_LIBRARIES)
13 |
14 | foreach(plugin ${FLUTTER_PLUGIN_LIST})
15 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin})
16 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin)
17 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $)
18 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
19 | endforeach(plugin)
20 |
21 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})
22 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin})
23 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})
24 | endforeach(ffi_plugin)
25 |
--------------------------------------------------------------------------------
/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 | 14.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/lib/widgets/sq_app_bar_title.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_tabler_icons/flutter_tabler_icons.dart';
3 | import 'package:simply_qibla/l10n/app_localizations.dart';
4 | import 'package:simply_qibla/styles/style.dart';
5 |
6 | class SQAppBarTitle extends StatelessWidget {
7 | const SQAppBarTitle({super.key});
8 |
9 | @override
10 | Widget build(BuildContext context) {
11 | return Row(
12 | children: [
13 | const Icon(
14 | TablerIcons.location,
15 | size: AppDimensions.iconSizeLg,
16 | color: Colors.white,
17 | ),
18 | Text(
19 | AppLocalizations.of(context)!.appNamePascalCase,
20 | style: Theme.of(context).textTheme.titleLarge!.copyWith(
21 | color: Colors.white,
22 | ),
23 | )
24 | ],
25 | );
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/.github/pull_request_template.md:
--------------------------------------------------------------------------------
1 | # Checklist
2 |
3 | * [ ] Did you double check which branch your PR is merging changes to?
4 | * [ ] Have you followed the guidelines in our [CONTRIBUTING](../../blob/master/.github/CONTRIBUTING.md) document?
5 | * [ ] Have you checked to ensure there aren't other open [Pull Requests](../../pulls) for the same update/change?
6 | * [ ] Does your submission pass lint and tests?
7 | * [ ] Does your commit and commit message style matches our [requested structure](../../blob/master/.github/CONTRIBUTING.md#memo-writing-commit-messages)?
8 |
9 | # Description
10 |
11 | ## 🔥 What?
12 |
13 |
14 | ## 😲 How?
15 |
16 |
17 | ## 🤔 Why?
18 |
19 |
20 | ## 📸 Screenshots (if applicable)
21 |
22 |
23 | ## 💭 Anything Else?
24 | Nope.
25 |
--------------------------------------------------------------------------------
/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 |
20 | plugins {
21 | id "dev.flutter.flutter-plugin-loader" version "1.0.0"
22 | id "com.android.application" version '8.12.1' apply false
23 | id "org.jetbrains.kotlin.android" version "2.1.0" apply false
24 | }
25 |
26 | include ":app"
27 |
--------------------------------------------------------------------------------
/lib/styles/style.dart:
--------------------------------------------------------------------------------
1 | class AppPadding {
2 | static const double standard = 20.0;
3 | static const double appBarTop = 30.0;
4 | static const double bottomNav = 45.0;
5 | static const double appBarActionRight = 12.0;
6 | }
7 |
8 | class AppDimensions {
9 | static const double appBarPreferredSize = 80.0;
10 | static const double pillBarSize = 50.0;
11 | static const double iconSizeSm = 18.0;
12 | static const double iconSizeMd = 26.0;
13 | static const double iconSizeLg = 32.0;
14 | static const double iconSizeXl = 50.0;
15 | static const double borderRadiusXs = 4.0;
16 | static const double borderRadiusSm = 8.0;
17 | static const double borderRadiusMd = 12.0;
18 | static const double borderRadiusLg = 16.0;
19 | static const double borderRadiusXl = 28.0;
20 | static const double suggestionsHeightMultiplier = 0.3;
21 | }
22 |
23 | class AppStyles {
24 | static const double shadowOpacity = 0.1;
25 | }
26 |
--------------------------------------------------------------------------------
/lib/widgets/link_icon_button.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class LinkIconButton extends StatelessWidget {
4 | final VoidCallback onPressed;
5 | final String labelText;
6 | final Icon leadingIcon;
7 | final Color? buttonForegroundColor;
8 | final Color? buttonBackgroundColor;
9 |
10 | const LinkIconButton({
11 | required this.onPressed,
12 | required this.labelText,
13 | required this.leadingIcon,
14 | this.buttonForegroundColor,
15 | this.buttonBackgroundColor,
16 | super.key,
17 | });
18 |
19 | @override
20 | Widget build(BuildContext context) {
21 | return ElevatedButton.icon(
22 | label: Text(labelText),
23 | onPressed: onPressed,
24 | icon: leadingIcon,
25 | style: ElevatedButton.styleFrom(
26 | foregroundColor: buttonForegroundColor,
27 | backgroundColor: buttonBackgroundColor,
28 | ));
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/windows/flutter/generated_plugins.cmake:
--------------------------------------------------------------------------------
1 | #
2 | # Generated file, do not edit.
3 | #
4 |
5 | list(APPEND FLUTTER_PLUGIN_LIST
6 | geolocator_windows
7 | share_plus
8 | url_launcher_windows
9 | )
10 |
11 | list(APPEND FLUTTER_FFI_PLUGIN_LIST
12 | )
13 |
14 | set(PLUGIN_BUNDLED_LIBRARIES)
15 |
16 | foreach(plugin ${FLUTTER_PLUGIN_LIST})
17 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin})
18 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin)
19 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $)
20 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
21 | endforeach(plugin)
22 |
23 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})
24 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin})
25 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})
26 | endforeach(ffi_plugin)
27 |
--------------------------------------------------------------------------------
/windows/runner/runner.exe.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PerMonitorV2
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .build/
9 | .buildlog/
10 | .history
11 | .svn/
12 | .swiftpm/
13 | migrate_working_dir/
14 | .env
15 | .env.local
16 | android/keys.properties
17 | ios/Runner/APIKey.plist
18 |
19 | # IntelliJ related
20 | *.iml
21 | *.ipr
22 | *.iws
23 | .idea/
24 |
25 | # The .vscode folder contains launch configuration and tasks you configure in
26 | # VS Code which you may wish to be included in version control, so this line
27 | # is commented out by default.
28 | #.vscode/
29 |
30 | # Flutter/Dart/Pub related
31 | **/doc/api/
32 | **/ios/Flutter/.last_build_id
33 | .dart_tool/
34 | .flutter-plugins
35 | .flutter-plugins-dependencies
36 | .pub-cache/
37 | .pub/
38 | /build/
39 |
40 | # Symbolication related
41 | app.*.symbols
42 |
43 | # Obfuscation related
44 | app.*.map.json
45 |
46 | # Android Studio will place build artifacts here
47 | /android/app/debug
48 | /android/app/profile
49 | /android/app/release
50 |
--------------------------------------------------------------------------------
/web/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "simply_qibla",
3 | "short_name": "simply_qibla",
4 | "start_url": ".",
5 | "display": "standalone",
6 | "background_color": "#0175C2",
7 | "theme_color": "#0175C2",
8 | "description": "A new Flutter project.",
9 | "orientation": "portrait-primary",
10 | "prefer_related_applications": false,
11 | "icons": [
12 | {
13 | "src": "icons/Icon-192.png",
14 | "sizes": "192x192",
15 | "type": "image/png"
16 | },
17 | {
18 | "src": "icons/Icon-512.png",
19 | "sizes": "512x512",
20 | "type": "image/png"
21 | },
22 | {
23 | "src": "icons/Icon-maskable-192.png",
24 | "sizes": "192x192",
25 | "type": "image/png",
26 | "purpose": "maskable"
27 | },
28 | {
29 | "src": "icons/Icon-maskable-512.png",
30 | "sizes": "512x512",
31 | "type": "image/png",
32 | "purpose": "maskable"
33 | }
34 | ]
35 | }
36 |
--------------------------------------------------------------------------------
/lib/widgets/sq_app_bar.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:simply_qibla/styles/style.dart';
3 | import 'package:simply_qibla/widgets/info_button.dart';
4 | import 'package:simply_qibla/widgets/sq_app_bar_title.dart';
5 |
6 | class SQAppBar extends StatelessWidget implements PreferredSizeWidget {
7 | const SQAppBar({super.key});
8 |
9 | @override
10 | Size get preferredSize => const Size.fromHeight(AppDimensions.appBarPreferredSize);
11 |
12 | @override
13 | Widget build(BuildContext context) {
14 | return Padding(
15 | padding: const EdgeInsets.only(top: AppPadding.appBarTop),
16 | child: AppBar(
17 | backgroundColor: Colors.transparent,
18 | elevation: 0.0,
19 | title: const SQAppBarTitle(),
20 | titleSpacing: AppPadding.standard,
21 | actions: const [
22 | Padding(
23 | padding: EdgeInsets.only(right: AppPadding.appBarActionRight),
24 | child: InfoButton(),
25 | )
26 | ],
27 | ),
28 | );
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/windows/runner/flutter_window.h:
--------------------------------------------------------------------------------
1 | #ifndef RUNNER_FLUTTER_WINDOW_H_
2 | #define RUNNER_FLUTTER_WINDOW_H_
3 |
4 | #include
5 | #include
6 |
7 | #include
8 |
9 | #include "win32_window.h"
10 |
11 | // A window that does nothing but host a Flutter view.
12 | class FlutterWindow : public Win32Window {
13 | public:
14 | // Creates a new FlutterWindow hosting a Flutter view running |project|.
15 | explicit FlutterWindow(const flutter::DartProject& project);
16 | virtual ~FlutterWindow();
17 |
18 | protected:
19 | // Win32Window:
20 | bool OnCreate() override;
21 | void OnDestroy() override;
22 | LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam,
23 | LPARAM const lparam) noexcept override;
24 |
25 | private:
26 | // The project to run.
27 | flutter::DartProject project_;
28 |
29 | // The Flutter instance hosted by this window.
30 | std::unique_ptr flutter_controller_;
31 | };
32 |
33 | #endif // RUNNER_FLUTTER_WINDOW_H_
34 |
--------------------------------------------------------------------------------
/macos/Flutter/GeneratedPluginRegistrant.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Generated file. Do not edit.
3 | //
4 |
5 | import FlutterMacOS
6 | import Foundation
7 |
8 | import geolocator_apple
9 | import in_app_review
10 | import package_info_plus
11 | import path_provider_foundation
12 | import share_plus
13 | import shared_preferences_foundation
14 | import url_launcher_macos
15 |
16 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
17 | GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
18 | InAppReviewPlugin.register(with: registry.registrar(forPlugin: "InAppReviewPlugin"))
19 | FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
20 | PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
21 | SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
22 | SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
23 | UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
24 | }
25 |
--------------------------------------------------------------------------------
/macos/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | $(FLUTTER_BUILD_NAME)
21 | CFBundleVersion
22 | $(FLUTTER_BUILD_NUMBER)
23 | LSMinimumSystemVersion
24 | $(MACOSX_DEPLOYMENT_TARGET)
25 | NSHumanReadableCopyright
26 | $(PRODUCT_COPYRIGHT)
27 | NSMainNibFile
28 | MainMenu
29 | NSPrincipalClass
30 | NSApplication
31 |
32 |
33 |
--------------------------------------------------------------------------------
/lib/pages/map_page.dart:
--------------------------------------------------------------------------------
1 | import 'dart:developer' as developer;
2 | import 'dart:math';
3 |
4 | import 'package:flutter/foundation.dart';
5 | import 'package:flutter/material.dart';
6 | import 'package:flutter_compass/flutter_compass.dart';
7 | import 'package:flutter_tabler_icons/flutter_tabler_icons.dart';
8 | import 'package:geolocator/geolocator.dart';
9 | import 'package:google_maps_flutter/google_maps_flutter.dart';
10 | import 'package:in_app_review/in_app_review.dart';
11 | import 'package:simply_qibla/constants/constants.dart';
12 | import 'package:simply_qibla/globals/globals.dart';
13 | import 'package:simply_qibla/helpers/shared_preferences_helper.dart';
14 | import 'package:simply_qibla/l10n/app_localizations.dart';
15 | import 'package:simply_qibla/styles/style.dart';
16 | import 'package:simply_qibla/widgets/center_console.dart';
17 | import 'package:simply_qibla/widgets/coordinates_form_bar.dart';
18 | import 'package:simply_qibla/widgets/sq_app_bar.dart';
19 | import 'package:simply_qibla/widgets/user_location_icon.dart';
20 |
21 | part 'map_page_state.dart';
22 |
23 | class MapPage extends StatefulWidget {
24 | const MapPage({super.key});
25 |
26 | @override
27 | MapPageState createState() => MapPageState();
28 | }
29 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
13 |
19 |
22 |
23 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
13 |
19 |
22 |
23 |
--------------------------------------------------------------------------------
/lib/helpers/maps_renderer_helper.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 | import 'package:google_maps_flutter_android/google_maps_flutter_android.dart';
3 | import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart';
4 |
5 | Completer? _initializedRendererCompleter;
6 |
7 | /// Initializes map renderer to the `latest` renderer type for Android platform.
8 | ///
9 | /// The renderer must be requested before creating GoogleMap instances,
10 | /// as the renderer can be initialized only once per application context.
11 |
12 | Future initializeMapRenderer() async {
13 | if (_initializedRendererCompleter != null) {
14 | return _initializedRendererCompleter!.future;
15 | }
16 |
17 | final Completer completer =
18 | Completer();
19 | _initializedRendererCompleter = completer;
20 |
21 | final GoogleMapsFlutterPlatform mapsImplementation =
22 | GoogleMapsFlutterPlatform.instance;
23 | if (mapsImplementation is GoogleMapsFlutterAndroid) {
24 | unawaited(mapsImplementation
25 | .initializeWithRenderer(AndroidMapRenderer.latest)
26 | .then((AndroidMapRenderer initializedRenderer) =>
27 | completer.complete(initializedRenderer)));
28 | } else {
29 | completer.complete(null);
30 | }
31 |
32 | return completer.future;
33 | }
34 |
--------------------------------------------------------------------------------
/lib/widgets/info_button.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_tabler_icons/flutter_tabler_icons.dart';
3 | import 'package:package_info_plus/package_info_plus.dart';
4 | import 'package:simply_qibla/styles/style.dart';
5 | import 'package:simply_qibla/widgets/info_modal.dart';
6 |
7 | class InfoButton extends StatefulWidget {
8 | const InfoButton({super.key});
9 |
10 | @override
11 | State createState() => _InfoButtonState();
12 | }
13 |
14 | class _InfoButtonState extends State {
15 | late String _version;
16 | late String _buildNumber;
17 |
18 | @override
19 | void initState() {
20 | super.initState();
21 | _getPackageInfo();
22 | }
23 |
24 | void _getPackageInfo() async {
25 | PackageInfo packageInfo = await PackageInfo.fromPlatform();
26 |
27 | setState(() {
28 | _version = packageInfo.version;
29 | _buildNumber = packageInfo.buildNumber;
30 | });
31 | }
32 |
33 | @override
34 | Widget build(BuildContext context) {
35 | return IconButton(
36 | onPressed: () => showInfoModal(context, _version, _buildNumber),
37 | highlightColor: Colors.grey,
38 | icon: const Icon(
39 | TablerIcons.info_circle,
40 | size: AppDimensions.iconSizeMd,
41 | color: Colors.white,
42 | semanticLabel: 'Info Button',
43 | ),
44 | );
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values-v31/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
13 |
19 |
22 |
23 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night-v31/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
13 |
19 |
22 |
23 |
--------------------------------------------------------------------------------
/windows/runner/main.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 |
5 | #include "flutter_window.h"
6 | #include "utils.h"
7 |
8 | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
9 | _In_ wchar_t *command_line, _In_ int show_command) {
10 | // Attach to console when present (e.g., 'flutter run') or create a
11 | // new console when running with a debugger.
12 | if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) {
13 | CreateAndAttachConsole();
14 | }
15 |
16 | // Initialize COM, so that it is available for use in the library and/or
17 | // plugins.
18 | ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
19 |
20 | flutter::DartProject project(L"data");
21 |
22 | std::vector command_line_arguments =
23 | GetCommandLineArguments();
24 |
25 | project.set_dart_entrypoint_arguments(std::move(command_line_arguments));
26 |
27 | FlutterWindow window(project);
28 | Win32Window::Point origin(10, 10);
29 | Win32Window::Size size(1280, 720);
30 | if (!window.Create(L"simply_qibla", origin, size)) {
31 | return EXIT_FAILURE;
32 | }
33 | window.SetQuitOnClose(true);
34 |
35 | ::MSG msg;
36 | while (::GetMessage(&msg, nullptr, 0, 0)) {
37 | ::TranslateMessage(&msg);
38 | ::DispatchMessage(&msg);
39 | }
40 |
41 | ::CoUninitialize();
42 | return EXIT_SUCCESS;
43 | }
44 |
--------------------------------------------------------------------------------
/macos/Podfile:
--------------------------------------------------------------------------------
1 | platform :osx, '10.14'
2 |
3 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
4 | ENV['COCOAPODS_DISABLE_STATS'] = 'true'
5 |
6 | project 'Runner', {
7 | 'Debug' => :debug,
8 | 'Profile' => :release,
9 | 'Release' => :release,
10 | }
11 |
12 | def flutter_root
13 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__)
14 | unless File.exist?(generated_xcode_build_settings_path)
15 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first"
16 | end
17 |
18 | File.foreach(generated_xcode_build_settings_path) do |line|
19 | matches = line.match(/FLUTTER_ROOT\=(.*)/)
20 | return matches[1].strip if matches
21 | end
22 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\""
23 | end
24 |
25 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
26 |
27 | flutter_macos_podfile_setup
28 |
29 | target 'Runner' do
30 | use_frameworks!
31 | use_modular_headers!
32 |
33 | flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))
34 | target 'RunnerTests' do
35 | inherit! :search_paths
36 | end
37 | end
38 |
39 | post_install do |installer|
40 | installer.pods_project.targets.each do |target|
41 | flutter_additional_macos_build_settings(target)
42 | end
43 | end
44 |
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "16x16",
5 | "idiom" : "mac",
6 | "filename" : "app_icon_16.png",
7 | "scale" : "1x"
8 | },
9 | {
10 | "size" : "16x16",
11 | "idiom" : "mac",
12 | "filename" : "app_icon_32.png",
13 | "scale" : "2x"
14 | },
15 | {
16 | "size" : "32x32",
17 | "idiom" : "mac",
18 | "filename" : "app_icon_32.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "32x32",
23 | "idiom" : "mac",
24 | "filename" : "app_icon_64.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "128x128",
29 | "idiom" : "mac",
30 | "filename" : "app_icon_128.png",
31 | "scale" : "1x"
32 | },
33 | {
34 | "size" : "128x128",
35 | "idiom" : "mac",
36 | "filename" : "app_icon_256.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "256x256",
41 | "idiom" : "mac",
42 | "filename" : "app_icon_256.png",
43 | "scale" : "1x"
44 | },
45 | {
46 | "size" : "256x256",
47 | "idiom" : "mac",
48 | "filename" : "app_icon_512.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "512x512",
53 | "idiom" : "mac",
54 | "filename" : "app_icon_512.png",
55 | "scale" : "1x"
56 | },
57 | {
58 | "size" : "512x512",
59 | "idiom" : "mac",
60 | "filename" : "app_icon_1024.png",
61 | "scale" : "2x"
62 | }
63 | ],
64 | "info" : {
65 | "version" : 1,
66 | "author" : "xcode"
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml:
--------------------------------------------------------------------------------
1 | name: Feature Request
2 | description: Suggest an idea for SimplyQibla
3 | labels: [enhancement]
4 | body:
5 | - type: checkboxes
6 | id: checklist
7 | attributes:
8 | label: Checklist
9 | description: You should ensure the completion of the task before proceeding to check it off the checklist. Neglecting to do so may impede the efficiency of the issue resolution process. The developer has the right to delete the issue directly if you check the list blindly.
10 | options:
11 | - label: I've checked that there is no other issue about this feature request.
12 | required: true
13 | - label: This issue contains only one feature request.
14 | required: true
15 | - label: The title of this issue accurately describes the feature request.
16 | required: true
17 |
18 | - type: textarea
19 | id: feature-description
20 | attributes:
21 | label: Feature description
22 | description: What feature you want the app to have? Provide detailed description about what it should look like or where it should be added.
23 | validations:
24 | required: true
25 |
26 | - type: textarea
27 | id: why-is-the-feature-requested
28 | attributes:
29 | label: Why do you want this feature?
30 | description: Describe the problem or limitation that motivates you to want this feature to be added.
31 | validations:
32 | required: true
33 |
34 | - type: textarea
35 | id: additional-information
36 | attributes:
37 | label: Additional information
38 | description: Add any other context or screenshots about the feature request here.
39 | placeholder: |
40 | Additional details and attachments.
41 |
--------------------------------------------------------------------------------
/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 |
25 | # Error rules
26 | avoid_print: true
27 | discarded_futures: true
28 | always_specify_types: true
29 | always_put_required_named_parameters_first: true
30 | avoid_types_as_parameter_names: true
31 |
32 | # Style rules
33 |
34 | prefer_single_quotes: true
35 | directives_ordering: true
36 | always_declare_return_types: true
37 | avoid_null_checks_in_equality_operators: true
38 |
39 | # Additional information about this file can be found at
40 | # https://dart.dev/guides/language/analysis-options
41 |
--------------------------------------------------------------------------------
/ios/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment this line to define a global platform for your project
2 | # platform :ios, '13.0'
3 |
4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true'
6 |
7 | project 'Runner', {
8 | 'Debug' => :debug,
9 | 'Profile' => :release,
10 | 'Release' => :release,
11 | }
12 |
13 | def flutter_root
14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
15 | unless File.exist?(generated_xcode_build_settings_path)
16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
17 | end
18 |
19 | File.foreach(generated_xcode_build_settings_path) do |line|
20 | matches = line.match(/FLUTTER_ROOT\=(.*)/)
21 | return matches[1].strip if matches
22 | end
23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
24 | end
25 |
26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
27 |
28 | flutter_ios_podfile_setup
29 |
30 | target 'Runner' do
31 | use_frameworks!
32 | use_modular_headers!
33 |
34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
35 | target 'RunnerTests' do
36 | inherit! :search_paths
37 | end
38 | end
39 |
40 | post_install do |installer|
41 | installer.pods_project.targets.each do |target|
42 | flutter_additional_ios_build_settings(target)
43 | if target.name == "geolocator_apple"
44 | target.build_configurations.each do |config|
45 | config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', 'BYPASS_PERMISSION_LOCATION_ALWAYS=1']
46 | end
47 | end
48 | end
49 | end
50 |
--------------------------------------------------------------------------------
/lib/constants/constants.dart:
--------------------------------------------------------------------------------
1 | import 'package:google_maps_flutter/google_maps_flutter.dart';
2 |
3 | class MapConstants {
4 | static const double zoomLevel = 19.0;
5 | static const int polylineWidth = 10;
6 | static const LatLng defaultPosition = LatLng(
7 | 21.41940349340265,
8 | 39.82562665088553,
9 | );
10 | static const LatLng qiblaPosition = LatLng(
11 | 21.42253495661983,
12 | 39.82618860061329,
13 | );
14 | }
15 |
16 | enum CenterConsoleState {
17 | centering,
18 | dragging,
19 | idle,
20 | }
21 |
22 | class AppStrings {
23 | // Links
24 |
25 | static const String githubUriPath =
26 | 'https://github.com/TowardsIkhlaas/simply_qibla/blob/master/.github/CONTRIBUTING.md';
27 | static const String donateUriPath = 'https://ko-fi.com/TowardsIkhlaas';
28 | static const String socialInstagramUriPath = 'https://www.instagram.com/towardsikhlaas';
29 | static const String shareContentText =
30 | 'As salaam alaykum warahmatullahi wabarakatuh! Check out this beautiful and accurate Qibla app';
31 | static const String landingPageLink = 'https://simplyqibla.towardsikhlaas.com';
32 | static const String androidAppLink =
33 | 'https://play.google.com/store/apps/details?id=com.towardsikhlaas.simplyqibla';
34 | static const String iosAppLink = 'https://apps.apple.com/app/id6504881956';
35 | }
36 |
37 | class AppStatusCodes {
38 | static const int locationDisabled = 701;
39 | static const int locationDeniedInitial = 702;
40 | static const int locationDeniedPermanent = 704;
41 | }
42 |
43 | class InputValidation {
44 | static RegExp latitudeValidatorPattern = RegExp(
45 | r'^(\+|-)?(?:90(?:(?:\.0{1,15})?)|(?:[0-9]|[1-8][0-9])(?:(?:\.[0-9]{1,15})?))$');
46 | static RegExp longitudeValidatorPattern = RegExp(
47 | r'^(\+|-)?(?:180(?:(?:\.0{1,15})?)|(?:[0-9]|[1-9][0-9]|1[0-7][0-9])(?:(?:\.[0-9]{1,15})?))$');
48 | }
49 |
--------------------------------------------------------------------------------
/.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: "300451adae589accbece3490f4396f10bdf15e6e"
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: 300451adae589accbece3490f4396f10bdf15e6e
17 | base_revision: 300451adae589accbece3490f4396f10bdf15e6e
18 | - platform: android
19 | create_revision: 300451adae589accbece3490f4396f10bdf15e6e
20 | base_revision: 300451adae589accbece3490f4396f10bdf15e6e
21 | - platform: ios
22 | create_revision: 300451adae589accbece3490f4396f10bdf15e6e
23 | base_revision: 300451adae589accbece3490f4396f10bdf15e6e
24 | - platform: linux
25 | create_revision: 300451adae589accbece3490f4396f10bdf15e6e
26 | base_revision: 300451adae589accbece3490f4396f10bdf15e6e
27 | - platform: macos
28 | create_revision: 300451adae589accbece3490f4396f10bdf15e6e
29 | base_revision: 300451adae589accbece3490f4396f10bdf15e6e
30 | - platform: web
31 | create_revision: 300451adae589accbece3490f4396f10bdf15e6e
32 | base_revision: 300451adae589accbece3490f4396f10bdf15e6e
33 | - platform: windows
34 | create_revision: 300451adae589accbece3490f4396f10bdf15e6e
35 | base_revision: 300451adae589accbece3490f4396f10bdf15e6e
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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/windows/runner/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.14)
2 | project(runner LANGUAGES CXX)
3 |
4 | # Define the application target. To change its name, change BINARY_NAME in the
5 | # top-level CMakeLists.txt, not the value here, or `flutter run` will no longer
6 | # work.
7 | #
8 | # Any new source files that you add to the application should be added here.
9 | add_executable(${BINARY_NAME} WIN32
10 | "flutter_window.cpp"
11 | "main.cpp"
12 | "utils.cpp"
13 | "win32_window.cpp"
14 | "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
15 | "Runner.rc"
16 | "runner.exe.manifest"
17 | )
18 |
19 | # Apply the standard set of build settings. This can be removed for applications
20 | # that need different build settings.
21 | apply_standard_settings(${BINARY_NAME})
22 |
23 | # Add preprocessor definitions for the build version.
24 | target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"")
25 | target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}")
26 | target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}")
27 | target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}")
28 | target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}")
29 |
30 | # Disable Windows macros that collide with C++ standard library functions.
31 | target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX")
32 |
33 | # Add dependency libraries and include directories. Add any application-specific
34 | # dependencies here.
35 | target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app)
36 | target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib")
37 | target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")
38 |
39 | # Run the Flutter tool portions of the build. This must not be removed.
40 | add_dependencies(${BINARY_NAME} flutter_assemble)
41 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CADisableMinimumFrameDurationOnPhone
6 |
7 | CFBundleDevelopmentRegion
8 | $(DEVELOPMENT_LANGUAGE)
9 | CFBundleDisplayName
10 | SimplyQibla
11 | CFBundleDocumentTypes
12 |
13 | CFBundleExecutable
14 | $(EXECUTABLE_NAME)
15 | CFBundleIdentifier
16 | $(PRODUCT_BUNDLE_IDENTIFIER)
17 | CFBundleInfoDictionaryVersion
18 | 6.0
19 | CFBundleLocalizations
20 |
21 | en
22 | ar
23 |
24 | CFBundleName
25 | simply_qibla
26 | CFBundlePackageType
27 | APPL
28 | CFBundleShortVersionString
29 | $(FLUTTER_BUILD_NAME)
30 | CFBundleSignature
31 | ????
32 | CFBundleVersion
33 | $(FLUTTER_BUILD_NUMBER)
34 | LSRequiresIPhoneOS
35 |
36 | NSLocationWhenInUseUsageDescription
37 | Your location is used to center the map to your area and determine the Qibla direction. Alternatively, you can manually move the map or enter specific coordinates.
38 | UIApplicationSupportsIndirectInputEvents
39 |
40 | UILaunchStoryboardName
41 | LaunchScreen
42 | UIMainStoryboardFile
43 | Main
44 | UIRequiresFullScreen
45 |
46 | UIStatusBarHidden
47 |
48 | UISupportedInterfaceOrientations
49 |
50 | UIInterfaceOrientationPortrait
51 |
52 | UISupportedInterfaceOrientations~ipad
53 |
54 | UIInterfaceOrientationPortrait
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/windows/runner/utils.cpp:
--------------------------------------------------------------------------------
1 | #include "utils.h"
2 |
3 | #include
4 | #include
5 | #include
6 | #include
7 |
8 | #include
9 |
10 | void CreateAndAttachConsole() {
11 | if (::AllocConsole()) {
12 | FILE *unused;
13 | if (freopen_s(&unused, "CONOUT$", "w", stdout)) {
14 | _dup2(_fileno(stdout), 1);
15 | }
16 | if (freopen_s(&unused, "CONOUT$", "w", stderr)) {
17 | _dup2(_fileno(stdout), 2);
18 | }
19 | std::ios::sync_with_stdio();
20 | FlutterDesktopResyncOutputStreams();
21 | }
22 | }
23 |
24 | std::vector GetCommandLineArguments() {
25 | // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use.
26 | int argc;
27 | wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc);
28 | if (argv == nullptr) {
29 | return std::vector();
30 | }
31 |
32 | std::vector command_line_arguments;
33 |
34 | // Skip the first argument as it's the binary name.
35 | for (int i = 1; i < argc; i++) {
36 | command_line_arguments.push_back(Utf8FromUtf16(argv[i]));
37 | }
38 |
39 | ::LocalFree(argv);
40 |
41 | return command_line_arguments;
42 | }
43 |
44 | std::string Utf8FromUtf16(const wchar_t* utf16_string) {
45 | if (utf16_string == nullptr) {
46 | return std::string();
47 | }
48 | int target_length = ::WideCharToMultiByte(
49 | CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
50 | -1, nullptr, 0, nullptr, nullptr)
51 | -1; // remove the trailing null character
52 | int input_length = (int)wcslen(utf16_string);
53 | std::string utf8_string;
54 | if (target_length <= 0 || target_length > utf8_string.max_size()) {
55 | return utf8_string;
56 | }
57 | utf8_string.resize(target_length);
58 | int converted_length = ::WideCharToMultiByte(
59 | CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
60 | input_length, utf8_string.data(), target_length, nullptr, nullptr);
61 | if (converted_length == 0) {
62 | return std::string();
63 | }
64 | return utf8_string;
65 | }
66 |
--------------------------------------------------------------------------------
/lib/theme/theme.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class AppThemes {
4 | static final ThemeData darkTheme = ThemeData(
5 | colorScheme: ColorScheme.fromSeed(seedColor: Colors.amberAccent),
6 | useMaterial3: true,
7 | scaffoldBackgroundColor: const Color.fromRGBO(21, 18, 19, 1.0),
8 | appBarTheme: const AppBarTheme(
9 | backgroundColor: Color.fromRGBO(21, 18, 19, 1.0),
10 | titleTextStyle: TextStyle(
11 | fontSize: 24.0,
12 | fontWeight: FontWeight.w700,
13 | color: Colors.white,
14 | letterSpacing: -1,
15 | ),
16 | iconTheme: IconThemeData(
17 | color: Colors.white,
18 | ),
19 | ),
20 | fontFamily: 'Inter',
21 | textTheme: const TextTheme(
22 | titleLarge: TextStyle(
23 | fontSize: 32.0,
24 | fontWeight: FontWeight.w900,
25 | letterSpacing: -2,
26 | ),
27 | titleMedium: TextStyle(
28 | fontSize: 24.0,
29 | letterSpacing: -1,
30 | ),
31 | titleSmall: TextStyle(
32 | fontSize: 18.0,
33 | letterSpacing: -0.50,
34 | ),
35 | bodyLarge: TextStyle(
36 | letterSpacing: -0.50,
37 | ),
38 | bodyMedium: TextStyle(
39 | letterSpacing: -0.25,
40 | ),
41 | bodySmall: TextStyle(
42 | letterSpacing: -0.25,
43 | ),
44 | labelLarge: TextStyle(
45 | letterSpacing: -0.25,
46 | ),
47 | labelMedium: TextStyle(
48 | letterSpacing: -0.25,
49 | ),
50 | labelSmall: TextStyle(
51 | letterSpacing: -0.25,
52 | ),
53 | ),
54 | );
55 |
56 | static const Color githubPrimaryColor = Colors.white;
57 | static const Color githubSecondaryColor = Color.fromRGBO(14, 17, 23, 1.0);
58 | static const Color donationServicePrimaryColor = Colors.white;
59 | static const Color donationServiceSecondaryColor =
60 | Color.fromRGBO(83, 183, 248, 1.0);
61 | static const Color socialInstagramPrimaryColor = Colors.pink;
62 | static const Color socialInstagramSecondaryColor = Colors.white;
63 | }
64 |
--------------------------------------------------------------------------------
/web/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | simply_qibla
33 |
34 |
35 |
39 |
40 |
41 |
42 |
43 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'dart:io';
2 |
3 | import 'package:flutter/material.dart';
4 | import 'package:flutter/services.dart';
5 | import 'package:google_maps_flutter_android/google_maps_flutter_android.dart';
6 | import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart';
7 | import 'package:simply_qibla/globals/globals.dart';
8 | import 'package:simply_qibla/helpers/maps_renderer_helper.dart';
9 | import 'package:simply_qibla/helpers/shared_preferences_helper.dart';
10 | import 'package:simply_qibla/l10n/app_localizations.dart';
11 | import 'package:simply_qibla/pages/map_page.dart';
12 | import 'package:simply_qibla/pages/onboarding_page.dart';
13 | import 'package:simply_qibla/theme/theme.dart';
14 |
15 | bool hasSeenOnboarding = false;
16 |
17 | Future main() async {
18 | WidgetsFlutterBinding.ensureInitialized();
19 | SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
20 | statusBarColor: Colors.transparent,
21 | systemNavigationBarColor: Colors.transparent,
22 | ));
23 | SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
24 |
25 | if (Platform.isAndroid) {
26 | final GoogleMapsFlutterPlatform mapsImplementation =
27 | GoogleMapsFlutterPlatform.instance;
28 | if (mapsImplementation is GoogleMapsFlutterAndroid) {
29 | mapsImplementation.useAndroidViewSurface = true;
30 | initializeMapRenderer();
31 | }
32 | }
33 |
34 | hasSeenOnboarding = await getOnboardingStatus();
35 | runApp(const MyApp());
36 | }
37 |
38 | class MyApp extends StatelessWidget {
39 | const MyApp({super.key});
40 |
41 | @override
42 | Widget build(BuildContext context) {
43 | return MaterialApp(
44 | onGenerateTitle: (BuildContext context) {
45 | return AppLocalizations.of(context)!.appNamePascalCase;
46 | },
47 | localizationsDelegates: AppLocalizations.localizationsDelegates,
48 | supportedLocales: AppLocalizations.supportedLocales,
49 | themeMode: ThemeMode.dark,
50 | darkTheme: AppThemes.darkTheme,
51 | home: hasSeenOnboarding ? const MapPage() : const OnboardingPage(),
52 | scaffoldMessengerKey: snackbarKey,
53 | );
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/test/map_page_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_tabler_icons/flutter_tabler_icons.dart';
3 | import 'package:flutter_test/flutter_test.dart';
4 | import 'package:google_maps_flutter/google_maps_flutter.dart';
5 | import 'package:mockito/mockito.dart';
6 | import 'package:simply_qibla/l10n/app_localizations.dart';
7 | import 'package:simply_qibla/pages/map_page.dart';
8 |
9 | class MockGoogleMapController extends Mock implements GoogleMapController {}
10 |
11 | void main() {
12 | group('MapPage', () {
13 | Future pumpMapPage(WidgetTester tester) async {
14 | await tester.pumpWidget(
15 | const MaterialApp(
16 | localizationsDelegates: AppLocalizations.localizationsDelegates,
17 | supportedLocales: AppLocalizations.supportedLocales,
18 | home: MapPage(),
19 | ),
20 | );
21 |
22 | // Allow the map to render
23 | await tester.pump(const Duration(seconds: 1));
24 | }
25 |
26 | testWidgets('Toggles map type when the toggle button is pressed',
27 | (WidgetTester tester) async {
28 | await pumpMapPage(tester);
29 |
30 | // Verify initial map type is normal
31 | final GoogleMap googleMap = tester.widget(find.byType(GoogleMap));
32 | expect(googleMap.mapType, MapType.normal);
33 |
34 | // Tap the toggle button
35 | await tester.tap(find.byIcon(TablerIcons.map));
36 | await tester.pump(const Duration(
37 | milliseconds: 300)); // Add a short delay for the tap action
38 |
39 | // Verify map type is changed to hybrid
40 | final GoogleMap googleMapAfterFirstTap =
41 | tester.widget(find.byType(GoogleMap));
42 | expect(googleMapAfterFirstTap.mapType, MapType.hybrid);
43 |
44 | // Tap the toggle button again
45 | await tester.tap(find.byIcon(TablerIcons.map));
46 | await tester.pump(const Duration(
47 | milliseconds: 300)); // Add a short delay for the tap action
48 |
49 | // Verify map type is changed back to normal
50 | final GoogleMap googleMapAfterSecondTap =
51 | tester.widget(find.byType(GoogleMap));
52 | expect(googleMapAfterSecondTap.mapType, MapType.normal);
53 | });
54 | });
55 | }
56 |
--------------------------------------------------------------------------------
/lib/l10n/app_ar.arb:
--------------------------------------------------------------------------------
1 | {
2 | "@@locale": "ar",
3 | "appNamePascalCase": "سمبلي قبلة",
4 | "appAboutLegalese": "© ٢٠٢٤ TowardsIkhlaas",
5 | "changeLocationBarText": "الانتقال إلى موقع محدد؟ :)",
6 | "latitudeFieldLabel": "(أرقام 0-9) خط العرض",
7 | "longitudeFieldLabel": "(أرقام 0-9) خط الطول",
8 | "skipText": "تخطي",
9 | "doneText": "تم",
10 | "okText": "حسنا",
11 | "cancelText": "إلغاء",
12 | "clearText": "مسح",
13 | "allowText": "يسمح",
14 | "turnOnText": "تشغيل",
15 | "coordinatesInputFormTitle": "أدخل الإحداثيات",
16 | "centerConsoleCenteringText": "جارٍ تحديد موقعك...",
17 | "centerConsoleDraggingText": "ارفع لإظهار خط القبلة",
18 | "centerConsoleIdleText": "كم إلى الكعبة",
19 | "locationDisabled": "تم تعطيل الموقعك.",
20 | "locationDeniedInitial": "يرجى السماح بإذن الموقع لاستخدام هذه الميزة. نحن لا نخزن أو نبيع بياناتك. :)",
21 | "locationDeniedPermanent": "يرجى السماح بإذن الموقعك لاستخدام هذه الميزة.",
22 | "latitudeErrorText": "قيمة خط العرض غير صالحة",
23 | "longitudeErrorText": "قيمة خط الطول غير صالحة",
24 | "thankYouText": "جزاك الله خيرًا لاستخدامك هذا التطبيق!",
25 | "supportAppealText": "يتطلب تشغيل هذا التطبيق وصيانته (Google Maps API). يرجى النظر في دعم المشروع من خلال الأزرار أدناه (سيتم التبرع بالمبالغ الزائدة للجمعيات الخيرية المسجلة).",
26 | "githubButtonText": "ادعمنا على GitHub",
27 | "donateButtonText": "ادعمنا على Ko-Fi",
28 | "socialInstagramButtonText": "تابعنا على Instagram",
29 | "shareButtonText": "شارك مع الأصدقاء",
30 | "shareContentText": "السلام عليكم ورحمة الله وبركاته! تحقق من هذا التطبيق الجميل والدقيق لتحديد القبلة",
31 | "onboardingUsageTitle": "كيف يعمل هذا؟",
32 | "onboardingLocationTitle": "دع التطبيق يجد موقعك.",
33 | "onboardingSupportTitle": "ادعم مهمتنا!",
34 | "onboardingUsageBody": "السلام عليكم! لاستخدام التطبيق، ضع جهازك بشكل مسطح وقم بتدويره ليصطف مع المعالم القريبة المعروضة في الخريطة، مثل الشوارع والمباني من حولك.",
35 | "onboardingLocationBody": "تعد أذونات الموقع ضرورية لكي يعمل التطبيق بشكل مثالي، ولكنها ليست إلزامية. كن مطمئنًا، بياناتك لن يتم جمعها أو بيعها.",
36 | "onboardingSupportBody": "سمبلي قبلة خالي من الإعلانات ومفتوح المصدر. إذا أعجبك ما تراه، يرجى دعمنا من خلال الروابط داخل التطبيق. سيتم استخدام دعمك لتشغيل التطبيق، وسيتم التبرع بالفائض للجمعيات الخيرية المسجلة."
37 | }
--------------------------------------------------------------------------------
/.github/SUPPORT.md:
--------------------------------------------------------------------------------
1 | # Support and Help
2 |
3 | Need help getting started or using a project? Here's how.
4 |
5 | ## How to get help
6 |
7 | Generally, we do not use GitHub as a support forum. For any usage questions that are not specific to the project itself, please ask on [Stack Overflow](https://stackoverflow.com) instead. By doing so, you are more likely to quickly solve your problem, and you will allow anyone else with the same question to find the answer. This also allows maintainers to focus on improving the project for others.
8 |
9 | Please seek support in the following ways:
10 |
11 | 1. :book: **Read the documentation and other guides** for the project to see if you can figure it out on your own. These should be located in a root `docs/` directory. If there is an example project, explore that to learn how it works to see if you can answer your question.
12 |
13 | 1. :bulb: **Search for answers and ask questions on [Stack Overflow](https://stackoverflow.com).** This is the most appropriate place for debugging issues specific to your use of the project, or figuring out how to use the project in a specific way.
14 |
15 | 1. :memo: As a **last resort**, you may open an issue on GitHub to ask for help. However, please clearly explain what you are trying to do, and list what you have already attempted to solve the problem. Provide code samples, but **do not** attach your entire project for someone else to debug. Review our [contributing guidelines](https://github.com/TowardsIkhlaas/simply_qibla/blob/master/.github/CONTRIBUTING.md).
16 |
17 | ## What NOT to do
18 |
19 | Please **do not** do any the following:
20 |
21 | 1. :x: Do not reach out to the author or contributor on Twitter (or other social media) by tweeting or sending a direct message.
22 |
23 | 1. :x: Do not email the author or contributor.
24 |
25 | 1. :x: Do not open duplicate issues or litter an existing issue with +1's.
26 |
27 | These are not appropriate avenues for seeking help or support with an open-source project. Please follow the guidelines in the previous section. Public questions get public answers, which benefits everyone in the community. ✌️
28 |
29 | ## Customer Support
30 |
31 | As the team is just me at this point, I do not guarantee any sort of "customer support" for open-source projects. However, I will do my best.
--------------------------------------------------------------------------------
/windows/runner/flutter_window.cpp:
--------------------------------------------------------------------------------
1 | #include "flutter_window.h"
2 |
3 | #include
4 |
5 | #include "flutter/generated_plugin_registrant.h"
6 |
7 | FlutterWindow::FlutterWindow(const flutter::DartProject& project)
8 | : project_(project) {}
9 |
10 | FlutterWindow::~FlutterWindow() {}
11 |
12 | bool FlutterWindow::OnCreate() {
13 | if (!Win32Window::OnCreate()) {
14 | return false;
15 | }
16 |
17 | RECT frame = GetClientArea();
18 |
19 | // The size here must match the window dimensions to avoid unnecessary surface
20 | // creation / destruction in the startup path.
21 | flutter_controller_ = std::make_unique(
22 | frame.right - frame.left, frame.bottom - frame.top, project_);
23 | // Ensure that basic setup of the controller was successful.
24 | if (!flutter_controller_->engine() || !flutter_controller_->view()) {
25 | return false;
26 | }
27 | RegisterPlugins(flutter_controller_->engine());
28 | SetChildContent(flutter_controller_->view()->GetNativeWindow());
29 |
30 | flutter_controller_->engine()->SetNextFrameCallback([&]() {
31 | this->Show();
32 | });
33 |
34 | // Flutter can complete the first frame before the "show window" callback is
35 | // registered. The following call ensures a frame is pending to ensure the
36 | // window is shown. It is a no-op if the first frame hasn't completed yet.
37 | flutter_controller_->ForceRedraw();
38 |
39 | return true;
40 | }
41 |
42 | void FlutterWindow::OnDestroy() {
43 | if (flutter_controller_) {
44 | flutter_controller_ = nullptr;
45 | }
46 |
47 | Win32Window::OnDestroy();
48 | }
49 |
50 | LRESULT
51 | FlutterWindow::MessageHandler(HWND hwnd, UINT const message,
52 | WPARAM const wparam,
53 | LPARAM const lparam) noexcept {
54 | // Give Flutter, including plugins, an opportunity to handle window messages.
55 | if (flutter_controller_) {
56 | std::optional result =
57 | flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam,
58 | lparam);
59 | if (result) {
60 | return *result;
61 | }
62 | }
63 |
64 | switch (message) {
65 | case WM_FONTCHANGE:
66 | flutter_controller_->engine()->ReloadSystemFonts();
67 | break;
68 | }
69 |
70 | return Win32Window::MessageHandler(hwnd, message, wparam, lparam);
71 | }
72 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/BUG-REPORT.yml:
--------------------------------------------------------------------------------
1 | name: Bug Report
2 | description: File a bug report.
3 | title: "[Bug]: "
4 | labels: ["bug", "triage"]
5 | assignees:
6 | - ahmd-sh
7 | body:
8 | - type: markdown
9 | attributes:
10 | value: |
11 | Thanks for taking the time to fill out this bug report!
12 | - type: input
13 | id: contact
14 | attributes:
15 | label: Contact Details
16 | description: How can we get in touch with you if we need more info?
17 | placeholder: ex. email@example.com
18 | validations:
19 | required: false
20 | - type: textarea
21 | id: what-happened
22 | attributes:
23 | label: What happened?
24 | description: ALSO tell us, what did you expect to happen?
25 | placeholder: Tell us what you see!
26 | value: "The app did not load! I expected the app to load."
27 | validations:
28 | required: true
29 | - type: textarea
30 | id: version
31 | attributes:
32 | label: What version of SimplyQibla are you running?
33 | description: You can see it by tapping the info button on the top right of the SimplyQibla app.
34 | placeholder: ex. 1.1.2
35 | value: "1.1.2"
36 | validations:
37 | required: true
38 | - type: dropdown
39 | id: browsers
40 | attributes:
41 | label: What platform(s) are you seeing the problem on?
42 | multiple: true
43 | options:
44 | - Android
45 | - iOS
46 | - iPadOS
47 | - type: textarea
48 | attributes:
49 | label: Screenshots
50 | description: |
51 | Attach screenshots here if appropriate.
52 |
53 | Tip: You can attach images by clicking this area to highlight it and then dragging files in.
54 | validations:
55 | required: false
56 | - type: textarea
57 | id: logs
58 | attributes:
59 | label: Relevant log output
60 | description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
61 | render: shell
62 | - type: checkboxes
63 | id: terms
64 | attributes:
65 | label: Code of Conduct
66 | description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/TowardsIkhlaas/simply_qibla/blob/master/.github/CODE_OF_CONDUCT.md).
67 | options:
68 | - label: I agree to follow this project's Code of Conduct
69 | required: true
70 |
--------------------------------------------------------------------------------
/lib/widgets/coordinates_form_bar.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_tabler_icons/flutter_tabler_icons.dart';
3 | import 'package:google_maps_flutter/google_maps_flutter.dart';
4 | import 'package:simply_qibla/l10n/app_localizations.dart';
5 | import 'package:simply_qibla/styles/style.dart';
6 | import 'package:simply_qibla/widgets/coordinates_input_form.dart';
7 |
8 | class CoordinatesFormBar extends StatefulWidget {
9 | final Function(LatLng) onCoordinatesSubmit;
10 |
11 | const CoordinatesFormBar({
12 | required this.onCoordinatesSubmit,
13 | super.key,
14 | });
15 |
16 | @override
17 | State createState() => _CoordinatesFormBarState();
18 | }
19 |
20 | class _CoordinatesFormBarState extends State {
21 | final GlobalKey _formKey = GlobalKey();
22 | TextEditingController latitudeController = TextEditingController();
23 | TextEditingController longitudeController = TextEditingController();
24 |
25 | @override
26 | void dispose() {
27 | latitudeController.dispose();
28 | longitudeController.dispose();
29 | super.dispose();
30 | }
31 |
32 | @override
33 | Widget build(BuildContext context) {
34 | void showLatLngDialog(BuildContext context) async {
35 | showDialog(
36 | context: context,
37 | builder: (BuildContext context) => CoordinatesInputForm(
38 | formKey: _formKey,
39 | latitudeController: latitudeController,
40 | longitudeController: longitudeController,
41 | onCoordinatesSubmit: widget.onCoordinatesSubmit,
42 | ));
43 | }
44 |
45 | return Container(
46 | padding: const EdgeInsets.all(AppPadding.standard),
47 | child: Row(
48 | mainAxisAlignment: MainAxisAlignment.center,
49 | children: [
50 | Expanded(
51 | child: SizedBox(
52 | height: AppDimensions.pillBarSize,
53 | child: ElevatedButton.icon(
54 | icon: const Icon(
55 | TablerIcons.search,
56 | size: AppDimensions.iconSizeSm,
57 | ),
58 | label:
59 | Text(AppLocalizations.of(context)!.changeLocationBarText),
60 | onPressed: () => showLatLngDialog(context),
61 | ),
62 | ),
63 | ),
64 | ],
65 | ),
66 | );
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/lib/l10n/app_id.arb:
--------------------------------------------------------------------------------
1 | {
2 | "@@locale": "id",
3 | "appNamePascalCase": "SimplyQibla",
4 | "appAboutLegalese": "© 2024 TowardsIkhlaas",
5 | "changeLocationBarText": "Ingin langsung ke lokasi tertentu? :)",
6 | "latitudeFieldLabel": "Lintang",
7 | "longitudeFieldLabel": "Bujur",
8 | "skipText": "Lewati",
9 | "doneText": "Selesai",
10 | "okText": "OK",
11 | "cancelText": "Batal",
12 | "clearText": "Hapus",
13 | "allowText": "IZINKAN",
14 | "turnOnText": "NYALAKAN",
15 | "coordinatesInputFormTitle": "Masukkan Koordinat",
16 | "centerConsoleCenteringText": "Mencari lokasi Anda...",
17 | "centerConsoleDraggingText": "Angkat untuk menampilkan garis kiblat",
18 | "centerConsoleIdleText": "km ke Ka'bah",
19 | "locationDisabled": "Layanan lokasi Anda dinonaktifkan.",
20 | "locationDeniedInitial": "Silakan izinkan akses lokasi untuk menggunakan fitur ini. Kami tidak menyimpan atau menjual data Anda. :)",
21 | "locationDeniedPermanent": "Silakan izinkan akses lokasi untuk menggunakan fitur ini.",
22 | "latitudeErrorText": "Nilai lintang tidak valid",
23 | "longitudeErrorText": "Nilai bujur tidak valid",
24 | "thankYouText": "JazakAllahu Khayran telah menggunakan aplikasi ini!",
25 | "supportAppealText": "Aplikasi ini memerlukan biaya untuk dijalankan dan dipelihara (Google Maps API). Mohon pertimbangkan untuk mendukung proyek ini melalui tombol di bawah (dana lebih akan disumbangkan ke badan amal terdaftar).",
26 | "githubButtonText": "Dukung kami di GitHub",
27 | "donateButtonText": "Dukung kami di Ko-Fi",
28 | "socialInstagramButtonText": "Ikuti kami di Instagram",
29 | "shareButtonText": "Bagikan dengan Teman",
30 | "shareContentText": "Assalamualaikum warahmatullahi wabarakatuh! Coba aplikasi kiblat yang indah dan akurat ini",
31 | "onboardingUsageTitle": "Bagaimana ini bekerja?",
32 | "onboardingLocationTitle": "Biarkan aplikasi menemukan Anda.",
33 | "onboardingSupportTitle": "Dukung misi kami!",
34 | "onboardingUsageBody": "Salaam! Untuk menggunakan aplikasi, pegang perangkat Anda dalam posisi datar dan putar untuk menyelaraskan dengan landmark di peta, seperti jalan dan bangunan di sekitar Anda.",
35 | "onboardingLocationBody": "Izin lokasi diperlukan agar aplikasi berfungsi dengan optimal, tetapi tidak wajib. Tenang, data Anda tidak dikumpulkan atau dijual.",
36 | "onboardingSupportBody": "SimplyQibla bebas iklan dan bersumber terbuka. Jika Anda menyukai aplikasi ini, mohon dukung melalui tautan dalam aplikasi. Dukungan Anda akan digunakan untuk menjalankan aplikasi, dan kelebihannya akan disumbangkan ke badan amal terdaftar."
37 | }
--------------------------------------------------------------------------------
/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 | def keystoreProperties = new Properties()
26 | def keystorePropertiesFile = rootProject.file('key.properties')
27 | if (keystorePropertiesFile.exists()) {
28 | keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
29 | }
30 |
31 | android {
32 | namespace "com.towardsikhlaas.simplyqibla"
33 | compileSdk flutter.compileSdkVersion
34 | ndkVersion "27.0.12077973"
35 |
36 | compileOptions {
37 | sourceCompatibility JavaVersion.VERSION_1_8
38 | targetCompatibility JavaVersion.VERSION_1_8
39 | }
40 |
41 | kotlinOptions {
42 | jvmTarget = '1.8'
43 | }
44 |
45 | sourceSets {
46 | main.java.srcDirs += 'src/main/kotlin'
47 | }
48 |
49 | defaultConfig {
50 | applicationId "com.towardsikhlaas.simplyqibla"
51 | minSdkVersion flutter.minSdkVersion
52 | targetSdk flutter.targetSdkVersion
53 | versionCode flutterVersionCode.toInteger()
54 | versionName flutterVersionName
55 |
56 | if (keystorePropertiesFile.exists()) {
57 | keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
58 | resValue "string", "google_maps_api_key_android", keystoreProperties['GOOGLE_MAPS_API_KEY_ANDROID']
59 | }
60 | }
61 |
62 | signingConfigs {
63 | release {
64 | keyAlias keystoreProperties['keyAlias']
65 | keyPassword keystoreProperties['keyPassword']
66 | storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
67 | storePassword keystoreProperties['storePassword']
68 | }
69 | }
70 |
71 | buildTypes {
72 | release {
73 | signingConfig signingConfigs.release
74 | }
75 | }
76 | }
77 |
78 | flutter {
79 | source '../..'
80 | }
81 |
82 | dependencies {}
83 |
--------------------------------------------------------------------------------
/lib/l10n/app_ms.arb:
--------------------------------------------------------------------------------
1 | {
2 | "@@locale": "ms",
3 | "appNamePascalCase": "SimplyQibla",
4 | "appAboutLegalese": "© 2024 TowardsIkhlaas",
5 | "changeLocationBarText": "Mahu pergi ke lokasi tertentu? :)",
6 | "latitudeFieldLabel": "Latitud",
7 | "longitudeFieldLabel": "Longitud",
8 | "skipText": "Langkau",
9 | "doneText": "Selesai",
10 | "okText": "OK",
11 | "cancelText": "Batal",
12 | "clearText": "Kosongkan",
13 | "allowText": "IZINKAN",
14 | "turnOnText": "HIDUPKAN",
15 | "coordinatesInputFormTitle": "Masukkan Koordinat",
16 | "centerConsoleCenteringText": "Mencari lokasi anda...",
17 | "centerConsoleDraggingText": "Angkat untuk tunjukkan garis Qibla",
18 | "centerConsoleIdleText": "km ke Kaabah",
19 | "locationDisabled": "Lokasi anda dimatikan.",
20 | "locationDeniedInitial": "Sila benarkan kebenaran lokasi untuk menggunakan ciri ini. Kami tidak menyimpan atau menjual data anda. :)",
21 | "locationDeniedPermanent": "Sila benarkan kebenaran lokasi untuk menggunakan ciri ini.",
22 | "latitudeErrorText": "Nilai latitud tidak sah",
23 | "longitudeErrorText": "Nilai longitud tidak sah",
24 | "thankYouText": "JazakAllahu Khayran kerana menggunakan aplikasi ini!",
25 | "supportAppealText": "Aplikasi ini memerlukan kos untuk dijalankan dan diselenggara (Google Maps API). Sila pertimbangkan untuk menyokong projek ini melalui butang di bawah (lebih jumlah akan disumbangkan kepada badan amal berdaftar).",
26 | "githubButtonText": "Sokong kami di GitHub",
27 | "donateButtonText": "Sokong kami di Ko-Fi",
28 | "socialInstagramButtonText": "Ikuti kami di Instagram",
29 | "shareButtonText": "Kongsi dengan Rakan",
30 | "shareContentText": "As salaam alaykum warahmatullahi wabarakatuh! Lihat aplikasi Qibla yang indah dan tepat ini",
31 | "onboardingUsageTitle": "Bagaimana ia berfungsi?",
32 | "onboardingLocationTitle": "Biarkan aplikasi mencari anda.",
33 | "onboardingSupportTitle": "Sokong misi kami!",
34 | "onboardingUsageBody": "Salaam! Untuk menggunakan aplikasi ini, pegang peranti anda secara mendatar dan pusingkan untuk menyelaraskan dengan mercu tanda berhampiran yang ditunjukkan pada peta, seperti jalan dan bangunan di sekitar anda.",
35 | "onboardingLocationBody": "Kebenaran lokasi diperlukan agar aplikasi berfungsi dengan optimum, tetapi tidak wajib. Anda yakin, data anda tidak dikumpul atau dijual.",
36 | "onboardingSupportBody": "SimplyQibla tiada iklan dan sumber terbuka. Jika anda suka, sila sokong kami melalui pautan dalam aplikasi. Sokongan anda akan digunakan untuk menjalankan aplikasi, dan lebihan akan disumbangkan kepada badan amal berdaftar."
37 | }
--------------------------------------------------------------------------------
/lib/l10n/app_pt.arb:
--------------------------------------------------------------------------------
1 | {
2 | "@@locale": "pt",
3 | "appNamePascalCase": "SimplyQibla",
4 | "appAboutLegalese": "© 2024 TowardsIkhlaas",
5 | "changeLocationBarText": "Pular para uma localização específica? :)",
6 | "latitudeFieldLabel": "Latitude",
7 | "longitudeFieldLabel": "Longitude",
8 | "skipText": "Pular",
9 | "doneText": "Concluído",
10 | "okText": "OK",
11 | "cancelText": "Cancelar",
12 | "clearText": "Limpar",
13 | "allowText": "PERMITIR",
14 | "turnOnText": "ATIVAR",
15 | "coordinatesInputFormTitle": "Insira as Coordenadas",
16 | "centerConsoleCenteringText": "Localizando você...",
17 | "centerConsoleDraggingText": "Levante para mostrar a linha da Qibla",
18 | "centerConsoleIdleText": "km até a Kaaba",
19 | "locationDisabled": "Sua localização está desativada.",
20 | "locationDeniedInitial": "Por favor, permita a permissão de localização para usar este recurso. Não armazenamos nem vendemos seus dados. :)",
21 | "locationDeniedPermanent": "Por favor, permita a permissão de localização para usar este recurso.",
22 | "latitudeErrorText": "Valor de latitude inválido",
23 | "longitudeErrorText": "Valor de longitude inválido",
24 | "thankYouText": "JazakAllahu Khayran por usar este aplicativo!",
25 | "supportAppealText": "Este aplicativo tem custos para operar e manter (Google Maps API). Considere apoiar o projeto pelos botões abaixo (valores excedentes serão doados a instituições de caridade registradas).",
26 | "githubButtonText": "Apoie-nos no GitHub",
27 | "donateButtonText": "Apoie-nos no Ko-Fi",
28 | "socialInstagramButtonText": "Siga-nos no Instagram",
29 | "shareButtonText": "Compartilhar com amigos",
30 | "shareContentText": "As-salaamu alaykum warahmatullahi wabarakatuh! Confira este lindo e preciso aplicativo de Qibla",
31 | "onboardingUsageTitle": "Como isso funciona?",
32 | "onboardingLocationTitle": "Deixe o aplicativo encontrar você.",
33 | "onboardingSupportTitle": "Apoie nossa missão!",
34 | "onboardingUsageBody": "Salaam! Para usar o aplicativo, mantenha seu dispositivo plano e gire-o para alinhar com os marcos próximos mostrados no mapa, como ruas e edifícios ao seu redor.",
35 | "onboardingLocationBody": "As permissões de localização são necessárias para que o aplicativo funcione de forma ideal, mas não são obrigatórias. Fique tranquilo, seus dados não são coletados nem vendidos.",
36 | "onboardingSupportBody": "SimplyQibla é livre de anúncios e open-source. Se você gostou, apoie-nos pelos links do aplicativo. Seu apoio será usado para manter o aplicativo, e o excedente será doado para instituições de caridade registradas."
37 | }
--------------------------------------------------------------------------------
/lib/l10n/app_pt_BR.arb:
--------------------------------------------------------------------------------
1 | {
2 | "@@locale": "pt_BR",
3 | "appNamePascalCase": "SimplyQibla",
4 | "appAboutLegalese": "© 2024 TowardsIkhlaas",
5 | "changeLocationBarText": "Pular para uma localização específica? :)",
6 | "latitudeFieldLabel": "Latitude",
7 | "longitudeFieldLabel": "Longitude",
8 | "skipText": "Pular",
9 | "doneText": "Concluído",
10 | "okText": "OK",
11 | "cancelText": "Cancelar",
12 | "clearText": "Limpar",
13 | "allowText": "PERMITIR",
14 | "turnOnText": "ATIVAR",
15 | "coordinatesInputFormTitle": "Insira as Coordenadas",
16 | "centerConsoleCenteringText": "Localizando você...",
17 | "centerConsoleDraggingText": "Levante para mostrar a linha da Qibla",
18 | "centerConsoleIdleText": "km até a Kaaba",
19 | "locationDisabled": "Sua localização está desativada.",
20 | "locationDeniedInitial": "Por favor, permita a permissão de localização para usar este recurso. Não armazenamos nem vendemos seus dados. :)",
21 | "locationDeniedPermanent": "Por favor, permita a permissão de localização para usar este recurso.",
22 | "latitudeErrorText": "Valor de latitude inválido",
23 | "longitudeErrorText": "Valor de longitude inválido",
24 | "thankYouText": "JazakAllahu Khayran por usar este aplicativo!",
25 | "supportAppealText": "Este aplicativo tem custos para operar e manter (Google Maps API). Considere apoiar o projeto pelos botões abaixo (valores excedentes serão doados a instituições de caridade registradas).",
26 | "githubButtonText": "Apoie-nos no GitHub",
27 | "donateButtonText": "Apoie-nos no Ko-Fi",
28 | "socialInstagramButtonText": "Siga-nos no Instagram",
29 | "shareButtonText": "Compartilhar com amigos",
30 | "shareContentText": "As-salaamu alaykum warahmatullahi wabarakatuh! Confira este lindo e preciso aplicativo de Qibla",
31 | "onboardingUsageTitle": "Como isso funciona?",
32 | "onboardingLocationTitle": "Deixe o aplicativo encontrar você.",
33 | "onboardingSupportTitle": "Apoie nossa missão!",
34 | "onboardingUsageBody": "Salaam! Para usar o aplicativo, mantenha seu dispositivo plano e gire-o para alinhar com os marcos próximos mostrados no mapa, como ruas e edifícios ao seu redor.",
35 | "onboardingLocationBody": "As permissões de localização são necessárias para que o aplicativo funcione de forma ideal, mas não são obrigatórias. Fique tranquilo, seus dados não são coletados nem vendidos.",
36 | "onboardingSupportBody": "SimplyQibla é livre de anúncios e open-source. Se você gostou, apoie-nos pelos links do aplicativo. Seu apoio será usado para manter o aplicativo, e o excedente será doado para instituições de caridade registradas."
37 | }
--------------------------------------------------------------------------------
/lib/l10n/app_pt_PT.arb:
--------------------------------------------------------------------------------
1 | {
2 | "@@locale": "pt_PT",
3 | "appNamePascalCase": "SimplyQibla",
4 | "appAboutLegalese": "© 2024 TowardsIkhlaas",
5 | "changeLocationBarText": "Ir para uma localização específica? :)",
6 | "latitudeFieldLabel": "Latitude",
7 | "longitudeFieldLabel": "Longitude",
8 | "skipText": "Saltar",
9 | "doneText": "Concluído",
10 | "okText": "OK",
11 | "cancelText": "Cancelar",
12 | "clearText": "Limpar",
13 | "allowText": "PERMITIR",
14 | "turnOnText": "LIGAR",
15 | "coordinatesInputFormTitle": "Introduzir Coordenadas",
16 | "centerConsoleCenteringText": "A localizar...",
17 | "centerConsoleDraggingText": "Levante para mostrar a linha da Qibla",
18 | "centerConsoleIdleText": "km até à Kaaba",
19 | "locationDisabled": "A sua localização está desativada.",
20 | "locationDeniedInitial": "Por favor, permita a permissão de localização para usar esta funcionalidade. Não guardamos nem vendemos os seus dados. :)",
21 | "locationDeniedPermanent": "Por favor, permita a permissão de localização para usar esta funcionalidade.",
22 | "latitudeErrorText": "Valor de latitude inválido",
23 | "longitudeErrorText": "Valor de longitude inválido",
24 | "thankYouText": "JazakAllahu Khayran por usar esta aplicação!",
25 | "supportAppealText": "Esta aplicação tem custos de funcionamento e manutenção (Google Maps API). Considere apoiar o projeto através dos botões abaixo (valores excedentes serão doados a instituições de caridade registadas).",
26 | "githubButtonText": "Apoie-nos no GitHub",
27 | "donateButtonText": "Apoie-nos no Ko-Fi",
28 | "socialInstagramButtonText": "Siga-nos no Instagram",
29 | "shareButtonText": "Partilhar com Amigos",
30 | "shareContentText": "As salaam alaykum warahmatullahi wabarakatuh! Veja esta aplicação Qibla bonita e precisa",
31 | "onboardingUsageTitle": "Como funciona?",
32 | "onboardingLocationTitle": "Deixe a aplicação encontrar a sua localização.",
33 | "onboardingSupportTitle": "Apoie a nossa missão!",
34 | "onboardingUsageBody": "Salaam! Para usar a aplicação, mantenha o dispositivo plano e rode-o para alinhar com os pontos de referência no mapa, como ruas e edifícios ao seu redor.",
35 | "onboardingLocationBody": "As permissões de localização são necessárias para o funcionamento ideal da aplicação, mas não obrigatórias. Garantimos que os seus dados não são recolhidos nem vendidos.",
36 | "onboardingSupportBody": "SimplyQibla é livre de anúncios e de código aberto. Se gosta da aplicação, apoie-nos através dos links na aplicação. O seu apoio será usado para manter a aplicação, e os valores excedentes serão doados a instituições de caridade registadas."
37 | }
--------------------------------------------------------------------------------
/lib/widgets/center_console.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:geolocator/geolocator.dart';
3 | import 'package:google_maps_flutter/google_maps_flutter.dart';
4 | import 'package:intl/intl.dart';
5 | import 'package:simply_qibla/constants/constants.dart';
6 | import 'package:simply_qibla/l10n/app_localizations.dart';
7 | import 'package:simply_qibla/styles/style.dart';
8 |
9 | class CenterConsole extends StatelessWidget {
10 | final CenterConsoleState state;
11 | final CameraPosition currentCameraPosition;
12 | final bool isCameraMoving;
13 |
14 | const CenterConsole({
15 | required this.state,
16 | required this.currentCameraPosition,
17 | required this.isCameraMoving,
18 | super.key,
19 | });
20 |
21 | @override
22 | Widget build(BuildContext context) {
23 | Color consoleColor;
24 | String text;
25 | int distanceAway = calculateDistance(
26 | currentCameraPosition.target, MapConstants.qiblaPosition);
27 | String formattedDistance =
28 | NumberFormat.decimalPattern().format(distanceAway);
29 |
30 | switch (state) {
31 | case CenterConsoleState.centering:
32 | consoleColor = Colors.green;
33 | text = AppLocalizations.of(context)!.centerConsoleCenteringText;
34 | break;
35 | case CenterConsoleState.dragging:
36 | consoleColor = Colors.blue;
37 | text = AppLocalizations.of(context)!.centerConsoleDraggingText;
38 | break;
39 | case CenterConsoleState.idle:
40 | consoleColor = Theme.of(context).colorScheme.primaryContainer;
41 | text =
42 | '$formattedDistance ${AppLocalizations.of(context)!.centerConsoleIdleText}';
43 | break;
44 | }
45 |
46 | return Container(
47 | decoration: BoxDecoration(
48 | borderRadius: BorderRadius.circular(AppDimensions.borderRadiusLg),
49 | border: Border.all(
50 | color: consoleColor,
51 | width: 1,
52 | ),
53 | boxShadow: [
54 | BoxShadow(
55 | color: consoleColor.withValues(alpha: AppStyles.shadowOpacity),
56 | ),
57 | ],
58 | ),
59 | child: Center(
60 | child: Text(
61 | text,
62 | textAlign: TextAlign.center,
63 | style: TextStyle(
64 | color: consoleColor,
65 | ),
66 | ),
67 | ),
68 | );
69 | }
70 |
71 | int calculateDistance(LatLng start, LatLng end) {
72 | double distance = Geolocator.distanceBetween(
73 | start.latitude, start.longitude, end.latitude, end.longitude);
74 | int distanceInKm = (distance / 1000).round();
75 | return distanceInKm;
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/lib/l10n/app_de.arb:
--------------------------------------------------------------------------------
1 | {
2 | "@@locale": "de",
3 | "appNamePascalCase": "SimplyQibla",
4 | "appAboutLegalese": "© 2024 TowardsIkhlaas",
5 | "changeLocationBarText": "Zu einem bestimmten Ort springen? :)",
6 | "latitudeFieldLabel": "Breitengrad",
7 | "longitudeFieldLabel": "Längengrad",
8 | "skipText": "Überspringen",
9 | "doneText": "Fertig",
10 | "okText": "OK",
11 | "cancelText": "Abbrechen",
12 | "clearText": "Löschen",
13 | "allowText": "ZULASSEN",
14 | "turnOnText": "AKTIVIEREN",
15 | "coordinatesInputFormTitle": "Koordinaten eingeben",
16 | "centerConsoleCenteringText": "Standort wird ermittelt...",
17 | "centerConsoleDraggingText": "Anheben, um die Qibla-Linie anzuzeigen",
18 | "centerConsoleIdleText": "km bis zur Kaaba",
19 | "locationDisabled": "Ihr Standort ist deaktiviert.",
20 | "locationDeniedInitial": "Bitte erlauben Sie die Standortberechtigung, um diese Funktion zu nutzen. Wir speichern oder verkaufen Ihre Daten nicht. :)",
21 | "locationDeniedPermanent": "Bitte erlauben Sie die Standortberechtigung, um diese Funktion zu nutzen.",
22 | "latitudeErrorText": "Ungültiger Breitengrad-Wert",
23 | "longitudeErrorText": "Ungültiger Längengrad-Wert",
24 | "thankYouText": "JazakAllahu Khayran für die Nutzung dieser App!",
25 | "supportAppealText": "Diese App verursacht Kosten für Betrieb und Wartung (Google Maps API). Bitte unterstützen Sie das Projekt über die untenstehenden Buttons (überschüssige Beträge werden an registrierte Wohltätigkeitsorganisationen gespendet).",
26 | "githubButtonText": "Support auf GitHub",
27 | "donateButtonText": "Support auf Ko-Fi",
28 | "socialInstagramButtonText": "Folgen Sie uns auf Instagram",
29 | "shareButtonText": "Mit Freunden teilen",
30 | "shareContentText": "As-salamu alaykum wa rahmatullahi wa barakatuh! Schau dir diese schöne und genaue Qibla-App an",
31 | "onboardingUsageTitle": "Wie funktioniert das?",
32 | "onboardingLocationTitle": "Lassen Sie die App Ihren Standort finden.",
33 | "onboardingSupportTitle": "Unterstützen Sie unsere Mission!",
34 | "onboardingUsageBody": "Salaam! Um die App zu nutzen, halten Sie Ihr Gerät flach und drehen Sie es, um sich an nahegelegenen Orientierungspunkten auf der Karte auszurichten, wie Straßen und Gebäuden in Ihrer Umgebung.",
35 | "onboardingLocationBody": "Standortberechtigungen sind notwendig, damit die App optimal funktioniert, aber nicht zwingend erforderlich. Seien Sie versichert, Ihre Daten werden weder gesammelt noch verkauft.",
36 | "onboardingSupportBody": "SimplyQibla ist werbefrei und Open-Source. Wenn Ihnen gefällt, was Sie sehen, unterstützen Sie uns bitte über die In-App-Links. Ihre Unterstützung wird verwendet, um die App zu betreiben, und Überschüsse werden an registrierte Wohltätigkeitsorganisationen gespendet."
37 | }
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
18 |
22 |
26 |
27 |
28 |
29 |
30 |
31 |
35 |
37 |
40 |
41 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/lib/l10n/app_fr.arb:
--------------------------------------------------------------------------------
1 | {
2 | "@@locale": "fr",
3 | "appNamePascalCase": "SimplyQibla",
4 | "appAboutLegalese": "© 2024 TowardsIkhlaas",
5 | "changeLocationBarText": "Aller à un lieu spécifique ? :)",
6 | "latitudeFieldLabel": "Latitude",
7 | "longitudeFieldLabel": "Longitude",
8 | "skipText": "Ignorer",
9 | "doneText": "Terminé",
10 | "okText": "OK",
11 | "cancelText": "Annuler",
12 | "clearText": "Effacer",
13 | "allowText": "AUTORISER",
14 | "turnOnText": "ACTIVER",
15 | "coordinatesInputFormTitle": "Entrer les coordonnées",
16 | "centerConsoleCenteringText": "Localisation en cours...",
17 | "centerConsoleDraggingText": "Soulevez pour afficher la ligne de Qibla",
18 | "centerConsoleIdleText": "km jusqu'à la Kaaba",
19 | "locationDisabled": "Votre localisation est désactivée.",
20 | "locationDeniedInitial": "Veuillez autoriser la permission de localisation pour utiliser cette fonctionnalité. Nous ne stockons ni ne vendons vos données. :)",
21 | "locationDeniedPermanent": "Veuillez autoriser la permission de localisation pour utiliser cette fonctionnalité.",
22 | "latitudeErrorText": "Valeur de latitude invalide",
23 | "longitudeErrorText": "Valeur de longitude invalide",
24 | "thankYouText": "JazakAllahu Khayran d'utiliser cette application !",
25 | "supportAppealText": "Cette application a des coûts de fonctionnement et de maintenance (API Google Maps). Veuillez envisager de soutenir le projet via les boutons ci-dessous (les montants excédentaires seront donnés à des associations caritatives enregistrées).",
26 | "githubButtonText": "Soutenez-nous sur GitHub",
27 | "donateButtonText": "Soutenez-nous sur Ko-Fi",
28 | "socialInstagramButtonText": "Suivez-nous sur Instagram",
29 | "shareButtonText": "Partager avec des amis",
30 | "shareContentText": "As salam alaykum warahmatullahi wabarakatuh ! Découvrez cette belle application de Qibla, précise et pratique.",
31 | "onboardingUsageTitle": "Comment ça marche ?",
32 | "onboardingLocationTitle": "Laissez l'application vous localiser.",
33 | "onboardingSupportTitle": "Soutenez notre mission !",
34 | "onboardingUsageBody": "Salaam ! Pour utiliser l'application, tenez votre appareil à plat et faites-le pivoter pour l'aligner avec les points de repère proches affichés sur la carte, tels que les rues et les bâtiments autour de vous.",
35 | "onboardingLocationBody": "Les autorisations de localisation sont nécessaires pour que l'application fonctionne de manière optimale, mais ne sont pas obligatoires. Soyez rassurés, vos données ne sont ni collectées ni vendues.",
36 | "onboardingSupportBody": "SimplyQibla est sans publicité et open-source. Si vous aimez ce que vous voyez, veuillez nous soutenir via les liens dans l'application. Votre soutien servira à faire fonctionner l'application, et les excédents seront donnés à des œuvres caritatives enregistrées."
37 | }
--------------------------------------------------------------------------------
/linux/flutter/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | # This file controls Flutter-level build steps. It should not be edited.
2 | cmake_minimum_required(VERSION 3.10)
3 |
4 | set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
5 |
6 | # Configuration provided via flutter tool.
7 | include(${EPHEMERAL_DIR}/generated_config.cmake)
8 |
9 | # TODO: Move the rest of this into files in ephemeral. See
10 | # https://github.com/flutter/flutter/issues/57146.
11 |
12 | # Serves the same purpose as list(TRANSFORM ... PREPEND ...),
13 | # which isn't available in 3.10.
14 | function(list_prepend LIST_NAME PREFIX)
15 | set(NEW_LIST "")
16 | foreach(element ${${LIST_NAME}})
17 | list(APPEND NEW_LIST "${PREFIX}${element}")
18 | endforeach(element)
19 | set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE)
20 | endfunction()
21 |
22 | # === Flutter Library ===
23 | # System-level dependencies.
24 | find_package(PkgConfig REQUIRED)
25 | pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
26 | pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0)
27 | pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0)
28 |
29 | set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so")
30 |
31 | # Published to parent scope for install step.
32 | set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)
33 | set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE)
34 | set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE)
35 | set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE)
36 |
37 | list(APPEND FLUTTER_LIBRARY_HEADERS
38 | "fl_basic_message_channel.h"
39 | "fl_binary_codec.h"
40 | "fl_binary_messenger.h"
41 | "fl_dart_project.h"
42 | "fl_engine.h"
43 | "fl_json_message_codec.h"
44 | "fl_json_method_codec.h"
45 | "fl_message_codec.h"
46 | "fl_method_call.h"
47 | "fl_method_channel.h"
48 | "fl_method_codec.h"
49 | "fl_method_response.h"
50 | "fl_plugin_registrar.h"
51 | "fl_plugin_registry.h"
52 | "fl_standard_message_codec.h"
53 | "fl_standard_method_codec.h"
54 | "fl_string_codec.h"
55 | "fl_value.h"
56 | "fl_view.h"
57 | "flutter_linux.h"
58 | )
59 | list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/")
60 | add_library(flutter INTERFACE)
61 | target_include_directories(flutter INTERFACE
62 | "${EPHEMERAL_DIR}"
63 | )
64 | target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}")
65 | target_link_libraries(flutter INTERFACE
66 | PkgConfig::GTK
67 | PkgConfig::GLIB
68 | PkgConfig::GIO
69 | )
70 | add_dependencies(flutter flutter_assemble)
71 |
72 | # === Flutter tool backend ===
73 | # _phony_ is a non-existent file to force this command to run every time,
74 | # since currently there's no way to get a full input/output list from the
75 | # flutter tool.
76 | add_custom_command(
77 | OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
78 | ${CMAKE_CURRENT_BINARY_DIR}/_phony_
79 | COMMAND ${CMAKE_COMMAND} -E env
80 | ${FLUTTER_TOOL_ENVIRONMENT}
81 | "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh"
82 | ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE}
83 | VERBATIM
84 | )
85 | add_custom_target(flutter_assemble DEPENDS
86 | "${FLUTTER_LIBRARY}"
87 | ${FLUTTER_LIBRARY_HEADERS}
88 | )
89 |
--------------------------------------------------------------------------------
/.github/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as
6 | contributors and maintainers pledge to making participation in our project and
7 | our community a harassment-free experience for everyone, regardless of age, body
8 | size, disability, ethnicity, sex characteristics, gender identity and expression,
9 | level of experience, education, socio-economic status, nationality, personal
10 | appearance, race, religion, or sexual identity and orientation.
11 |
12 | ## Our Standards
13 |
14 | Examples of behavior that contributes to creating a positive environment
15 | include:
16 |
17 | * Using welcoming and inclusive language
18 | * Being respectful of differing viewpoints and experiences
19 | * Gracefully accepting constructive criticism
20 | * Focusing on what is best for the community
21 | * Showing empathy towards other community members
22 |
23 | Examples of unacceptable behavior by participants include:
24 |
25 | * The use of sexualized language or imagery and unwelcome sexual attention or
26 | advances
27 | * Trolling, insulting/derogatory comments, and personal or political attacks
28 | * Public or private harassment
29 | * Publishing others' private information, such as a physical or electronic
30 | address, without explicit permission
31 | * Other conduct which could reasonably be considered inappropriate in a
32 | professional setting
33 |
34 | ## Our Responsibilities
35 |
36 | Project maintainers are responsible for clarifying the standards of acceptable
37 | behavior and are expected to take appropriate and fair corrective action in
38 | response to any instances of unacceptable behavior.
39 |
40 | Project maintainers have the right and responsibility to remove, edit, or
41 | reject comments, commits, code, wiki edits, issues, and other contributions
42 | that are not aligned to this Code of Conduct, or to ban temporarily or
43 | permanently any contributor for other behaviors that they deem inappropriate,
44 | threatening, offensive, or harmful.
45 |
46 | ## Scope
47 |
48 | This Code of Conduct applies both within project spaces and in public spaces
49 | when an individual is representing the project or its community. Examples of
50 | representing a project or community include using an official project e-mail
51 | address, posting via an official social media account, or acting as an appointed
52 | representative at an online or offline event. Representation of a project may be
53 | further defined and clarified by project maintainers.
54 |
55 | ## Enforcement
56 |
57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
58 | reported by contacting the project team at **towardsikhlaas+oss@gmail.com**. All
59 | complaints will be reviewed and investigated and will result in a response that
60 | is deemed necessary and appropriate to the circumstances. The project team is
61 | obligated to maintain confidentiality with regard to the reporter of an incident.
62 | Further details of specific enforcement policies may be posted separately.
63 |
64 | Project maintainers who do not follow or enforce the Code of Conduct in good
65 | faith may face temporary or permanent repercussions as determined by other
66 | members of the project's leadership.
67 |
68 | ## Attribution
69 |
70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72 |
73 | [homepage]: https://www.contributor-covenant.org
74 |
75 | For answers to common questions about this code of conduct, see
76 | https://www.contributor-covenant.org/faq
77 |
--------------------------------------------------------------------------------
/windows/runner/Runner.rc:
--------------------------------------------------------------------------------
1 | // Microsoft Visual C++ generated resource script.
2 | //
3 | #pragma code_page(65001)
4 | #include "resource.h"
5 |
6 | #define APSTUDIO_READONLY_SYMBOLS
7 | /////////////////////////////////////////////////////////////////////////////
8 | //
9 | // Generated from the TEXTINCLUDE 2 resource.
10 | //
11 | #include "winres.h"
12 |
13 | /////////////////////////////////////////////////////////////////////////////
14 | #undef APSTUDIO_READONLY_SYMBOLS
15 |
16 | /////////////////////////////////////////////////////////////////////////////
17 | // English (United States) resources
18 |
19 | #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
20 | LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
21 |
22 | #ifdef APSTUDIO_INVOKED
23 | /////////////////////////////////////////////////////////////////////////////
24 | //
25 | // TEXTINCLUDE
26 | //
27 |
28 | 1 TEXTINCLUDE
29 | BEGIN
30 | "resource.h\0"
31 | END
32 |
33 | 2 TEXTINCLUDE
34 | BEGIN
35 | "#include ""winres.h""\r\n"
36 | "\0"
37 | END
38 |
39 | 3 TEXTINCLUDE
40 | BEGIN
41 | "\r\n"
42 | "\0"
43 | END
44 |
45 | #endif // APSTUDIO_INVOKED
46 |
47 |
48 | /////////////////////////////////////////////////////////////////////////////
49 | //
50 | // Icon
51 | //
52 |
53 | // Icon with lowest ID value placed first to ensure application icon
54 | // remains consistent on all systems.
55 | IDI_APP_ICON ICON "resources\\app_icon.ico"
56 |
57 |
58 | /////////////////////////////////////////////////////////////////////////////
59 | //
60 | // Version
61 | //
62 |
63 | #if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD)
64 | #define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD
65 | #else
66 | #define VERSION_AS_NUMBER 1,0,0,0
67 | #endif
68 |
69 | #if defined(FLUTTER_VERSION)
70 | #define VERSION_AS_STRING FLUTTER_VERSION
71 | #else
72 | #define VERSION_AS_STRING "1.0.0"
73 | #endif
74 |
75 | VS_VERSION_INFO VERSIONINFO
76 | FILEVERSION VERSION_AS_NUMBER
77 | PRODUCTVERSION VERSION_AS_NUMBER
78 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
79 | #ifdef _DEBUG
80 | FILEFLAGS VS_FF_DEBUG
81 | #else
82 | FILEFLAGS 0x0L
83 | #endif
84 | FILEOS VOS__WINDOWS32
85 | FILETYPE VFT_APP
86 | FILESUBTYPE 0x0L
87 | BEGIN
88 | BLOCK "StringFileInfo"
89 | BEGIN
90 | BLOCK "040904e4"
91 | BEGIN
92 | VALUE "CompanyName", "com.example" "\0"
93 | VALUE "FileDescription", "simply_qibla" "\0"
94 | VALUE "FileVersion", VERSION_AS_STRING "\0"
95 | VALUE "InternalName", "simply_qibla" "\0"
96 | VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0"
97 | VALUE "OriginalFilename", "simply_qibla.exe" "\0"
98 | VALUE "ProductName", "simply_qibla" "\0"
99 | VALUE "ProductVersion", VERSION_AS_STRING "\0"
100 | END
101 | END
102 | BLOCK "VarFileInfo"
103 | BEGIN
104 | VALUE "Translation", 0x409, 1252
105 | END
106 | END
107 |
108 | #endif // English (United States) resources
109 | /////////////////////////////////////////////////////////////////////////////
110 |
111 |
112 |
113 | #ifndef APSTUDIO_INVOKED
114 | /////////////////////////////////////////////////////////////////////////////
115 | //
116 | // Generated from the TEXTINCLUDE 3 resource.
117 | //
118 |
119 |
120 | /////////////////////////////////////////////////////////////////////////////
121 | #endif // not APSTUDIO_INVOKED
122 |
--------------------------------------------------------------------------------
/lib/l10n/app_localizations_ar.dart:
--------------------------------------------------------------------------------
1 | // ignore: unused_import
2 | import 'package:intl/intl.dart' as intl;
3 | import 'app_localizations.dart';
4 |
5 | // ignore_for_file: type=lint
6 |
7 | /// The translations for Arabic (`ar`).
8 | class AppLocalizationsAr extends AppLocalizations {
9 | AppLocalizationsAr([String locale = 'ar']) : super(locale);
10 |
11 | @override
12 | String get appNamePascalCase => 'سمبلي قبلة';
13 |
14 | @override
15 | String get appAboutLegalese => '© ٢٠٢٤ TowardsIkhlaas';
16 |
17 | @override
18 | String get changeLocationBarText => 'الانتقال إلى موقع محدد؟ :)';
19 |
20 | @override
21 | String get latitudeFieldLabel => '(أرقام 0-9) خط العرض';
22 |
23 | @override
24 | String get longitudeFieldLabel => '(أرقام 0-9) خط الطول';
25 |
26 | @override
27 | String get skipText => 'تخطي';
28 |
29 | @override
30 | String get doneText => 'تم';
31 |
32 | @override
33 | String get okText => 'حسنا';
34 |
35 | @override
36 | String get cancelText => 'إلغاء';
37 |
38 | @override
39 | String get clearText => 'مسح';
40 |
41 | @override
42 | String get allowText => 'يسمح';
43 |
44 | @override
45 | String get turnOnText => 'تشغيل';
46 |
47 | @override
48 | String get coordinatesInputFormTitle => 'أدخل الإحداثيات';
49 |
50 | @override
51 | String get centerConsoleCenteringText => 'جارٍ تحديد موقعك...';
52 |
53 | @override
54 | String get centerConsoleDraggingText => 'ارفع لإظهار خط القبلة';
55 |
56 | @override
57 | String get centerConsoleIdleText => 'كم إلى الكعبة';
58 |
59 | @override
60 | String get locationDisabled => 'تم تعطيل الموقعك.';
61 |
62 | @override
63 | String get locationDeniedInitial =>
64 | 'يرجى السماح بإذن الموقع لاستخدام هذه الميزة. نحن لا نخزن أو نبيع بياناتك. :)';
65 |
66 | @override
67 | String get locationDeniedPermanent =>
68 | 'يرجى السماح بإذن الموقعك لاستخدام هذه الميزة.';
69 |
70 | @override
71 | String get latitudeErrorText => 'قيمة خط العرض غير صالحة';
72 |
73 | @override
74 | String get longitudeErrorText => 'قيمة خط الطول غير صالحة';
75 |
76 | @override
77 | String get thankYouText => 'جزاك الله خيرًا لاستخدامك هذا التطبيق!';
78 |
79 | @override
80 | String get supportAppealText =>
81 | 'يتطلب تشغيل هذا التطبيق وصيانته (Google Maps API). يرجى النظر في دعم المشروع من خلال الأزرار أدناه (سيتم التبرع بالمبالغ الزائدة للجمعيات الخيرية المسجلة).';
82 |
83 | @override
84 | String get githubButtonText => 'ادعمنا على GitHub';
85 |
86 | @override
87 | String get donateButtonText => 'ادعمنا على Ko-Fi';
88 |
89 | @override
90 | String get socialInstagramButtonText => 'تابعنا على Instagram';
91 |
92 | @override
93 | String get shareButtonText => 'شارك مع الأصدقاء';
94 |
95 | @override
96 | String get shareContentText =>
97 | 'السلام عليكم ورحمة الله وبركاته! تحقق من هذا التطبيق الجميل والدقيق لتحديد القبلة';
98 |
99 | @override
100 | String get onboardingUsageTitle => 'كيف يعمل هذا؟';
101 |
102 | @override
103 | String get onboardingLocationTitle => 'دع التطبيق يجد موقعك.';
104 |
105 | @override
106 | String get onboardingSupportTitle => 'ادعم مهمتنا!';
107 |
108 | @override
109 | String get onboardingUsageBody =>
110 | 'السلام عليكم! لاستخدام التطبيق، ضع جهازك بشكل مسطح وقم بتدويره ليصطف مع المعالم القريبة المعروضة في الخريطة، مثل الشوارع والمباني من حولك.';
111 |
112 | @override
113 | String get onboardingLocationBody =>
114 | 'تعد أذونات الموقع ضرورية لكي يعمل التطبيق بشكل مثالي، ولكنها ليست إلزامية. كن مطمئنًا، بياناتك لن يتم جمعها أو بيعها.';
115 |
116 | @override
117 | String get onboardingSupportBody =>
118 | 'سمبلي قبلة خالي من الإعلانات ومفتوح المصدر. إذا أعجبك ما تراه، يرجى دعمنا من خلال الروابط داخل التطبيق. سيتم استخدام دعمك لتشغيل التطبيق، وسيتم التبرع بالفائض للجمعيات الخيرية المسجلة.';
119 | }
120 |
--------------------------------------------------------------------------------
/lib/l10n/app_localizations_en.dart:
--------------------------------------------------------------------------------
1 | // ignore: unused_import
2 | import 'package:intl/intl.dart' as intl;
3 | import 'app_localizations.dart';
4 |
5 | // ignore_for_file: type=lint
6 |
7 | /// The translations for English (`en`).
8 | class AppLocalizationsEn extends AppLocalizations {
9 | AppLocalizationsEn([String locale = 'en']) : super(locale);
10 |
11 | @override
12 | String get appNamePascalCase => 'SimplyQibla';
13 |
14 | @override
15 | String get appAboutLegalese => '© 2024 TowardsIkhlaas';
16 |
17 | @override
18 | String get changeLocationBarText => 'Jump to a specific location? :)';
19 |
20 | @override
21 | String get latitudeFieldLabel => 'Latitude';
22 |
23 | @override
24 | String get longitudeFieldLabel => 'Longitude';
25 |
26 | @override
27 | String get skipText => 'Skip';
28 |
29 | @override
30 | String get doneText => 'Done';
31 |
32 | @override
33 | String get okText => 'OK';
34 |
35 | @override
36 | String get cancelText => 'Cancel';
37 |
38 | @override
39 | String get clearText => 'Clear';
40 |
41 | @override
42 | String get allowText => 'ALLOW';
43 |
44 | @override
45 | String get turnOnText => 'TURN ON';
46 |
47 | @override
48 | String get coordinatesInputFormTitle => 'Enter Coordinates';
49 |
50 | @override
51 | String get centerConsoleCenteringText => 'Locating you...';
52 |
53 | @override
54 | String get centerConsoleDraggingText => 'Lift to show Qibla line';
55 |
56 | @override
57 | String get centerConsoleIdleText => 'km to the Kaaba';
58 |
59 | @override
60 | String get locationDisabled => 'Your location is off.';
61 |
62 | @override
63 | String get locationDeniedInitial =>
64 | 'Please allow location permission to use this feature. We do not store or sell your data. :)';
65 |
66 | @override
67 | String get locationDeniedPermanent =>
68 | 'Please allow location permission to use this feature.';
69 |
70 | @override
71 | String get latitudeErrorText => 'Invalid latitude value';
72 |
73 | @override
74 | String get longitudeErrorText => 'Invalid longitude value';
75 |
76 | @override
77 | String get thankYouText => 'JazakAllahu Khayran for using this app!';
78 |
79 | @override
80 | String get supportAppealText =>
81 | 'This app costs to run and maintain (Google Maps API). Please consider supporting the project through the buttons below (excess amounts will be donated to registered charities).';
82 |
83 | @override
84 | String get githubButtonText => 'Support us on GitHub';
85 |
86 | @override
87 | String get donateButtonText => 'Support us on Ko-Fi';
88 |
89 | @override
90 | String get socialInstagramButtonText => 'Follow us on Instagram';
91 |
92 | @override
93 | String get shareButtonText => 'Share with Friends';
94 |
95 | @override
96 | String get shareContentText =>
97 | 'As salaam alaykum warahmatullahi wabarakatuh! Check out this beautiful and accurate Qibla app';
98 |
99 | @override
100 | String get onboardingUsageTitle => 'How does this work?';
101 |
102 | @override
103 | String get onboardingLocationTitle => 'Let the app find you.';
104 |
105 | @override
106 | String get onboardingSupportTitle => 'Support our mission!';
107 |
108 | @override
109 | String get onboardingUsageBody =>
110 | 'Salaam! To use the app, hold your device flat and rotate it to align with nearby landmarks shown in the map, like streets and buildings around you.';
111 |
112 | @override
113 | String get onboardingLocationBody =>
114 | 'Location permissions are needed for the app to function ideally, but not required. Rest assured, your data is neither collected nor sold.';
115 |
116 | @override
117 | String get onboardingSupportBody =>
118 | 'SimplyQibla is ad-free and open-source. If you like what you see, please support us through the in-app links. Your support will be used to run the app, and excess will be donated to registered charities.';
119 | }
120 |
--------------------------------------------------------------------------------
/windows/runner/win32_window.h:
--------------------------------------------------------------------------------
1 | #ifndef RUNNER_WIN32_WINDOW_H_
2 | #define RUNNER_WIN32_WINDOW_H_
3 |
4 | #include
5 |
6 | #include
7 | #include
8 | #include
9 |
10 | // A class abstraction for a high DPI-aware Win32 Window. Intended to be
11 | // inherited from by classes that wish to specialize with custom
12 | // rendering and input handling
13 | class Win32Window {
14 | public:
15 | struct Point {
16 | unsigned int x;
17 | unsigned int y;
18 | Point(unsigned int x, unsigned int y) : x(x), y(y) {}
19 | };
20 |
21 | struct Size {
22 | unsigned int width;
23 | unsigned int height;
24 | Size(unsigned int width, unsigned int height)
25 | : width(width), height(height) {}
26 | };
27 |
28 | Win32Window();
29 | virtual ~Win32Window();
30 |
31 | // Creates a win32 window with |title| that is positioned and sized using
32 | // |origin| and |size|. New windows are created on the default monitor. Window
33 | // sizes are specified to the OS in physical pixels, hence to ensure a
34 | // consistent size this function will scale the inputted width and height as
35 | // as appropriate for the default monitor. The window is invisible until
36 | // |Show| is called. Returns true if the window was created successfully.
37 | bool Create(const std::wstring& title, const Point& origin, const Size& size);
38 |
39 | // Show the current window. Returns true if the window was successfully shown.
40 | bool Show();
41 |
42 | // Release OS resources associated with window.
43 | void Destroy();
44 |
45 | // Inserts |content| into the window tree.
46 | void SetChildContent(HWND content);
47 |
48 | // Returns the backing Window handle to enable clients to set icon and other
49 | // window properties. Returns nullptr if the window has been destroyed.
50 | HWND GetHandle();
51 |
52 | // If true, closing this window will quit the application.
53 | void SetQuitOnClose(bool quit_on_close);
54 |
55 | // Return a RECT representing the bounds of the current client area.
56 | RECT GetClientArea();
57 |
58 | protected:
59 | // Processes and route salient window messages for mouse handling,
60 | // size change and DPI. Delegates handling of these to member overloads that
61 | // inheriting classes can handle.
62 | virtual LRESULT MessageHandler(HWND window,
63 | UINT const message,
64 | WPARAM const wparam,
65 | LPARAM const lparam) noexcept;
66 |
67 | // Called when CreateAndShow is called, allowing subclass window-related
68 | // setup. Subclasses should return false if setup fails.
69 | virtual bool OnCreate();
70 |
71 | // Called when Destroy is called.
72 | virtual void OnDestroy();
73 |
74 | private:
75 | friend class WindowClassRegistrar;
76 |
77 | // OS callback called by message pump. Handles the WM_NCCREATE message which
78 | // is passed when the non-client area is being created and enables automatic
79 | // non-client DPI scaling so that the non-client area automatically
80 | // responds to changes in DPI. All other messages are handled by
81 | // MessageHandler.
82 | static LRESULT CALLBACK WndProc(HWND const window,
83 | UINT const message,
84 | WPARAM const wparam,
85 | LPARAM const lparam) noexcept;
86 |
87 | // Retrieves a class instance pointer for |window|
88 | static Win32Window* GetThisFromHandle(HWND const window) noexcept;
89 |
90 | // Update the window frame's theme to match the system theme.
91 | static void UpdateTheme(HWND const window);
92 |
93 | bool quit_on_close_ = false;
94 |
95 | // window handle for top level window.
96 | HWND window_handle_ = nullptr;
97 |
98 | // window handle for hosted content.
99 | HWND child_content_ = nullptr;
100 | };
101 |
102 | #endif // RUNNER_WIN32_WINDOW_H_
103 |
--------------------------------------------------------------------------------
/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
37 |
38 |
39 |
40 |
43 |
49 |
50 |
51 |
52 |
53 |
63 |
65 |
71 |
72 |
73 |
74 |
80 |
82 |
88 |
89 |
90 |
91 |
93 |
94 |
97 |
98 |
99 |
--------------------------------------------------------------------------------
/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 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/lib/widgets/user_location_icon.dart:
--------------------------------------------------------------------------------
1 | import 'dart:math';
2 | import 'dart:ui' as ui;
3 | import 'package:flutter/material.dart';
4 |
5 | class LocationIconPainter extends CustomPainter {
6 | final Color primaryColor;
7 | final Color borderColor;
8 | final double direction;
9 |
10 | const LocationIconPainter({
11 | required this.primaryColor,
12 | required this.borderColor,
13 | required this.direction,
14 | });
15 |
16 | @override
17 | void paint(Canvas canvas, Size size) {
18 | final Offset center = Offset(size.width / 2, size.height / 2);
19 | final double radius = size.width * 0.6;
20 |
21 | canvas.save();
22 | final Path clipPath = Path()
23 | ..addOval(Rect.fromCircle(center: center, radius: radius));
24 | canvas.clipPath(clipPath);
25 | canvas.save();
26 | canvas.translate(center.dx, center.dy);
27 | canvas.rotate(direction);
28 | canvas.translate(-center.dx, -center.dy);
29 |
30 | // Draw direction cone with adjusted dimensions
31 | final ui.Path conePath = Path();
32 | final double coneWidth = size.width;
33 | final double coneHeight = size.height * 0.8;
34 | final double coneYOffset = size.height * 0.20;
35 |
36 | conePath.moveTo(center.dx, center.dy - coneHeight / 2 + coneYOffset);
37 | conePath.lineTo(
38 | center.dx + coneWidth / 2, center.dy + coneHeight / 2 + coneYOffset);
39 | conePath.lineTo(
40 | center.dx - coneWidth / 2, center.dy + coneHeight / 2 + coneYOffset);
41 | conePath.close();
42 |
43 | // Create gradient for the cone
44 | final ui.Gradient coneGradient = ui.Gradient.radial(
45 | Offset(center.dx, center.dy - coneHeight / 2 + coneYOffset),
46 | radius * 1.25,
47 | [
48 | primaryColor,
49 | primaryColor.withValues(alpha: 0.0),
50 | ],
51 | );
52 |
53 | final ui.Paint conePaint = Paint()..shader = coneGradient;
54 | canvas.drawPath(conePath, conePaint);
55 |
56 | // Restore canvas rotation
57 | canvas.restore();
58 |
59 | // Draw the outer white circle shadow
60 | final ui.Paint shadowPaint = Paint()
61 | ..color = Colors.black.withValues(alpha: 0.3)
62 | ..maskFilter = const MaskFilter.blur(BlurStyle.normal, 3.0)
63 | ..style = PaintingStyle.fill;
64 |
65 | canvas.drawCircle(center, size.width * 0.20, shadowPaint);
66 |
67 | // Draw outer white circle for border
68 | final double outerCircleRadius = size.width * 0.20;
69 | final ui.Paint outerCirclePaint = Paint()
70 | ..color = borderColor
71 | ..style = PaintingStyle.fill;
72 |
73 | canvas.drawCircle(center, outerCircleRadius, outerCirclePaint);
74 |
75 | // Draw inner colored circle
76 | final double innerCircleRadius = size.width * 0.13;
77 | final ui.Paint innerCirclePaint = Paint()
78 | ..color = primaryColor
79 | ..style = PaintingStyle.fill;
80 |
81 | canvas.drawCircle(center, innerCircleRadius, innerCirclePaint);
82 |
83 | // Restore the original canvas state
84 | canvas.restore();
85 | }
86 |
87 | @override
88 | bool shouldRepaint(LocationIconPainter oldDelegate) {
89 | return oldDelegate.primaryColor != primaryColor ||
90 | oldDelegate.borderColor != borderColor ||
91 | oldDelegate.direction != direction;
92 | }
93 | }
94 |
95 | class UserLocationIcon extends StatelessWidget {
96 | final double size;
97 | final Color primaryColor;
98 | final Color borderColor;
99 | final double direction;
100 |
101 | const UserLocationIcon({
102 | super.key,
103 | this.size = 64.0,
104 | this.primaryColor = Colors.grey,
105 | this.borderColor = Colors.white,
106 | this.direction = pi,
107 | });
108 |
109 | @override
110 | Widget build(BuildContext context) {
111 | return SizedBox(
112 | width: size,
113 | height: size,
114 | child: CustomPaint(
115 | painter: LocationIconPainter(
116 | primaryColor: primaryColor,
117 | borderColor: borderColor,
118 | direction: direction,
119 | ),
120 | ),
121 | );
122 | }
123 | }
124 |
--------------------------------------------------------------------------------
/lib/l10n/app_localizations_id.dart:
--------------------------------------------------------------------------------
1 | // ignore: unused_import
2 | import 'package:intl/intl.dart' as intl;
3 | import 'app_localizations.dart';
4 |
5 | // ignore_for_file: type=lint
6 |
7 | /// The translations for Indonesian (`id`).
8 | class AppLocalizationsId extends AppLocalizations {
9 | AppLocalizationsId([String locale = 'id']) : super(locale);
10 |
11 | @override
12 | String get appNamePascalCase => 'SimplyQibla';
13 |
14 | @override
15 | String get appAboutLegalese => '© 2024 TowardsIkhlaas';
16 |
17 | @override
18 | String get changeLocationBarText => 'Ingin langsung ke lokasi tertentu? :)';
19 |
20 | @override
21 | String get latitudeFieldLabel => 'Lintang';
22 |
23 | @override
24 | String get longitudeFieldLabel => 'Bujur';
25 |
26 | @override
27 | String get skipText => 'Lewati';
28 |
29 | @override
30 | String get doneText => 'Selesai';
31 |
32 | @override
33 | String get okText => 'OK';
34 |
35 | @override
36 | String get cancelText => 'Batal';
37 |
38 | @override
39 | String get clearText => 'Hapus';
40 |
41 | @override
42 | String get allowText => 'IZINKAN';
43 |
44 | @override
45 | String get turnOnText => 'NYALAKAN';
46 |
47 | @override
48 | String get coordinatesInputFormTitle => 'Masukkan Koordinat';
49 |
50 | @override
51 | String get centerConsoleCenteringText => 'Mencari lokasi Anda...';
52 |
53 | @override
54 | String get centerConsoleDraggingText =>
55 | 'Angkat untuk menampilkan garis kiblat';
56 |
57 | @override
58 | String get centerConsoleIdleText => 'km ke Ka\'bah';
59 |
60 | @override
61 | String get locationDisabled => 'Layanan lokasi Anda dinonaktifkan.';
62 |
63 | @override
64 | String get locationDeniedInitial =>
65 | 'Silakan izinkan akses lokasi untuk menggunakan fitur ini. Kami tidak menyimpan atau menjual data Anda. :)';
66 |
67 | @override
68 | String get locationDeniedPermanent =>
69 | 'Silakan izinkan akses lokasi untuk menggunakan fitur ini.';
70 |
71 | @override
72 | String get latitudeErrorText => 'Nilai lintang tidak valid';
73 |
74 | @override
75 | String get longitudeErrorText => 'Nilai bujur tidak valid';
76 |
77 | @override
78 | String get thankYouText =>
79 | 'JazakAllahu Khayran telah menggunakan aplikasi ini!';
80 |
81 | @override
82 | String get supportAppealText =>
83 | 'Aplikasi ini memerlukan biaya untuk dijalankan dan dipelihara (Google Maps API). Mohon pertimbangkan untuk mendukung proyek ini melalui tombol di bawah (dana lebih akan disumbangkan ke badan amal terdaftar).';
84 |
85 | @override
86 | String get githubButtonText => 'Dukung kami di GitHub';
87 |
88 | @override
89 | String get donateButtonText => 'Dukung kami di Ko-Fi';
90 |
91 | @override
92 | String get socialInstagramButtonText => 'Ikuti kami di Instagram';
93 |
94 | @override
95 | String get shareButtonText => 'Bagikan dengan Teman';
96 |
97 | @override
98 | String get shareContentText =>
99 | 'Assalamualaikum warahmatullahi wabarakatuh! Coba aplikasi kiblat yang indah dan akurat ini';
100 |
101 | @override
102 | String get onboardingUsageTitle => 'Bagaimana ini bekerja?';
103 |
104 | @override
105 | String get onboardingLocationTitle => 'Biarkan aplikasi menemukan Anda.';
106 |
107 | @override
108 | String get onboardingSupportTitle => 'Dukung misi kami!';
109 |
110 | @override
111 | String get onboardingUsageBody =>
112 | 'Salaam! Untuk menggunakan aplikasi, pegang perangkat Anda dalam posisi datar dan putar untuk menyelaraskan dengan landmark di peta, seperti jalan dan bangunan di sekitar Anda.';
113 |
114 | @override
115 | String get onboardingLocationBody =>
116 | 'Izin lokasi diperlukan agar aplikasi berfungsi dengan optimal, tetapi tidak wajib. Tenang, data Anda tidak dikumpulkan atau dijual.';
117 |
118 | @override
119 | String get onboardingSupportBody =>
120 | 'SimplyQibla bebas iklan dan bersumber terbuka. Jika Anda menyukai aplikasi ini, mohon dukung melalui tautan dalam aplikasi. Dukungan Anda akan digunakan untuk menjalankan aplikasi, dan kelebihannya akan disumbangkan ke badan amal terdaftar.';
121 | }
122 |
--------------------------------------------------------------------------------
/lib/l10n/app_localizations_ms.dart:
--------------------------------------------------------------------------------
1 | // ignore: unused_import
2 | import 'package:intl/intl.dart' as intl;
3 | import 'app_localizations.dart';
4 |
5 | // ignore_for_file: type=lint
6 |
7 | /// The translations for Malay (`ms`).
8 | class AppLocalizationsMs extends AppLocalizations {
9 | AppLocalizationsMs([String locale = 'ms']) : super(locale);
10 |
11 | @override
12 | String get appNamePascalCase => 'SimplyQibla';
13 |
14 | @override
15 | String get appAboutLegalese => '© 2024 TowardsIkhlaas';
16 |
17 | @override
18 | String get changeLocationBarText => 'Mahu pergi ke lokasi tertentu? :)';
19 |
20 | @override
21 | String get latitudeFieldLabel => 'Latitud';
22 |
23 | @override
24 | String get longitudeFieldLabel => 'Longitud';
25 |
26 | @override
27 | String get skipText => 'Langkau';
28 |
29 | @override
30 | String get doneText => 'Selesai';
31 |
32 | @override
33 | String get okText => 'OK';
34 |
35 | @override
36 | String get cancelText => 'Batal';
37 |
38 | @override
39 | String get clearText => 'Kosongkan';
40 |
41 | @override
42 | String get allowText => 'IZINKAN';
43 |
44 | @override
45 | String get turnOnText => 'HIDUPKAN';
46 |
47 | @override
48 | String get coordinatesInputFormTitle => 'Masukkan Koordinat';
49 |
50 | @override
51 | String get centerConsoleCenteringText => 'Mencari lokasi anda...';
52 |
53 | @override
54 | String get centerConsoleDraggingText => 'Angkat untuk tunjukkan garis Qibla';
55 |
56 | @override
57 | String get centerConsoleIdleText => 'km ke Kaabah';
58 |
59 | @override
60 | String get locationDisabled => 'Lokasi anda dimatikan.';
61 |
62 | @override
63 | String get locationDeniedInitial =>
64 | 'Sila benarkan kebenaran lokasi untuk menggunakan ciri ini. Kami tidak menyimpan atau menjual data anda. :)';
65 |
66 | @override
67 | String get locationDeniedPermanent =>
68 | 'Sila benarkan kebenaran lokasi untuk menggunakan ciri ini.';
69 |
70 | @override
71 | String get latitudeErrorText => 'Nilai latitud tidak sah';
72 |
73 | @override
74 | String get longitudeErrorText => 'Nilai longitud tidak sah';
75 |
76 | @override
77 | String get thankYouText =>
78 | 'JazakAllahu Khayran kerana menggunakan aplikasi ini!';
79 |
80 | @override
81 | String get supportAppealText =>
82 | 'Aplikasi ini memerlukan kos untuk dijalankan dan diselenggara (Google Maps API). Sila pertimbangkan untuk menyokong projek ini melalui butang di bawah (lebih jumlah akan disumbangkan kepada badan amal berdaftar).';
83 |
84 | @override
85 | String get githubButtonText => 'Sokong kami di GitHub';
86 |
87 | @override
88 | String get donateButtonText => 'Sokong kami di Ko-Fi';
89 |
90 | @override
91 | String get socialInstagramButtonText => 'Ikuti kami di Instagram';
92 |
93 | @override
94 | String get shareButtonText => 'Kongsi dengan Rakan';
95 |
96 | @override
97 | String get shareContentText =>
98 | 'As salaam alaykum warahmatullahi wabarakatuh! Lihat aplikasi Qibla yang indah dan tepat ini';
99 |
100 | @override
101 | String get onboardingUsageTitle => 'Bagaimana ia berfungsi?';
102 |
103 | @override
104 | String get onboardingLocationTitle => 'Biarkan aplikasi mencari anda.';
105 |
106 | @override
107 | String get onboardingSupportTitle => 'Sokong misi kami!';
108 |
109 | @override
110 | String get onboardingUsageBody =>
111 | 'Salaam! Untuk menggunakan aplikasi ini, pegang peranti anda secara mendatar dan pusingkan untuk menyelaraskan dengan mercu tanda berhampiran yang ditunjukkan pada peta, seperti jalan dan bangunan di sekitar anda.';
112 |
113 | @override
114 | String get onboardingLocationBody =>
115 | 'Kebenaran lokasi diperlukan agar aplikasi berfungsi dengan optimum, tetapi tidak wajib. Anda yakin, data anda tidak dikumpul atau dijual.';
116 |
117 | @override
118 | String get onboardingSupportBody =>
119 | 'SimplyQibla tiada iklan dan sumber terbuka. Jika anda suka, sila sokong kami melalui pautan dalam aplikasi. Sokongan anda akan digunakan untuk menjalankan aplikasi, dan lebihan akan disumbangkan kepada badan amal berdaftar.';
120 | }
121 |
--------------------------------------------------------------------------------