Compare commits
70 Commits
84d66fbc4b
...
1.0.0+13
| Author | SHA1 | Date | |
|---|---|---|---|
| b69bee7e59 | |||
| 3d23152802 | |||
| 90dc3f43a7 | |||
| 3df93e47d2 | |||
| 6d2a027d9b | |||
| 222d50d80d | |||
| 499bca5b1c | |||
| 252e4619f7 | |||
| 463cb9870f | |||
| 2cee7ee958 | |||
| e30e7a5c24 | |||
| 6509cd2511 | |||
| 6cdc025c40 | |||
| de3ad4b21e | |||
| ad1c188982 | |||
| 43fae51462 | |||
| 9012f560b5 | |||
| 19a7fd82df | |||
| 010ee6286f | |||
| 3c3447a9ee | |||
| ee2633db52 | |||
| ddeda2ce23 | |||
| a5f39321eb | |||
| da2a3508d1 | |||
| ed7b69f7b3 | |||
| 710ab755fc | |||
| 4fd9447591 | |||
| c97a7ae859 | |||
| 4bf8715486 | |||
| fbb12ff801 | |||
| 47d051dd44 | |||
| 1ac7704080 | |||
| b7b673c96d | |||
| f772bbdbbc | |||
| a95292a9ef | |||
| 07a86c32a0 | |||
| f16c216479 | |||
| 8b8915e28f | |||
| 0a24c86682 | |||
| d25ebbf6bd | |||
| be977f10d1 | |||
| bb09c43135 | |||
| 989440013c | |||
| d80a398a23 | |||
| 3ca01ef147 | |||
| 586f47575c | |||
| ef40c2ffe4 | |||
| 7e95c167ef | |||
| a063d19952 | |||
| 7285eb4959 | |||
| be44aadc07 | |||
| 249c8fbf80 | |||
| 2134500089 | |||
| 3f41573f00 | |||
| 81f5a2f5cc | |||
| c0714ab3c8 | |||
| 70039a4901 | |||
| 289ea3ce40 | |||
| 785da526d3 | |||
| 5a53fc7268 | |||
| 7e7df4dc46 | |||
| 2751ab1296 | |||
| c6b460315f | |||
| a2bc08bbd9 | |||
| 2e17078fea | |||
| a162619a88 | |||
| 95b04adede | |||
| e7ea852725 | |||
| 41e248f8cc | |||
| 031cab75e0 |
24
.github/workflows/nightly.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
name: release-nightly
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
build-exe:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Set up Flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: stable
|
||||
cache: true
|
||||
- run: flutter pub get
|
||||
- run: flutter build windows
|
||||
- name: Archive production artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: build-output-windows
|
||||
path: build/windows/x64/runner/Release
|
||||
27
README.md
@@ -1,16 +1,23 @@
|
||||
# rhythm_box
|
||||
# RhythmBox
|
||||
|
||||
A new Flutter project.
|
||||
Yet another spotify third-party client. Support multi-platform because built with flutter.
|
||||
|
||||
## Getting Started
|
||||
This project is inspired by and taken supported by [spotube](https://spotube.krtirtho.dev).
|
||||
Their original app is good enough. But I just want to redesign the user interface and make it ready add to more features and more backend support.
|
||||
|
||||
This project is a starting point for a Flutter application.
|
||||
## Roadmap
|
||||
|
||||
A few resources to get you started if this is your first Flutter project:
|
||||
- [x] Playing music
|
||||
- [x] Add netease music as source
|
||||
- [ ] Add bilibili as source
|
||||
- [ ] Add kuwo music as source
|
||||
- [ ] Add kugo music as source
|
||||
- [x] Re-design user interface
|
||||
- [x] Simplified UI and UX
|
||||
- [x] Support for large screen device
|
||||
|
||||
- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
|
||||
- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
|
||||
## License
|
||||
|
||||
For help getting started with Flutter development, view the
|
||||
[online documentation](https://docs.flutter.dev/), which offers tutorials,
|
||||
samples, guidance on mobile development, and a full API reference.
|
||||
This project is open-sourced under APGLv3 license. The original spotube project is open-sourced under license BSD-Clause4 and copyright by Kingkor Roy Tirtho.
|
||||
|
||||
This project is all rights reversed by LittleSheep and Solsynth LLC.
|
||||
@@ -21,6 +21,7 @@ linter:
|
||||
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
|
||||
# producing the lint.
|
||||
rules:
|
||||
prefer_single_quotes: true
|
||||
# avoid_print: false # Uncomment to disable the `avoid_print` rule
|
||||
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
|
||||
|
||||
|
||||
@@ -28,6 +28,8 @@ android {
|
||||
targetSdk = flutter.targetSdkVersion
|
||||
versionCode = flutter.versionCode
|
||||
versionName = flutter.versionName
|
||||
|
||||
minSdkVersion 24
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
|
||||
@@ -1,10 +1,15 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
|
||||
|
||||
<application
|
||||
android:label="rhythm_box"
|
||||
android:label="RhythmBox"
|
||||
android:name="${applicationName}"
|
||||
android:icon="@mipmap/ic_launcher">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:name="com.ryanheise.audioservice.AudioServiceActivity"
|
||||
android:exported="true"
|
||||
android:launchMode="singleTop"
|
||||
android:taskAffinity=""
|
||||
@@ -17,14 +22,30 @@
|
||||
while the Flutter UI initializes. After that, this theme continues
|
||||
to determine the Window background behind the Flutter UI. -->
|
||||
<meta-data
|
||||
android:name="io.flutter.embedding.android.NormalTheme"
|
||||
android:resource="@style/NormalTheme"
|
||||
/>
|
||||
android:name="io.flutter.embedding.android.NormalTheme"
|
||||
android:resource="@style/NormalTheme"
|
||||
/>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<service android:name="com.ryanheise.audioservice.AudioService"
|
||||
android:foregroundServiceType="mediaPlayback"
|
||||
android:exported="true" tools:ignore="Instantiatable">
|
||||
<intent-filter>
|
||||
<action android:name="android.media.browse.MediaBrowserService" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<receiver android:name="com.ryanheise.audioservice.MediaButtonReceiver"
|
||||
android:exported="true" tools:ignore="Instantiatable">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MEDIA_BUTTON" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<!-- Don't delete the meta-data below.
|
||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
||||
<meta-data
|
||||
@@ -38,8 +59,8 @@
|
||||
In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.intent.action.PROCESS_TEXT"/>
|
||||
<data android:mimeType="text/plain"/>
|
||||
<action android:name="android.intent.action.PROCESS_TEXT" />
|
||||
<data android:mimeType="text/plain" />
|
||||
</intent>
|
||||
</queries>
|
||||
</manifest>
|
||||
</manifest>
|
||||
BIN
android/app/src/main/ic_launcher-playstore.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
15
android/app/src/main/res/drawable-anydpi/ic_stat_name.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="#FFFFFF">
|
||||
<group android:scaleX="1.127451"
|
||||
android:scaleY="1.127451"
|
||||
android:translateX="-1.5294118"
|
||||
android:translateY="-1.5294118">
|
||||
<path
|
||||
android:pathData="M16,9H13V14.5A2.5,2.5 0,0 1,10.5 17A2.5,2.5 0,0 1,8 14.5A2.5,2.5 0,0 1,10.5 12C11.07,12 11.58,12.19 12,12.5V7H16M19,3H5A2,2 0,0 0,3 5V19A2,2 0,0 0,5 21H19A2,2 0,0 0,21 19V5A2,2 0,0 0,19 3Z"
|
||||
android:fillColor="#fff"/>
|
||||
</group>
|
||||
</vector>
|
||||
BIN
android/app/src/main/res/drawable-hdpi/ic_stat_name.png
Normal file
|
After Width: | Height: | Size: 337 B |
BIN
android/app/src/main/res/drawable-hdpi/splash.png
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
android/app/src/main/res/drawable-mdpi/ic_stat_name.png
Normal file
|
After Width: | Height: | Size: 240 B |
BIN
android/app/src/main/res/drawable-mdpi/splash.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
android/app/src/main/res/drawable-night-v21/background.png
Normal file
|
After Width: | Height: | Size: 69 B |
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<bitmap android:gravity="fill" android:src="@drawable/background"/>
|
||||
</item>
|
||||
<item>
|
||||
<bitmap android:gravity="center" android:src="@drawable/splash"/>
|
||||
</item>
|
||||
</layer-list>
|
||||
BIN
android/app/src/main/res/drawable-night/background.png
Normal file
|
After Width: | Height: | Size: 69 B |
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<bitmap android:gravity="fill" android:src="@drawable/background"/>
|
||||
</item>
|
||||
<item>
|
||||
<bitmap android:gravity="center" android:src="@drawable/splash"/>
|
||||
</item>
|
||||
</layer-list>
|
||||
BIN
android/app/src/main/res/drawable-v21/background.png
Normal file
|
After Width: | Height: | Size: 69 B |
@@ -1,12 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Modify this file to customize your launch splash screen -->
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="?android:colorBackground" />
|
||||
|
||||
<!-- You can insert your own image assets here -->
|
||||
<!-- <item>
|
||||
<bitmap
|
||||
android:gravity="center"
|
||||
android:src="@mipmap/launch_image" />
|
||||
</item> -->
|
||||
<item>
|
||||
<bitmap android:gravity="fill" android:src="@drawable/background"/>
|
||||
</item>
|
||||
<item>
|
||||
<bitmap android:gravity="center" android:src="@drawable/splash"/>
|
||||
</item>
|
||||
</layer-list>
|
||||
|
||||
BIN
android/app/src/main/res/drawable-xhdpi/ic_stat_name.png
Normal file
|
After Width: | Height: | Size: 461 B |
BIN
android/app/src/main/res/drawable-xhdpi/splash.png
Normal file
|
After Width: | Height: | Size: 161 KiB |
BIN
android/app/src/main/res/drawable-xxhdpi/ic_stat_name.png
Normal file
|
After Width: | Height: | Size: 656 B |
BIN
android/app/src/main/res/drawable-xxhdpi/splash.png
Normal file
|
After Width: | Height: | Size: 339 KiB |
BIN
android/app/src/main/res/drawable-xxxhdpi/splash.png
Normal file
|
After Width: | Height: | Size: 460 KiB |
BIN
android/app/src/main/res/drawable/background.png
Normal file
|
After Width: | Height: | Size: 69 B |
74
android/app/src/main/res/drawable/ic_launcher_background.xml
Normal file
@@ -0,0 +1,74 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector
|
||||
android:height="108dp"
|
||||
android:width="108dp"
|
||||
android:viewportHeight="108"
|
||||
android:viewportWidth="108"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="#3DDC84"
|
||||
android:pathData="M0,0h108v108h-108z"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M9,0L9,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,0L19,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M29,0L29,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M39,0L39,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M49,0L49,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M59,0L59,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M69,0L69,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M79,0L79,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M89,0L89,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M99,0L99,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,9L108,9"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,19L108,19"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,29L108,29"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,39L108,39"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,49L108,49"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,59L108,59"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,69L108,69"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,79L108,79"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,89L108,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,99L108,99"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,29L89,29"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,39L89,39"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,49L89,49"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,59L89,59"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,69L89,69"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,79L89,79"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M29,19L29,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M39,19L39,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M49,19L49,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M59,19L59,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M69,19L69,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M79,19L79,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
</vector>
|
||||
14
android/app/src/main/res/drawable/ic_launcher_foreground.xml
Normal file
@@ -0,0 +1,14 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<group android:scaleX="0.88536584"
|
||||
android:scaleY="0.88536584"
|
||||
android:translateX="1.3756098"
|
||||
android:translateY="1.3756098">
|
||||
<path
|
||||
android:pathData="M16,9H13V14.5A2.5,2.5 0,0 1,10.5 17A2.5,2.5 0,0 1,8 14.5A2.5,2.5 0,0 1,10.5 12C11.07,12 11.58,12.19 12,12.5V7H16M19,3H5A2,2 0,0 0,3 5V19A2,2 0,0 0,5 21H19A2,2 0,0 0,21 19V5A2,2 0,0 0,19 3Z"
|
||||
android:fillColor="#fff"/>
|
||||
</group>
|
||||
</vector>
|
||||
@@ -1,12 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Modify this file to customize your launch splash screen -->
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@android:color/white" />
|
||||
|
||||
<!-- You can insert your own image assets here -->
|
||||
<!-- <item>
|
||||
<bitmap
|
||||
android:gravity="center"
|
||||
android:src="@mipmap/launch_image" />
|
||||
</item> -->
|
||||
<item>
|
||||
<bitmap android:gravity="fill" android:src="@drawable/background"/>
|
||||
</item>
|
||||
<item>
|
||||
<bitmap android:gravity="center" android:src="@drawable/splash"/>
|
||||
</item>
|
||||
</layer-list>
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
|
Before Width: | Height: | Size: 544 B |
BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 774 B |
BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
android/app/src/main/res/mipmap-hdpi/launcher_icon.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 442 B |
BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 672 B |
BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp
Normal file
|
After Width: | Height: | Size: 888 B |
BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
android/app/src/main/res/mipmap-mdpi/launcher_icon.png
Normal file
|
After Width: | Height: | Size: 985 B |
|
Before Width: | Height: | Size: 721 B |
BIN
android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
BIN
android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
android/app/src/main/res/mipmap-xhdpi/launcher_icon.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
BIN
android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
BIN
android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
19
android/app/src/main/res/values-night-v31/styles.xml
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
|
||||
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||
<item name="android:forceDarkAllowed">false</item>
|
||||
<item name="android:windowFullscreen">false</item>
|
||||
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
|
||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
This theme determines the color of the Android Window while your
|
||||
Flutter UI initializes, as well as behind your Flutter UI while its
|
||||
running.
|
||||
|
||||
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
||||
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||
<item name="android:windowBackground">?android:colorBackground</item>
|
||||
</style>
|
||||
</resources>
|
||||
@@ -5,6 +5,10 @@
|
||||
<!-- Show a splash screen on the activity. Automatically removed when
|
||||
the Flutter engine draws its first frame -->
|
||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||
<item name="android:forceDarkAllowed">false</item>
|
||||
<item name="android:windowFullscreen">false</item>
|
||||
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
|
||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
This theme determines the color of the Android Window while your
|
||||
|
||||
19
android/app/src/main/res/values-v31/styles.xml
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
|
||||
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||
<item name="android:forceDarkAllowed">false</item>
|
||||
<item name="android:windowFullscreen">false</item>
|
||||
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
|
||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
This theme determines the color of the Android Window while your
|
||||
Flutter UI initializes, as well as behind your Flutter UI while its
|
||||
running.
|
||||
|
||||
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
||||
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||
<item name="android:windowBackground">?android:colorBackground</item>
|
||||
</style>
|
||||
</resources>
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#BD7F44</color>
|
||||
</resources>
|
||||
@@ -5,6 +5,10 @@
|
||||
<!-- Show a splash screen on the activity. Automatically removed when
|
||||
the Flutter engine draws its first frame -->
|
||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||
<item name="android:forceDarkAllowed">false</item>
|
||||
<item name="android:windowFullscreen">false</item>
|
||||
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
|
||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
This theme determines the color of the Android Window while your
|
||||
|
||||
BIN
assets/icon-w-shadow.png
Normal file
|
After Width: | Height: | Size: 553 KiB |
BIN
assets/icon.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
3
devtools_options.yaml
Normal file
@@ -0,0 +1,3 @@
|
||||
description: This file stores settings for Dart & Flutter DevTools.
|
||||
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
|
||||
extensions:
|
||||
114
ios/Podfile.lock
@@ -1,35 +1,149 @@
|
||||
PODS:
|
||||
- audio_service (0.0.1):
|
||||
- Flutter
|
||||
- audio_session (0.0.1):
|
||||
- Flutter
|
||||
- device_info_plus (0.0.1):
|
||||
- Flutter
|
||||
- Flutter (1.0.0)
|
||||
- flutter_broadcasts (0.0.1):
|
||||
- Flutter
|
||||
- flutter_inappwebview_ios (0.0.1):
|
||||
- Flutter
|
||||
- flutter_inappwebview_ios/Core (= 0.0.1)
|
||||
- OrderedSet (~> 5.0)
|
||||
- flutter_inappwebview_ios/Core (0.0.1):
|
||||
- Flutter
|
||||
- OrderedSet (~> 5.0)
|
||||
- flutter_native_splash (0.0.1):
|
||||
- Flutter
|
||||
- flutter_secure_storage (6.0.0):
|
||||
- Flutter
|
||||
- media_kit_libs_ios_audio (1.0.4):
|
||||
- Flutter
|
||||
- media_kit_native_event_loop (1.0.0):
|
||||
- Flutter
|
||||
- metadata_god (0.0.1):
|
||||
- Flutter
|
||||
- OrderedSet (5.0.0)
|
||||
- package_info_plus (0.4.5):
|
||||
- Flutter
|
||||
- path_provider_foundation (0.0.1):
|
||||
- Flutter
|
||||
- FlutterMacOS
|
||||
- shared_preferences_foundation (0.0.1):
|
||||
- Flutter
|
||||
- FlutterMacOS
|
||||
- sqflite (0.0.3):
|
||||
- Flutter
|
||||
- FlutterMacOS
|
||||
- "sqlite3 (3.46.1+1)":
|
||||
- "sqlite3/common (= 3.46.1+1)"
|
||||
- "sqlite3/common (3.46.1+1)"
|
||||
- "sqlite3/dbstatvtab (3.46.1+1)":
|
||||
- sqlite3/common
|
||||
- "sqlite3/fts5 (3.46.1+1)":
|
||||
- sqlite3/common
|
||||
- "sqlite3/perf-threadsafe (3.46.1+1)":
|
||||
- sqlite3/common
|
||||
- "sqlite3/rtree (3.46.1+1)":
|
||||
- sqlite3/common
|
||||
- sqlite3_flutter_libs (0.0.1):
|
||||
- Flutter
|
||||
- "sqlite3 (~> 3.46.0+1)"
|
||||
- sqlite3/dbstatvtab
|
||||
- sqlite3/fts5
|
||||
- sqlite3/perf-threadsafe
|
||||
- sqlite3/rtree
|
||||
- url_launcher_ios (0.0.1):
|
||||
- Flutter
|
||||
- wakelock_plus (0.0.1):
|
||||
- Flutter
|
||||
|
||||
DEPENDENCIES:
|
||||
- audio_service (from `.symlinks/plugins/audio_service/ios`)
|
||||
- audio_session (from `.symlinks/plugins/audio_session/ios`)
|
||||
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
||||
- Flutter (from `Flutter`)
|
||||
- flutter_broadcasts (from `.symlinks/plugins/flutter_broadcasts/ios`)
|
||||
- flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`)
|
||||
- flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
|
||||
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
|
||||
- media_kit_libs_ios_audio (from `.symlinks/plugins/media_kit_libs_ios_audio/ios`)
|
||||
- media_kit_native_event_loop (from `.symlinks/plugins/media_kit_native_event_loop/ios`)
|
||||
- metadata_god (from `.symlinks/plugins/metadata_god/ios`)
|
||||
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
||||
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
|
||||
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
|
||||
- sqflite (from `.symlinks/plugins/sqflite/darwin`)
|
||||
- sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/ios`)
|
||||
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
||||
- wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`)
|
||||
|
||||
SPEC REPOS:
|
||||
trunk:
|
||||
- OrderedSet
|
||||
- sqlite3
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
audio_service:
|
||||
:path: ".symlinks/plugins/audio_service/ios"
|
||||
audio_session:
|
||||
:path: ".symlinks/plugins/audio_session/ios"
|
||||
device_info_plus:
|
||||
:path: ".symlinks/plugins/device_info_plus/ios"
|
||||
Flutter:
|
||||
:path: Flutter
|
||||
flutter_broadcasts:
|
||||
:path: ".symlinks/plugins/flutter_broadcasts/ios"
|
||||
flutter_inappwebview_ios:
|
||||
:path: ".symlinks/plugins/flutter_inappwebview_ios/ios"
|
||||
flutter_native_splash:
|
||||
:path: ".symlinks/plugins/flutter_native_splash/ios"
|
||||
flutter_secure_storage:
|
||||
:path: ".symlinks/plugins/flutter_secure_storage/ios"
|
||||
media_kit_libs_ios_audio:
|
||||
:path: ".symlinks/plugins/media_kit_libs_ios_audio/ios"
|
||||
media_kit_native_event_loop:
|
||||
:path: ".symlinks/plugins/media_kit_native_event_loop/ios"
|
||||
metadata_god:
|
||||
:path: ".symlinks/plugins/metadata_god/ios"
|
||||
package_info_plus:
|
||||
:path: ".symlinks/plugins/package_info_plus/ios"
|
||||
path_provider_foundation:
|
||||
:path: ".symlinks/plugins/path_provider_foundation/darwin"
|
||||
shared_preferences_foundation:
|
||||
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
|
||||
sqflite:
|
||||
:path: ".symlinks/plugins/sqflite/darwin"
|
||||
sqlite3_flutter_libs:
|
||||
:path: ".symlinks/plugins/sqlite3_flutter_libs/ios"
|
||||
url_launcher_ios:
|
||||
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
||||
wakelock_plus:
|
||||
:path: ".symlinks/plugins/wakelock_plus/ios"
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
audio_service: f509d65da41b9521a61f1c404dd58651f265a567
|
||||
audio_session: 088d2483ebd1dc43f51d253d4a1c517d9a2e7207
|
||||
device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d
|
||||
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
|
||||
flutter_broadcasts: 3ece15b27d8ccbe2132c3df303e7c3401feab882
|
||||
flutter_inappwebview_ios: 97215cf7d4677db55df76782dbd2930c5e1c1ea0
|
||||
flutter_native_splash: edf599c81f74d093a4daf8e17bd7a018854bc778
|
||||
flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12
|
||||
media_kit_libs_ios_audio: 8f39d96a9c630685dfb844c289bd1d114c486fb3
|
||||
media_kit_native_event_loop: 99111eded5acbdc9c2738021ea6550dd36ca8837
|
||||
metadata_god: 4bbd8523cdb5d42c5e59d2fabad01ff8f4bc53f9
|
||||
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
|
||||
package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c
|
||||
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
|
||||
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
|
||||
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
|
||||
sqlite3: 0bb0e6389d824e40296f531b858a2a0b71c0d2fb
|
||||
sqlite3_flutter_libs: c00457ebd31e59fa6bb830380ddba24d44fbcd3b
|
||||
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
|
||||
wakelock_plus: 78ec7c5b202cab7761af8e2b2b3d0671be6c4ae1
|
||||
|
||||
PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796
|
||||
|
||||
|
||||
@@ -161,7 +161,6 @@
|
||||
1CF40EE9C145DC3FDC6C41BF /* Pods-RunnerTests.release.xcconfig */,
|
||||
DAFDCBCA918FE99EC399DF6B /* Pods-RunnerTests.profile.xcconfig */,
|
||||
);
|
||||
name = Pods;
|
||||
path = Pods;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
@@ -474,11 +473,13 @@
|
||||
DEVELOPMENT_TEAM = W7HPZ53V6B;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = GroovyBox;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.music";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.rhythmBox;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.rhythmBox;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
@@ -495,7 +496,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.rhythmBox.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.rhythmBox.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
@@ -513,7 +514,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.rhythmBox.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.rhythmBox.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
@@ -529,7 +530,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.rhythmBox.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.rhythmBox.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
@@ -540,7 +541,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
@@ -597,7 +598,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
@@ -657,11 +658,13 @@
|
||||
DEVELOPMENT_TEAM = W7HPZ53V6B;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = GroovyBox;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.music";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.rhythmBox;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.rhythmBox;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
@@ -680,11 +683,13 @@
|
||||
DEVELOPMENT_TEAM = W7HPZ53V6B;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = GroovyBox;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.music";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.rhythmBox;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.rhythmBox;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 295 B After Width: | Height: | Size: 395 B |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 788 B |
|
Before Width: | Height: | Size: 450 B After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 588 B |
|
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 704 B After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 788 B |
|
Before Width: | Height: | Size: 586 B After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 1009 B |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 762 B After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 4.6 KiB |
22
ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "background.png",
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"filename" : "darkbackground.png",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png
vendored
Normal file
|
After Width: | Height: | Size: 69 B |
BIN
ios/Runner/Assets.xcassets/LaunchBackground.imageset/darkbackground.png
vendored
Normal file
|
After Width: | Height: | Size: 69 B |
@@ -1,23 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "LaunchImage.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "LaunchImage@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "LaunchImage@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 161 KiB |
|
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 339 KiB |
@@ -16,13 +16,19 @@
|
||||
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
|
||||
</imageView>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" image="LaunchBackground" translatesAutoresizingMaskIntoConstraints="NO" id="tWc-Dq-wcI"/>
|
||||
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4"></imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
|
||||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
|
||||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" id="3T2-ad-Qdv"/>
|
||||
<constraint firstItem="tWc-Dq-wcI" firstAttribute="bottom" secondItem="Ze5-6b-2t3" secondAttribute="bottom" id="RPx-PI-7Xg"/>
|
||||
<constraint firstItem="tWc-Dq-wcI" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="SdS-ul-q2q"/>
|
||||
<constraint firstAttribute="trailing" secondItem="tWc-Dq-wcI" secondAttribute="trailing" id="Swv-Gf-Rwn"/>
|
||||
<constraint firstAttribute="trailing" secondItem="YRO-k0-Ey4" secondAttribute="trailing" id="TQA-XW-tRk"/>
|
||||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="bottom" secondItem="Ze5-6b-2t3" secondAttribute="bottom" id="duK-uY-Gun"/>
|
||||
<constraint firstItem="tWc-Dq-wcI" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" id="kV7-tw-vXt"/>
|
||||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="xPn-NY-SIU"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</viewController>
|
||||
@@ -32,6 +38,7 @@
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="LaunchImage" width="168" height="185"/>
|
||||
<image name="LaunchImage" width="2050" height="2048"/>
|
||||
<image name="LaunchBackground" width="1" height="1"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
||||
@@ -2,10 +2,14 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Rhythm Box</string>
|
||||
<string>Groovy Box</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
@@ -13,7 +17,7 @@
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>rhythm_box</string>
|
||||
<string>Groovy Box</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
@@ -22,12 +26,24 @@
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.music</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>NSMicrophoneUsageDescription</key>
|
||||
<string>To provide information for RhythmBox to normalize the output audio</string>
|
||||
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||
<true/>
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>audio</string>
|
||||
</array>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<false/>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
@@ -41,9 +57,5 @@
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
8
lib/collections/formatters.dart
Executable file
@@ -0,0 +1,8 @@
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
final compactNumberFormatter = NumberFormat.compact();
|
||||
final usdFormatter = NumberFormat.compactCurrency(
|
||||
locale: 'en-US',
|
||||
symbol: r'$',
|
||||
decimalDigits: 2,
|
||||
);
|
||||
232
lib/collections/gradients.dart
Executable file
@@ -0,0 +1,232 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
const gradients = [
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(123, 102, 255, 1),
|
||||
Color.fromRGBO(95, 189, 255, 1),
|
||||
Color.fromRGBO(150, 239, 255, 1),
|
||||
Color.fromRGBO(197, 255, 248, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(245, 204, 160, 1),
|
||||
Color.fromRGBO(228, 143, 69, 1),
|
||||
Color.fromRGBO(153, 77, 28, 1),
|
||||
Color.fromRGBO(107, 36, 12, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(243, 243, 243, 1),
|
||||
Color.fromRGBO(197, 232, 152, 1),
|
||||
Color.fromRGBO(41, 173, 178, 1),
|
||||
Color.fromRGBO(7, 102, 173, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(240, 89, 65, 1),
|
||||
Color.fromRGBO(190, 49, 68, 1),
|
||||
Color.fromRGBO(135, 35, 65, 1),
|
||||
Color.fromRGBO(34, 9, 44, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(119, 107, 93, 1),
|
||||
Color.fromRGBO(176, 166, 149, 1),
|
||||
Color.fromRGBO(235, 227, 213, 1),
|
||||
Color.fromRGBO(243, 238, 234, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(208, 162, 247, 1),
|
||||
Color.fromRGBO(220, 191, 255, 1),
|
||||
Color.fromRGBO(229, 212, 255, 1),
|
||||
Color.fromRGBO(241, 234, 255, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(221, 242, 253, 1),
|
||||
Color.fromRGBO(155, 190, 200, 1),
|
||||
Color.fromRGBO(66, 125, 157, 1),
|
||||
Color.fromRGBO(22, 72, 99, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(119, 67, 219, 1),
|
||||
Color.fromRGBO(195, 172, 208, 1),
|
||||
Color.fromRGBO(247, 239, 229, 1),
|
||||
Color.fromRGBO(255, 251, 245, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(194, 217, 255, 1),
|
||||
Color.fromRGBO(142, 143, 250, 1),
|
||||
Color.fromRGBO(119, 82, 254, 1),
|
||||
Color.fromRGBO(25, 4, 130, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(104, 126, 255, 1),
|
||||
Color.fromRGBO(128, 179, 255, 1),
|
||||
Color.fromRGBO(152, 228, 255, 1),
|
||||
Color.fromRGBO(182, 255, 250, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(176, 87, 141, 1),
|
||||
Color.fromRGBO(217, 136, 185, 1),
|
||||
Color.fromRGBO(250, 203, 234, 1),
|
||||
Color.fromRGBO(255, 228, 214, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(190, 255, 247, 1),
|
||||
Color.fromRGBO(166, 246, 255, 1),
|
||||
Color.fromRGBO(158, 221, 255, 1),
|
||||
Color.fromRGBO(100, 153, 233, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(245, 252, 205, 1),
|
||||
Color.fromRGBO(120, 214, 198, 1),
|
||||
Color.fromRGBO(65, 145, 151, 1),
|
||||
Color.fromRGBO(18, 72, 107, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(229, 207, 247, 1),
|
||||
Color.fromRGBO(157, 118, 193, 1),
|
||||
Color.fromRGBO(113, 58, 190, 1),
|
||||
Color.fromRGBO(91, 8, 136, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(249, 222, 201, 1),
|
||||
Color.fromRGBO(247, 140, 162, 1),
|
||||
Color.fromRGBO(216, 0, 50, 1),
|
||||
Color.fromRGBO(61, 12, 17, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(242, 247, 161, 1),
|
||||
Color.fromRGBO(53, 162, 159, 1),
|
||||
Color.fromRGBO(8, 131, 149, 1),
|
||||
Color.fromRGBO(7, 25, 82, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(243, 159, 90, 1),
|
||||
Color.fromRGBO(174, 68, 90, 1),
|
||||
Color.fromRGBO(102, 37, 73, 1),
|
||||
Color.fromRGBO(69, 25, 82, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(255, 200, 200, 1),
|
||||
Color.fromRGBO(255, 155, 130, 1),
|
||||
Color.fromRGBO(255, 63, 164, 1),
|
||||
Color.fromRGBO(87, 55, 93, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(238, 238, 238, 1),
|
||||
Color.fromRGBO(100, 204, 197, 1),
|
||||
Color.fromRGBO(23, 107, 135, 1),
|
||||
Color.fromRGBO(5, 59, 80, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(198, 61, 47, 1),
|
||||
Color.fromRGBO(226, 94, 62, 1),
|
||||
Color.fromRGBO(255, 155, 80, 1),
|
||||
Color.fromRGBO(255, 187, 92, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(236, 83, 176, 1),
|
||||
Color.fromRGBO(157, 68, 192, 1),
|
||||
Color.fromRGBO(77, 45, 183, 1),
|
||||
Color.fromRGBO(14, 33, 160, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(242, 236, 190, 1),
|
||||
Color.fromRGBO(226, 199, 153, 1),
|
||||
Color.fromRGBO(192, 130, 97, 1),
|
||||
Color.fromRGBO(154, 59, 59, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(255, 253, 140, 1),
|
||||
Color.fromRGBO(151, 255, 244, 1),
|
||||
Color.fromRGBO(112, 145, 245, 1),
|
||||
Color.fromRGBO(121, 63, 223, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(67, 83, 52, 1),
|
||||
Color.fromRGBO(158, 179, 132, 1),
|
||||
Color.fromRGBO(206, 222, 189, 1),
|
||||
Color.fromRGBO(250, 241, 228, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(250, 240, 230, 1),
|
||||
Color.fromRGBO(185, 180, 199, 1),
|
||||
Color.fromRGBO(92, 84, 112, 1),
|
||||
Color.fromRGBO(53, 47, 68, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(255, 186, 134, 1),
|
||||
Color.fromRGBO(246, 99, 92, 1),
|
||||
Color.fromRGBO(194, 51, 115, 1),
|
||||
Color.fromRGBO(121, 21, 91, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(213, 255, 208, 1),
|
||||
Color.fromRGBO(64, 248, 255, 1),
|
||||
Color.fromRGBO(39, 158, 255, 1),
|
||||
Color.fromRGBO(12, 53, 106, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(131, 96, 150, 1),
|
||||
Color.fromRGBO(237, 123, 123, 1),
|
||||
Color.fromRGBO(240, 184, 110, 1),
|
||||
Color.fromRGBO(235, 231, 108, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(63, 29, 56, 1),
|
||||
Color.fromRGBO(77, 60, 119, 1),
|
||||
Color.fromRGBO(162, 103, 138, 1),
|
||||
Color.fromRGBO(225, 152, 152, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(254, 123, 229, 1),
|
||||
Color.fromRGBO(151, 78, 195, 1),
|
||||
Color.fromRGBO(80, 64, 153, 1),
|
||||
Color.fromRGBO(49, 56, 102, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(248, 222, 34, 1),
|
||||
Color.fromRGBO(249, 76, 16, 1),
|
||||
Color.fromRGBO(199, 0, 57, 1),
|
||||
Color.fromRGBO(144, 12, 63, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(101, 69, 31, 1),
|
||||
Color.fromRGBO(118, 88, 39, 1),
|
||||
Color.fromRGBO(200, 174, 125, 1),
|
||||
Color.fromRGBO(234, 198, 150, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(255, 246, 224, 1),
|
||||
Color.fromRGBO(216, 217, 218, 1),
|
||||
Color.fromRGBO(97, 103, 122, 1),
|
||||
Color.fromRGBO(39, 40, 41, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(145, 109, 179, 1),
|
||||
Color.fromRGBO(228, 133, 134, 1),
|
||||
Color.fromRGBO(252, 186, 173, 1),
|
||||
Color.fromRGBO(253, 229, 236, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(124, 115, 192, 1),
|
||||
Color.fromRGBO(148, 173, 215, 1),
|
||||
Color.fromRGBO(172, 250, 223, 1),
|
||||
Color.fromRGBO(232, 255, 206, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(174, 216, 204, 1),
|
||||
Color.fromRGBO(205, 102, 136, 1),
|
||||
Color.fromRGBO(122, 49, 111, 1),
|
||||
Color.fromRGBO(70, 25, 89, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(237, 228, 255, 1),
|
||||
Color.fromRGBO(215, 187, 245, 1),
|
||||
Color.fromRGBO(160, 118, 249, 1),
|
||||
Color.fromRGBO(101, 40, 247, 1)
|
||||
]),
|
||||
LinearGradient(colors: [
|
||||
Color.fromRGBO(255, 236, 175, 1),
|
||||
Color.fromRGBO(255, 176, 127, 1),
|
||||
Color.fromRGBO(255, 82, 162, 1),
|
||||
Color.fromRGBO(243, 21, 89, 1)
|
||||
]),
|
||||
];
|
||||
26
lib/collections/initializers.dart
Executable file
@@ -0,0 +1,26 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:rhythm_box/platform.dart';
|
||||
import 'package:win32_registry/win32_registry.dart';
|
||||
|
||||
Future<void> registerWindowsScheme(String scheme) async {
|
||||
if (!PlatformInfo.isWindows) return;
|
||||
String appPath = Platform.resolvedExecutable;
|
||||
|
||||
String protocolRegKey = 'Software\\Classes\\$scheme';
|
||||
RegistryValue protocolRegValue = const RegistryValue(
|
||||
'URL Protocol',
|
||||
RegistryValueType.string,
|
||||
'',
|
||||
);
|
||||
String protocolCmdRegKey = 'shell\\open\\command';
|
||||
RegistryValue protocolCmdRegValue = RegistryValue(
|
||||
'',
|
||||
RegistryValueType.string,
|
||||
'"$appPath" "%1"',
|
||||
);
|
||||
|
||||
final regKey = Registry.currentUser.createKey(protocolRegKey);
|
||||
regKey.createValue(protocolRegValue);
|
||||
regKey.createKey(protocolCmdRegKey).createValue(protocolCmdRegValue);
|
||||
}
|
||||
88
lib/collections/intents.dart
Executable file
@@ -0,0 +1,88 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:rhythm_box/platform.dart';
|
||||
import 'package:rhythm_box/services/audio_player/audio_player.dart';
|
||||
|
||||
class PlayPauseIntent extends Intent {
|
||||
const PlayPauseIntent();
|
||||
}
|
||||
|
||||
class PlayPauseAction extends Action<PlayPauseIntent> {
|
||||
@override
|
||||
invoke(intent) async {
|
||||
if (!audioPlayer.isPlaying) {
|
||||
await audioPlayer.resume();
|
||||
} else {
|
||||
await audioPlayer.pause();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
class NavigationIntent extends Intent {
|
||||
final GoRouter router;
|
||||
final String path;
|
||||
const NavigationIntent(this.router, this.path);
|
||||
}
|
||||
|
||||
class NavigationAction extends Action<NavigationIntent> {
|
||||
@override
|
||||
invoke(intent) {
|
||||
intent.router.go(intent.path);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
enum HomeTabs {
|
||||
browse,
|
||||
search,
|
||||
library,
|
||||
lyrics,
|
||||
}
|
||||
|
||||
class HomeTabIntent extends Intent {
|
||||
final HomeTabs tab;
|
||||
const HomeTabIntent({required this.tab});
|
||||
}
|
||||
|
||||
class HomeTabAction extends Action<HomeTabIntent> {
|
||||
@override
|
||||
invoke(intent) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
class SeekIntent extends Intent {
|
||||
final bool forward;
|
||||
const SeekIntent(this.forward);
|
||||
}
|
||||
|
||||
class SeekAction extends Action<SeekIntent> {
|
||||
@override
|
||||
invoke(intent) async {
|
||||
final position = audioPlayer.position.inSeconds;
|
||||
await audioPlayer.seek(
|
||||
Duration(
|
||||
seconds: intent.forward ? position + 5 : position - 5,
|
||||
),
|
||||
);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
class CloseAppIntent extends Intent {}
|
||||
|
||||
class CloseAppAction extends Action<CloseAppIntent> {
|
||||
@override
|
||||
invoke(intent) {
|
||||
if (PlatformInfo.isDesktop) {
|
||||
exit(0);
|
||||
} else {
|
||||
SystemNavigator.pop();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
757
lib/collections/language_codes.dart
Executable file
@@ -0,0 +1,757 @@
|
||||
class ISOLanguageName {
|
||||
final String name;
|
||||
final String nativeName;
|
||||
|
||||
const ISOLanguageName({
|
||||
required this.name,
|
||||
required this.nativeName,
|
||||
});
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return '$name ($nativeName)';
|
||||
}
|
||||
}
|
||||
|
||||
// Uncomment the languages as we add support for them
|
||||
// Currently supported: bn,en,fr,hi,zh
|
||||
abstract class LanguageLocals {
|
||||
static final Map isoLangs = {
|
||||
// "ab": const ISOLanguageName(
|
||||
// name: "Abkhaz",
|
||||
// nativeName: "аҧсуа",
|
||||
// ),
|
||||
// "aa": const ISOLanguageName(
|
||||
// name: "Afar",
|
||||
// nativeName: "Afaraf",
|
||||
// ),
|
||||
// "af": const ISOLanguageName(
|
||||
// name: "Afrikaans",
|
||||
// nativeName: "Afrikaans",
|
||||
// ),
|
||||
// "ak": const ISOLanguageName(
|
||||
// name: "Akan",
|
||||
// nativeName: "Akan",
|
||||
// ),
|
||||
// "sq": const ISOLanguageName(
|
||||
// name: "Albanian",
|
||||
// nativeName: "Shqip",
|
||||
// ),
|
||||
// "am": const ISOLanguageName(
|
||||
// name: "Amharic",
|
||||
// nativeName: "አማርኛ",
|
||||
// ),
|
||||
'ar': const ISOLanguageName(
|
||||
name: 'Arabic',
|
||||
nativeName: 'العربية',
|
||||
),
|
||||
// "an": const ISOLanguageName(
|
||||
// name: "Aragonese",
|
||||
// nativeName: "Aragonés",
|
||||
// ),
|
||||
// "hy": const ISOLanguageName(
|
||||
// name: "Armenian",
|
||||
// nativeName: "Հայերեն",
|
||||
// ),
|
||||
// "as": const ISOLanguageName(
|
||||
// name: "Assamese",
|
||||
// nativeName: "অসমীয়া",
|
||||
// ),
|
||||
// "av": const ISOLanguageName(
|
||||
// name: "Avaric",
|
||||
// nativeName: "авар мацӀ, магӀарул мацӀ",
|
||||
// ),
|
||||
// "ae": const ISOLanguageName(
|
||||
// name: "Avestan",
|
||||
// nativeName: "avesta",
|
||||
// ),
|
||||
// "ay": const ISOLanguageName(
|
||||
// name: "Aymara",
|
||||
// nativeName: "aymar aru",
|
||||
// ),
|
||||
// "az": const ISOLanguageName(
|
||||
// name: "Azerbaijani",
|
||||
// nativeName: "azərbaycan dili",
|
||||
// ),
|
||||
// "bm": const ISOLanguageName(
|
||||
// name: "Bambara",
|
||||
// nativeName: "bamanankan",
|
||||
// ),
|
||||
// "ba": const ISOLanguageName(
|
||||
// name: "Bashkir",
|
||||
// nativeName: "башҡорт теле",
|
||||
// ),
|
||||
'eu': const ISOLanguageName(
|
||||
name: 'Basque',
|
||||
nativeName: 'Euskara',
|
||||
),
|
||||
// "be": const ISOLanguageName(
|
||||
// name: "Belarusian",
|
||||
// nativeName: "Беларуская",
|
||||
// ),
|
||||
'bn': const ISOLanguageName(
|
||||
name: 'Bengali',
|
||||
nativeName: 'বাংলা',
|
||||
),
|
||||
// "bh": const ISOLanguageName(
|
||||
// name: "Bihari",
|
||||
// nativeName: "भोजपुरी",
|
||||
// ),
|
||||
// "bi": const ISOLanguageName(
|
||||
// name: "Bislama",
|
||||
// nativeName: "Bislama",
|
||||
// ),
|
||||
// "bs": const ISOLanguageName(
|
||||
// name: "Bosnian",
|
||||
// nativeName: "bosanski jezik",
|
||||
// ),
|
||||
// "br": const ISOLanguageName(
|
||||
// name: "Breton",
|
||||
// nativeName: "brezhoneg",
|
||||
// ),
|
||||
// "bg": const ISOLanguageName(
|
||||
// name: "Bulgarian",
|
||||
// nativeName: "български език",
|
||||
// ),
|
||||
// "my": const ISOLanguageName(
|
||||
// name: "Burmese",
|
||||
// nativeName: "ဗမာစာ",
|
||||
// ),
|
||||
'ca': const ISOLanguageName(
|
||||
name: 'Catalan',
|
||||
nativeName: 'Català',
|
||||
),
|
||||
// "ch": const ISOLanguageName(
|
||||
// name: "Chamorro",
|
||||
// nativeName: "Chamoru",
|
||||
// ),
|
||||
// "ce": const ISOLanguageName(
|
||||
// name: "Chechen",
|
||||
// nativeName: "нохчийн мотт",
|
||||
// ),
|
||||
// "ny": const ISOLanguageName(
|
||||
// name: "Chichewa",
|
||||
// nativeName: "chiCheŵa",
|
||||
// ),
|
||||
'zh': const ISOLanguageName(
|
||||
name: 'Simplified Chinese',
|
||||
nativeName: '简体中文',
|
||||
),
|
||||
// "cv": const ISOLanguageName(
|
||||
// name: "Chuvash",
|
||||
// nativeName: "чӑваш чӗлхи",
|
||||
// ),
|
||||
// "kw": const ISOLanguageName(
|
||||
// name: "Cornish",
|
||||
// nativeName: "Kernewek",
|
||||
// ),
|
||||
// "co": const ISOLanguageName(
|
||||
// name: "Corsican",
|
||||
// nativeName: "lingua corsa",
|
||||
// ),
|
||||
// "cr": const ISOLanguageName(
|
||||
// name: "Cree",
|
||||
// nativeName: "ᓀᐦᐃᔭᐍᐏᐣ",
|
||||
// ),
|
||||
// "hr": const ISOLanguageName(
|
||||
// name: "Croatian",
|
||||
// nativeName: "hrvatski",
|
||||
// ),
|
||||
'cs': const ISOLanguageName(
|
||||
name: 'Czech',
|
||||
nativeName: 'česky, čeština',
|
||||
),
|
||||
// "da": const ISOLanguageName(
|
||||
// name: "Danish",
|
||||
// nativeName: "dansk",
|
||||
// ),
|
||||
// "dv": const ISOLanguageName(
|
||||
// name: "Maldivian;",
|
||||
// nativeName: "ދިވެހި",
|
||||
// ),
|
||||
'nl': const ISOLanguageName(
|
||||
name: 'Dutch',
|
||||
nativeName: 'Nederlands',
|
||||
),
|
||||
'en': const ISOLanguageName(
|
||||
name: 'English',
|
||||
nativeName: 'English',
|
||||
),
|
||||
// "eo": const ISOLanguageName(
|
||||
// name: "Esperanto",
|
||||
// nativeName: "Esperanto",
|
||||
// ),
|
||||
// "et": const ISOLanguageName(
|
||||
// name: "Estonian",
|
||||
// nativeName: "eesti",
|
||||
// ),
|
||||
// "ee": const ISOLanguageName(
|
||||
// name: "Ewe",
|
||||
// nativeName: "Eʋegbe",
|
||||
// ),
|
||||
// "fo": const ISOLanguageName(
|
||||
// name: "Faroese",
|
||||
// nativeName: "føroyskt",
|
||||
// ),
|
||||
// "fj": const ISOLanguageName(
|
||||
// name: "Fijian",
|
||||
// nativeName: "vosa Vakaviti",
|
||||
// ),
|
||||
'fi': const ISOLanguageName(
|
||||
name: 'Finnish',
|
||||
nativeName: 'suomi',
|
||||
),
|
||||
'fr': const ISOLanguageName(
|
||||
name: 'French',
|
||||
nativeName: 'français',
|
||||
),
|
||||
// "ff": const ISOLanguageName(
|
||||
// name: "Fula; Fulah; Pulaar; Pular",
|
||||
// nativeName: "Fulfulde, Pulaar, Pular",
|
||||
// ),
|
||||
// "gl": const ISOLanguageName(
|
||||
// name: "Galician",
|
||||
// nativeName: "Galego",
|
||||
// ),
|
||||
'ka': const ISOLanguageName(
|
||||
name: 'Georgian',
|
||||
nativeName: 'ქართული',
|
||||
),
|
||||
'de': const ISOLanguageName(
|
||||
name: 'German',
|
||||
nativeName: 'Deutsch',
|
||||
),
|
||||
// "el": const ISOLanguageName(
|
||||
// name: "Greek, Modern",
|
||||
// nativeName: "Ελληνικά",
|
||||
// ),
|
||||
// "gn": const ISOLanguageName(
|
||||
// name: "Guaraní",
|
||||
// nativeName: "Avañeẽ",
|
||||
// ),
|
||||
// "gu": const ISOLanguageName(
|
||||
// name: "Gujarati",
|
||||
// nativeName: "ગુજરાતી",
|
||||
// ),
|
||||
// "ht": const ISOLanguageName(
|
||||
// name: "Haitian; Haitian Creole",
|
||||
// nativeName: "Kreyòl ayisyen",
|
||||
// ),
|
||||
// "ha": const ISOLanguageName(
|
||||
// name: "Hausa",
|
||||
// nativeName: "Hausa, هَوُسَ",
|
||||
// ),
|
||||
// "he": const ISOLanguageName(
|
||||
// name: "Hebrew (modern)",
|
||||
// nativeName: "עברית",
|
||||
// ),
|
||||
// "hz": const ISOLanguageName(
|
||||
// name: "Herero",
|
||||
// nativeName: "Otjiherero",
|
||||
// ),
|
||||
'hi': const ISOLanguageName(
|
||||
name: 'Hindi',
|
||||
nativeName: 'हिन्दी, हिंदी',
|
||||
),
|
||||
// "ho": const ISOLanguageName(
|
||||
// name: "Hiri Motu",
|
||||
// nativeName: "Hiri Motu",
|
||||
// ),
|
||||
// "hu": const ISOLanguageName(
|
||||
// name: "Hungarian",
|
||||
// nativeName: "Magyar",
|
||||
// ),
|
||||
// "ia": const ISOLanguageName(
|
||||
// name: "Interlingua",
|
||||
// nativeName: "Interlingua",
|
||||
// ),
|
||||
'id': const ISOLanguageName(
|
||||
name: 'Indonesian',
|
||||
nativeName: 'Bahasa Indonesia',
|
||||
),
|
||||
// "ie": const ISOLanguageName(
|
||||
// name: "Interlingue",
|
||||
// nativeName: "Occidental",
|
||||
// ),
|
||||
// "ga": const ISOLanguageName(
|
||||
// name: "Irish",
|
||||
// nativeName: "Gaeilge",
|
||||
// ),
|
||||
// "ig": const ISOLanguageName(
|
||||
// name: "Igbo",
|
||||
// nativeName: "Asụsụ Igbo",
|
||||
// ),
|
||||
// "ik": const ISOLanguageName(
|
||||
// name: "Inupiaq",
|
||||
// nativeName: "Iñupiaq, Iñupiatun",
|
||||
// ),
|
||||
// "io": const ISOLanguageName(
|
||||
// name: "Ido",
|
||||
// nativeName: "Ido",
|
||||
// ),
|
||||
// "is": const ISOLanguageName(
|
||||
// name: "Icelandic",
|
||||
// nativeName: "Íslenska",
|
||||
// ),
|
||||
'it': const ISOLanguageName(
|
||||
name: 'Italian',
|
||||
nativeName: 'Italiano',
|
||||
),
|
||||
// "iu": const ISOLanguageName(
|
||||
// name: "Inuktitut",
|
||||
// nativeName: "ᐃᓄᒃᑎᑐᑦ",
|
||||
// ),
|
||||
'ja': const ISOLanguageName(
|
||||
name: 'Japanese',
|
||||
nativeName: '日本語',
|
||||
),
|
||||
// "jv": const ISOLanguageName(
|
||||
// name: "Javanese",
|
||||
// nativeName: "basa Jawa",
|
||||
// ),
|
||||
// "kl": const ISOLanguageName(
|
||||
// name: "Kalaallisut, Greenlandic",
|
||||
// nativeName: "kalaallisut, kalaallit oqaasii",
|
||||
// ),
|
||||
// "kn": const ISOLanguageName(
|
||||
// name: "Kannada",
|
||||
// nativeName: "ಕನ್ನಡ",
|
||||
// ),
|
||||
// "kr": const ISOLanguageName(
|
||||
// name: "Kanuri",
|
||||
// nativeName: "Kanuri",
|
||||
// ),
|
||||
// "ks": const ISOLanguageName(
|
||||
// name: "Kashmiri",
|
||||
// nativeName: "कश्मीरी, كشميري",
|
||||
// ),
|
||||
// "kk": const ISOLanguageName(
|
||||
// name: "Kazakh",
|
||||
// nativeName: "Қазақ тілі",
|
||||
// ),
|
||||
// "km": const ISOLanguageName(
|
||||
// name: "Khmer",
|
||||
// nativeName: "ភាសាខ្មែរ",
|
||||
// ),
|
||||
// "ki": const ISOLanguageName(
|
||||
// name: "Kikuyu, Gikuyu",
|
||||
// nativeName: "Gĩkũyũ",
|
||||
// ),
|
||||
// "rw": const ISOLanguageName(
|
||||
// name: "Kinyarwanda",
|
||||
// nativeName: "Ikinyarwanda",
|
||||
// ),
|
||||
// "ky": const ISOLanguageName(
|
||||
// name: "Kirghiz, Kyrgyz",
|
||||
// nativeName: "кыргыз тили",
|
||||
// ),
|
||||
// "kv": const ISOLanguageName(
|
||||
// name: "Komi",
|
||||
// nativeName: "коми кыв",
|
||||
// ),
|
||||
// "kg": const ISOLanguageName(
|
||||
// name: "Kongo",
|
||||
// nativeName: "KiKongo",
|
||||
// ),
|
||||
'ko': const ISOLanguageName(
|
||||
name: 'Korean',
|
||||
nativeName: '한국어 (韓國語), 조선말 (朝鮮語)',
|
||||
),
|
||||
// "ku": const ISOLanguageName(
|
||||
// name: "Kurdish",
|
||||
// nativeName: "Kurdî, كوردی",
|
||||
// ),
|
||||
// "kj": const ISOLanguageName(
|
||||
// name: "Kwanyama, Kuanyama",
|
||||
// nativeName: "Kuanyama",
|
||||
// ),
|
||||
// "la": const ISOLanguageName(
|
||||
// name: "Latin",
|
||||
// nativeName: "latine, lingua latina",
|
||||
// ),
|
||||
// "lb": const ISOLanguageName(
|
||||
// name: "Luxembourgish, Letzeburgesch",
|
||||
// nativeName: "Lëtzebuergesch",
|
||||
// ),
|
||||
// "lg": const ISOLanguageName(
|
||||
// name: "Luganda",
|
||||
// nativeName: "Luganda",
|
||||
// ),
|
||||
// "li": const ISOLanguageName(
|
||||
// name: "Limburgish, Limburgan, Limburger",
|
||||
// nativeName: "Limburgs",
|
||||
// ),
|
||||
// "ln": const ISOLanguageName(
|
||||
// name: "Lingala",
|
||||
// nativeName: "Lingála",
|
||||
// ),
|
||||
// "lo": const ISOLanguageName(
|
||||
// name: "Lao",
|
||||
// nativeName: "ພາສາລາວ",
|
||||
// ),
|
||||
// "lt": const ISOLanguageName(
|
||||
// name: "Lithuanian",
|
||||
// nativeName: "lietuvių kalba",
|
||||
// ),
|
||||
// "lu": const ISOLanguageName(
|
||||
// name: "Luba-Katanga",
|
||||
// nativeName: "",
|
||||
// ),
|
||||
// "lv": const ISOLanguageName(
|
||||
// name: "Latvian",
|
||||
// nativeName: "latviešu valoda",
|
||||
// ),
|
||||
// "gv": const ISOLanguageName(
|
||||
// name: "Manx",
|
||||
// nativeName: "Gaelg, Gailck",
|
||||
// ),
|
||||
// "mk": const ISOLanguageName(
|
||||
// name: "Macedonian",
|
||||
// nativeName: "македонски јазик",
|
||||
// ),
|
||||
// "mg": const ISOLanguageName(
|
||||
// name: "Malagasy",
|
||||
// nativeName: "Malagasy fiteny",
|
||||
// ),
|
||||
// "ms": const ISOLanguageName(
|
||||
// name: "Malay",
|
||||
// nativeName: "bahasa Melayu, بهاس ملايو",
|
||||
// ),
|
||||
// "ml": const ISOLanguageName(
|
||||
// name: "Malayalam",
|
||||
// nativeName: "മലയാളം",
|
||||
// ),
|
||||
// "mt": const ISOLanguageName(
|
||||
// name: "Maltese",
|
||||
// nativeName: "Malti",
|
||||
// ),
|
||||
// "mi": const ISOLanguageName(
|
||||
// name: "Māori",
|
||||
// nativeName: "te reo Māori",
|
||||
// ),
|
||||
// "mr": const ISOLanguageName(
|
||||
// name: "Marathi (Marāṭhī)",
|
||||
// nativeName: "मराठी",
|
||||
// ),
|
||||
// "mh": const ISOLanguageName(
|
||||
// name: "Marshallese",
|
||||
// nativeName: "Kajin M̧ajeļ",
|
||||
// ),
|
||||
// "mn": const ISOLanguageName(
|
||||
// name: "Mongolian",
|
||||
// nativeName: "монгол",
|
||||
// ),
|
||||
// "na": const ISOLanguageName(
|
||||
// name: "Nauru",
|
||||
// nativeName: "Ekakairũ Naoero",
|
||||
// ),
|
||||
// "nv": const ISOLanguageName(
|
||||
// name: "Navajo, Navaho",
|
||||
// nativeName: "Diné bizaad, Dinékʼehǰí",
|
||||
// ),
|
||||
// "nb": const ISOLanguageName(
|
||||
// name: "Norwegian Bokmål",
|
||||
// nativeName: "Norsk bokmål",
|
||||
// ),
|
||||
// "nd": const ISOLanguageName(
|
||||
// name: "North Ndebele",
|
||||
// nativeName: "isiNdebele",
|
||||
// ),
|
||||
'ne': const ISOLanguageName(
|
||||
name: 'Nepali',
|
||||
nativeName: 'नेपाली',
|
||||
),
|
||||
// "ng": const ISOLanguageName(
|
||||
// name: "Ndonga",
|
||||
// nativeName: "Owambo",
|
||||
// ),
|
||||
// "nn": const ISOLanguageName(
|
||||
// name: "Norwegian Nynorsk",
|
||||
// nativeName: "Norsk nynorsk",
|
||||
// ),
|
||||
// "no": const ISOLanguageName(
|
||||
// name: "Norwegian",
|
||||
// nativeName: "Norsk",
|
||||
// ),
|
||||
// "ii": const ISOLanguageName(
|
||||
// name: "Nuosu",
|
||||
// nativeName: "ꆈꌠ꒿ Nuosuhxop",
|
||||
// ),
|
||||
// "nr": const ISOLanguageName(
|
||||
// name: "South Ndebele",
|
||||
// nativeName: "isiNdebele",
|
||||
// ),
|
||||
// "oc": const ISOLanguageName(
|
||||
// name: "Occitan",
|
||||
// nativeName: "Occitan",
|
||||
// ),
|
||||
// "oj": const ISOLanguageName(
|
||||
// name: "Ojibwe, Ojibwa",
|
||||
// nativeName: "ᐊᓂᔑᓈᐯᒧᐎᓐ",
|
||||
// ),
|
||||
// "cu": const ISOLanguageName(
|
||||
// name: "Old Church Slavonic",
|
||||
// nativeName: "ѩзыкъ словѣньскъ",
|
||||
// ),
|
||||
// "om": const ISOLanguageName(
|
||||
// name: "Oromo",
|
||||
// nativeName: "Afaan Oromoo",
|
||||
// ),
|
||||
// "or": const ISOLanguageName(
|
||||
// name: "Oriya",
|
||||
// nativeName: "ଓଡ଼ିଆ",
|
||||
// ),
|
||||
// "os": const ISOLanguageName(
|
||||
// name: "Ossetian, Ossetic",
|
||||
// nativeName: "ирон æвзаг",
|
||||
// ),
|
||||
// "pa": const ISOLanguageName(
|
||||
// name: "Panjabi, Punjabi",
|
||||
// nativeName: "ਪੰਜਾਬੀ, پنجابی",
|
||||
// ),
|
||||
// "pi": const ISOLanguageName(
|
||||
// name: "Pāli",
|
||||
// nativeName: "पाऴि",
|
||||
// ),
|
||||
'fa': const ISOLanguageName(
|
||||
name: 'Persian',
|
||||
nativeName: 'فارسی',
|
||||
),
|
||||
'pl': const ISOLanguageName(
|
||||
name: 'Polish',
|
||||
nativeName: 'polski',
|
||||
),
|
||||
// "ps": const ISOLanguageName(
|
||||
// name: "Pashto, Pushto",
|
||||
// nativeName: "پښتو",
|
||||
// ),
|
||||
'pt': const ISOLanguageName(
|
||||
name: 'Portuguese',
|
||||
nativeName: 'Português',
|
||||
),
|
||||
// "qu": const ISOLanguageName(
|
||||
// name: "Quechua",
|
||||
// nativeName: "Runa Simi, Kichwa",
|
||||
// ),
|
||||
// "rm": const ISOLanguageName(
|
||||
// name: "Romansh",
|
||||
// nativeName: "rumantsch grischun",
|
||||
// ),
|
||||
// "rn": const ISOLanguageName(
|
||||
// name: "Kirundi",
|
||||
// nativeName: "kiRundi",
|
||||
// ),
|
||||
// "ro": const ISOLanguageName(
|
||||
// name: "Romanian, Moldavian, Moldovan",
|
||||
// nativeName: "română",
|
||||
// ),
|
||||
'ru': const ISOLanguageName(
|
||||
name: 'Russian',
|
||||
nativeName: 'русский язык',
|
||||
),
|
||||
// "sa": const ISOLanguageName(
|
||||
// name: "Sanskrit (Saṁskṛta)",
|
||||
// nativeName: "संस्कृतम्",
|
||||
// ),
|
||||
// "sc": const ISOLanguageName(
|
||||
// name: "Sardinian",
|
||||
// nativeName: "sardu",
|
||||
// ),
|
||||
// "sd": const ISOLanguageName(
|
||||
// name: "Sindhi",
|
||||
// nativeName: "सिन्धी, سنڌي، سندھی",
|
||||
// ),
|
||||
// "se": const ISOLanguageName(
|
||||
// name: "Northern Sami",
|
||||
// nativeName: "Davvisámegiella",
|
||||
// ),
|
||||
// "sm": const ISOLanguageName(
|
||||
// name: "Samoan",
|
||||
// nativeName: "gagana faa Samoa",
|
||||
// ),
|
||||
// "sg": const ISOLanguageName(
|
||||
// name: "Sango",
|
||||
// nativeName: "yângâ tî sängö",
|
||||
// ),
|
||||
// "sr": const ISOLanguageName(
|
||||
// name: "Serbian",
|
||||
// nativeName: "српски језик",
|
||||
// ),
|
||||
// "gd": const ISOLanguageName(
|
||||
// name: "Scottish Gaelic; Gaelic",
|
||||
// nativeName: "Gàidhlig",
|
||||
// ),
|
||||
// "sn": const ISOLanguageName(
|
||||
// name: "Shona",
|
||||
// nativeName: "chiShona",
|
||||
// ),
|
||||
// "si": const ISOLanguageName(
|
||||
// name: "Sinhala, Sinhalese",
|
||||
// nativeName: "සිංහල",
|
||||
// ),
|
||||
// "sk": const ISOLanguageName(
|
||||
// name: "Slovak",
|
||||
// nativeName: "slovenčina",
|
||||
// ),
|
||||
// "sl": const ISOLanguageName(
|
||||
// name: "Slovene",
|
||||
// nativeName: "slovenščina",
|
||||
// ),
|
||||
// "so": const ISOLanguageName(
|
||||
// name: "Somali",
|
||||
// nativeName: "Soomaaliga, af Soomaali",
|
||||
// ),
|
||||
// "st": const ISOLanguageName(
|
||||
// name: "Southern Sotho",
|
||||
// nativeName: "Sesotho",
|
||||
// ),
|
||||
'es': const ISOLanguageName(
|
||||
name: 'Spanish',
|
||||
nativeName: 'español',
|
||||
),
|
||||
// "su": const ISOLanguageName(
|
||||
// name: "Sundanese",
|
||||
// nativeName: "Basa Sunda",
|
||||
// ),
|
||||
// "sw": const ISOLanguageName(
|
||||
// name: "Swahili",
|
||||
// nativeName: "Kiswahili",
|
||||
// ),
|
||||
// "ss": const ISOLanguageName(
|
||||
// name: "Swati",
|
||||
// nativeName: "SiSwati",
|
||||
// ),
|
||||
// "sv": const ISOLanguageName(
|
||||
// name: "Swedish",
|
||||
// nativeName: "svenska",
|
||||
// ),
|
||||
// "ta": const ISOLanguageName(
|
||||
// name: "Tamil",
|
||||
// nativeName: "தமிழ்",
|
||||
// ),
|
||||
// "te": const ISOLanguageName(
|
||||
// name: "Telugu",
|
||||
// nativeName: "తెలుగు",
|
||||
// ),
|
||||
// "tg": const ISOLanguageName(
|
||||
// name: "Tajik",
|
||||
// nativeName: "тоҷикӣ, toğikī, تاجیکی",
|
||||
// ),
|
||||
'th': const ISOLanguageName(
|
||||
name: 'Thai',
|
||||
nativeName: 'ไทย',
|
||||
),
|
||||
// "ti": const ISOLanguageName(
|
||||
// name: "Tigrinya",
|
||||
// nativeName: "ትግርኛ",
|
||||
// ),
|
||||
// "bo": const ISOLanguageName(
|
||||
// name: "Tibetan Standard, Tibetan, Central",
|
||||
// nativeName: "བོད་ཡིག",
|
||||
// ),
|
||||
// "tk": const ISOLanguageName(
|
||||
// name: "Turkmen",
|
||||
// nativeName: "Türkmen, Түркмен",
|
||||
// ),
|
||||
// "tl": const ISOLanguageName(
|
||||
// name: "Tagalog",
|
||||
// nativeName: "Wikang Tagalog, ᜏᜒᜃᜅ᜔ ᜆᜄᜎᜓᜄ᜔",
|
||||
// ),
|
||||
// "tn": const ISOLanguageName(
|
||||
// name: "Tswana",
|
||||
// nativeName: "Setswana",
|
||||
// ),
|
||||
// "to": const ISOLanguageName(
|
||||
// name: "Tonga (Tonga Islands)",
|
||||
// nativeName: "faka Tonga",
|
||||
// ),
|
||||
'tr': const ISOLanguageName(
|
||||
name: 'Turkish',
|
||||
nativeName: 'Türkçe',
|
||||
),
|
||||
// "ts": const ISOLanguageName(
|
||||
// name: "Tsonga",
|
||||
// nativeName: "Xitsonga",
|
||||
// ),
|
||||
// "tt": const ISOLanguageName(
|
||||
// name: "Tatar",
|
||||
// nativeName: "татарча, tatarça, تاتارچا",
|
||||
// ),
|
||||
// "tw": const ISOLanguageName(
|
||||
// name: "Twi",
|
||||
// nativeName: "Twi",
|
||||
// ),
|
||||
// "ty": const ISOLanguageName(
|
||||
// name: "Tahitian",
|
||||
// nativeName: "Reo Tahiti",
|
||||
// ),
|
||||
// "ug": const ISOLanguageName(
|
||||
// name: "Uighur, Uyghur",
|
||||
// nativeName: "Uyƣurqə, ئۇيغۇرچە",
|
||||
// ),
|
||||
'uk': const ISOLanguageName(
|
||||
name: 'Ukrainian',
|
||||
nativeName: 'українська',
|
||||
),
|
||||
// "ur": const ISOLanguageName(
|
||||
// name: "Urdu",
|
||||
// nativeName: "اردو",
|
||||
// ),
|
||||
// "uz": const ISOLanguageName(
|
||||
// name: "Uzbek",
|
||||
// nativeName: "zbek, Ўзбек, أۇزبېك",
|
||||
// ),
|
||||
// "ve": const ISOLanguageName(
|
||||
// name: "Venda",
|
||||
// nativeName: "Tshivenḓa",
|
||||
// ),
|
||||
'vi': const ISOLanguageName(
|
||||
name: 'Vietnamese',
|
||||
nativeName: 'Tiếng Việt',
|
||||
),
|
||||
// "vo": const ISOLanguageName(
|
||||
// name: "Volapük",
|
||||
// nativeName: "Volapük",
|
||||
// ),
|
||||
// "wa": const ISOLanguageName(
|
||||
// name: "Walloon",
|
||||
// nativeName: "Walon",
|
||||
// ),
|
||||
// "cy": const ISOLanguageName(
|
||||
// name: "Welsh",
|
||||
// nativeName: "Cymraeg",
|
||||
// ),
|
||||
// "wo": const ISOLanguageName(
|
||||
// name: "Wolof",
|
||||
// nativeName: "Wollof",
|
||||
// ),
|
||||
// "fy": const ISOLanguageName(
|
||||
// name: "Western Frisian",
|
||||
// nativeName: "Frysk",
|
||||
// ),
|
||||
// "xh": const ISOLanguageName(
|
||||
// name: "Xhosa",
|
||||
// nativeName: "isiXhosa",
|
||||
// ),
|
||||
// "yi": const ISOLanguageName(
|
||||
// name: "Yiddish",
|
||||
// nativeName: "ייִדיש",
|
||||
// ),
|
||||
// "yo": const ISOLanguageName(
|
||||
// name: "Yoruba",
|
||||
// nativeName: "Yorùbá",
|
||||
// ),
|
||||
// "za": const ISOLanguageName(
|
||||
// name: "Zhuang, Chuang",
|
||||
// nativeName: "Saɯ cueŋƅ, Saw cuengh",
|
||||
// )
|
||||
};
|
||||
|
||||
static ISOLanguageName getDisplayLanguage(key) {
|
||||
if (isoLangs.containsKey(key)) {
|
||||
return isoLangs[key]!;
|
||||
} else {
|
||||
throw Exception('Language key incorrect');
|
||||
}
|
||||
}
|
||||
}
|
||||
189
lib/collections/spotify_markets.dart
Executable file
@@ -0,0 +1,189 @@
|
||||
// Country Codes contributed by momobobe <https://github.com/momobobe>
|
||||
|
||||
import 'package:spotify/spotify.dart';
|
||||
|
||||
final spotifyMarkets = [
|
||||
(Market.AL, 'Albania (AL)'),
|
||||
(Market.DZ, 'Algeria (DZ)'),
|
||||
(Market.AD, 'Andorra (AD)'),
|
||||
(Market.AO, 'Angola (AO)'),
|
||||
(Market.AG, 'Antigua and Barbuda (AG)'),
|
||||
(Market.AR, 'Argentina (AR)'),
|
||||
(Market.AM, 'Armenia (AM)'),
|
||||
(Market.AU, 'Australia (AU)'),
|
||||
(Market.AT, 'Austria (AT)'),
|
||||
(Market.AZ, 'Azerbaijan (AZ)'),
|
||||
(Market.BH, 'Bahrain (BH)'),
|
||||
(Market.BD, 'Bangladesh (BD)'),
|
||||
(Market.BB, 'Barbados (BB)'),
|
||||
(Market.BY, 'Belarus (BY)'),
|
||||
(Market.BE, 'Belgium (BE)'),
|
||||
(Market.BZ, 'Belize (BZ)'),
|
||||
(Market.BJ, 'Benin (BJ)'),
|
||||
(Market.BT, 'Bhutan (BT)'),
|
||||
(Market.BO, 'Bolivia (BO)'),
|
||||
(Market.BA, 'Bosnia and Herzegovina (BA)'),
|
||||
(Market.BW, 'Botswana (BW)'),
|
||||
(Market.BR, 'Brazil (BR)'),
|
||||
(Market.BN, 'Brunei Darussalam (BN)'),
|
||||
(Market.BG, 'Bulgaria (BG)'),
|
||||
(Market.BF, 'Burkina Faso (BF)'),
|
||||
(Market.BI, 'Burundi (BI)'),
|
||||
(Market.CV, 'Cabo Verde / Cape Verde (CV)'),
|
||||
(Market.KH, 'Cambodia (KH)'),
|
||||
(Market.CM, 'Cameroon (CM)'),
|
||||
(Market.CA, 'Canada (CA)'),
|
||||
(Market.TD, 'Chad (TD)'),
|
||||
(Market.CL, 'Chile (CL)'),
|
||||
(Market.CO, 'Colombia (CO)'),
|
||||
(Market.KM, 'Comoros (KM)'),
|
||||
(Market.CR, 'Costa Rica (CR)'),
|
||||
(Market.HR, 'Croatia (HR)'),
|
||||
(Market.CW, 'Curaçao (CW)'),
|
||||
(Market.CY, 'Cyprus (CY)'),
|
||||
(Market.CZ, 'Czech Republic (CZ)'),
|
||||
(Market.CI, 'Ivory Coast (CI)'),
|
||||
(Market.CD, 'Congo (CD)'),
|
||||
(Market.DK, 'Denmark (DK)'),
|
||||
(Market.DJ, 'Djibouti (DJ)'),
|
||||
(Market.DM, 'Dominica (DM)'),
|
||||
(Market.DO, 'Dominican Republic (DO)'),
|
||||
(Market.EC, 'Ecuador (EC)'),
|
||||
(Market.EG, 'Egypt (EG)'),
|
||||
(Market.SV, 'El Salvador (SV)'),
|
||||
(Market.GQ, 'Equatorial Guinea (GQ)'),
|
||||
(Market.EE, 'Estonia (EE)'),
|
||||
(Market.SZ, 'Eswatini (SZ)'),
|
||||
(Market.FJ, 'Fiji (FJ)'),
|
||||
(Market.FI, 'Finland (FI)'),
|
||||
(Market.FR, 'France (FR)'),
|
||||
(Market.GA, 'Gabon (GA)'),
|
||||
(Market.GE, 'Georgia (GE)'),
|
||||
(Market.DE, 'Germany (DE)'),
|
||||
(Market.GH, 'Ghana (GH)'),
|
||||
(Market.GR, 'Greece (GR)'),
|
||||
(Market.GD, 'Grenada (GD)'),
|
||||
(Market.GT, 'Guatemala (GT)'),
|
||||
(Market.GN, 'Guinea (GN)'),
|
||||
(Market.GW, 'Guinea-Bissau (GW)'),
|
||||
(Market.GY, 'Guyana (GY)'),
|
||||
(Market.HT, 'Haiti (HT)'),
|
||||
(Market.HN, 'Honduras (HN)'),
|
||||
(Market.HK, 'Hong Kong (HK)'),
|
||||
(Market.HU, 'Hungary (HU)'),
|
||||
(Market.IS, 'Iceland (IS)'),
|
||||
(Market.IN, 'India (IN)'),
|
||||
(Market.ID, 'Indonesia (ID)'),
|
||||
(Market.IQ, 'Iraq (IQ)'),
|
||||
(Market.IE, 'Ireland (IE)'),
|
||||
(Market.IL, 'Israel (IL)'),
|
||||
(Market.IT, 'Italy (IT)'),
|
||||
(Market.JM, 'Jamaica (JM)'),
|
||||
(Market.JP, 'Japan (JP)'),
|
||||
(Market.JO, 'Jordan (JO)'),
|
||||
(Market.KZ, 'Kazakhstan (KZ)'),
|
||||
(Market.KE, 'Kenya (KE)'),
|
||||
(Market.KI, 'Kiribati (KI)'),
|
||||
(Market.XK, 'Kosovo (XK)'),
|
||||
(Market.KW, 'Kuwait (KW)'),
|
||||
(Market.KG, 'Kyrgyzstan (KG)'),
|
||||
(Market.LA, 'Laos (LA)'),
|
||||
(Market.LV, 'Latvia (LV)'),
|
||||
(Market.LB, 'Lebanon (LB)'),
|
||||
(Market.LS, 'Lesotho (LS)'),
|
||||
(Market.LR, 'Liberia (LR)'),
|
||||
(Market.LY, 'Libya (LY)'),
|
||||
(Market.LI, 'Liechtenstein (LI)'),
|
||||
(Market.LT, 'Lithuania (LT)'),
|
||||
(Market.LU, 'Luxembourg (LU)'),
|
||||
(Market.MO, 'Macao / Macau (MO)'),
|
||||
(Market.MG, 'Madagascar (MG)'),
|
||||
(Market.MW, 'Malawi (MW)'),
|
||||
(Market.MY, 'Malaysia (MY)'),
|
||||
(Market.MV, 'Maldives (MV)'),
|
||||
(Market.ML, 'Mali (ML)'),
|
||||
(Market.MT, 'Malta (MT)'),
|
||||
(Market.MH, 'Marshall Islands (MH)'),
|
||||
(Market.MR, 'Mauritania (MR)'),
|
||||
(Market.MU, 'Mauritius (MU)'),
|
||||
(Market.MX, 'Mexico (MX)'),
|
||||
(Market.FM, 'Micronesia (FM)'),
|
||||
(Market.MD, 'Moldova (MD)'),
|
||||
(Market.MC, 'Monaco (MC)'),
|
||||
(Market.MN, 'Mongolia (MN)'),
|
||||
(Market.ME, 'Montenegro (ME)'),
|
||||
(Market.MA, 'Morocco (MA)'),
|
||||
(Market.MZ, 'Mozambique (MZ)'),
|
||||
(Market.NA, 'Namibia (NA)'),
|
||||
(Market.NR, 'Nauru (NR)'),
|
||||
(Market.NP, 'Nepal (NP)'),
|
||||
(Market.NL, 'Netherlands (NL)'),
|
||||
(Market.NZ, 'New Zealand (NZ)'),
|
||||
(Market.NI, 'Nicaragua (NI)'),
|
||||
(Market.NE, 'Niger (NE)'),
|
||||
(Market.NG, 'Nigeria (NG)'),
|
||||
(Market.MK, 'North Macedonia (MK)'),
|
||||
(Market.NO, 'Norway (NO)'),
|
||||
(Market.OM, 'Oman (OM)'),
|
||||
(Market.PK, 'Pakistan (PK)'),
|
||||
(Market.PW, 'Palau (PW)'),
|
||||
(Market.PS, 'Palestine (PS)'),
|
||||
(Market.PA, 'Panama (PA)'),
|
||||
(Market.PG, 'Papua New Guinea (PG)'),
|
||||
(Market.PY, 'Paraguay (PY)'),
|
||||
(Market.PE, 'Peru (PE)'),
|
||||
(Market.PH, 'Philippines (PH)'),
|
||||
(Market.PL, 'Poland (PL)'),
|
||||
(Market.PT, 'Portugal (PT)'),
|
||||
(Market.QA, 'Qatar (QA)'),
|
||||
(Market.CG, 'Congo (CG)'),
|
||||
(Market.RO, 'Romania (RO)'),
|
||||
(Market.RU, 'Russia (RU)'),
|
||||
(Market.RW, 'Rwanda (RW)'),
|
||||
(Market.WS, 'Samoa (WS)'),
|
||||
(Market.SM, 'San Marino (SM)'),
|
||||
(Market.SA, 'Saudi Arabia (SA)'),
|
||||
(Market.SN, 'Senegal (SN)'),
|
||||
(Market.RS, 'Serbia (RS)'),
|
||||
(Market.SC, 'Seychelles (SC)'),
|
||||
(Market.SL, 'Sierra Leone (SL)'),
|
||||
(Market.SG, 'Singapore (SG)'),
|
||||
(Market.SK, 'Slovakia (SK)'),
|
||||
(Market.SI, 'Slovenia (SI)'),
|
||||
(Market.SB, 'Solomon Islands (SB)'),
|
||||
(Market.ZA, 'South Africa (ZA)'),
|
||||
(Market.KR, 'South Korea (KR)'),
|
||||
(Market.ES, 'Spain (ES)'),
|
||||
(Market.LK, 'Sri Lanka (LK)'),
|
||||
(Market.KN, 'St. Kitts and Nevis (KN)'),
|
||||
(Market.LC, 'St. Lucia (LC)'),
|
||||
(Market.SR, 'Suriname (SR)'),
|
||||
(Market.SE, 'Sweden (SE)'),
|
||||
(Market.CH, 'Switzerland (CH)'),
|
||||
(Market.ST, 'São Tomé and Príncipe (ST)'),
|
||||
(Market.TW, 'Taiwan (TW)'),
|
||||
(Market.TJ, 'Tajikistan (TJ)'),
|
||||
(Market.TZ, 'Tanzania (TZ)'),
|
||||
(Market.TH, 'Thailand (TH)'),
|
||||
(Market.BS, 'The Bahamas (BS)'),
|
||||
(Market.GM, 'The Gambia (GM)'),
|
||||
(Market.TL, 'East Timor (TL)'),
|
||||
(Market.TG, 'Togo (TG)'),
|
||||
(Market.TO, 'Tonga (TO)'),
|
||||
(Market.TT, 'Trinidad and Tobago (TT)'),
|
||||
(Market.TN, 'Tunisia (TN)'),
|
||||
(Market.TR, 'Turkey (TR)'),
|
||||
(Market.TV, 'Tuvalu (TV)'),
|
||||
(Market.UG, 'Uganda (UG)'),
|
||||
(Market.UA, 'Ukraine (UA)'),
|
||||
(Market.AE, 'United Arab Emirates (AE)'),
|
||||
(Market.GB, 'United Kingdom (GB)'),
|
||||
(Market.US, 'United States (US)'),
|
||||
(Market.UY, 'Uruguay (UY)'),
|
||||
(Market.UZ, 'Uzbekistan (UZ)'),
|
||||
(Market.VU, 'Vanuatu (VU)'),
|
||||
(Market.VE, 'Venezuela (VE)'),
|
||||
(Market.VN, 'Vietnam (VN)'),
|
||||
(Market.ZM, 'Zambia (ZM)'),
|
||||
(Market.ZW, 'Zimbabwe (ZW)'),
|
||||
];
|
||||
@@ -1,20 +1,67 @@
|
||||
import 'package:desktop_webview_window/desktop_webview_window.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:media_kit/media_kit.dart';
|
||||
import 'package:rhythm_box/platform.dart';
|
||||
import 'package:rhythm_box/providers/audio_player.dart';
|
||||
import 'package:rhythm_box/providers/audio_player_stream.dart';
|
||||
import 'package:rhythm_box/providers/auth.dart';
|
||||
import 'package:rhythm_box/providers/database.dart';
|
||||
import 'package:rhythm_box/providers/endless_playback.dart';
|
||||
import 'package:rhythm_box/providers/error_notifier.dart';
|
||||
import 'package:rhythm_box/providers/history.dart';
|
||||
import 'package:rhythm_box/providers/palette.dart';
|
||||
import 'package:rhythm_box/providers/recent_played.dart';
|
||||
import 'package:rhythm_box/providers/scrobbler.dart';
|
||||
import 'package:rhythm_box/providers/skip_segments.dart';
|
||||
import 'package:rhythm_box/providers/spotify.dart';
|
||||
import 'package:rhythm_box/providers/user_preferences.dart';
|
||||
import 'package:rhythm_box/providers/volume.dart';
|
||||
import 'package:rhythm_box/router.dart';
|
||||
import 'package:rhythm_box/services/kv_store/encrypted_kv_store.dart';
|
||||
import 'package:rhythm_box/services/kv_store/kv_store.dart';
|
||||
import 'package:rhythm_box/services/lyrics/provider.dart';
|
||||
import 'package:rhythm_box/services/server/active_sourced_track.dart';
|
||||
import 'package:rhythm_box/services/server/routes/playback.dart';
|
||||
import 'package:rhythm_box/services/server/server.dart';
|
||||
import 'package:rhythm_box/services/server/sourced_track.dart';
|
||||
import 'package:rhythm_box/services/wm_tools.dart';
|
||||
import 'package:rhythm_box/shells/system_shell.dart';
|
||||
import 'package:rhythm_box/translations.dart';
|
||||
import 'package:rhythm_box/widgets/tracks/querying_track_info.dart';
|
||||
import 'package:smtc_windows/smtc_windows.dart';
|
||||
|
||||
void main() {
|
||||
runApp(const MyApp());
|
||||
Future<void> main(List<String> rawArgs) async {
|
||||
if (rawArgs.contains('web_view_title_bar')) {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
if (runWebViewTitleBarWidget(rawArgs)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
MediaKit.ensureInitialized();
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
if (PlatformInfo.isDesktop) {
|
||||
await WindowManagerTools.initialize();
|
||||
}
|
||||
if (PlatformInfo.isWindows) {
|
||||
await SMTCWindows.initialize();
|
||||
}
|
||||
|
||||
await KVStoreService.initialize();
|
||||
await EncryptedKvStoreService.initialize();
|
||||
|
||||
runApp(const RhythmApp());
|
||||
}
|
||||
|
||||
class MyApp extends StatelessWidget {
|
||||
const MyApp({super.key});
|
||||
class RhythmApp extends StatelessWidget {
|
||||
const RhythmApp({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return GetMaterialApp.router(
|
||||
title: 'DietaryGuard',
|
||||
title: 'RhythmBox',
|
||||
routerDelegate: router.routerDelegate,
|
||||
routeInformationParser: router.routeInformationParser,
|
||||
routeInformationProvider: router.routeInformationProvider,
|
||||
@@ -37,10 +84,42 @@ class MyApp extends StatelessWidget {
|
||||
themeMode: ThemeMode.system,
|
||||
translations: AppTranslations(),
|
||||
onInit: () => _initializeProviders(context),
|
||||
builder: (context, child) {
|
||||
return ScaffoldMessenger(
|
||||
child: SystemShell(
|
||||
child: child ?? const SizedBox(),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
void _initializeProviders(BuildContext context) async {
|
||||
Get.lazyPut(() => SpotifyProvider());
|
||||
Get.lazyPut(() => SyncedLyricsProvider());
|
||||
|
||||
Get.put(ErrorNotifier());
|
||||
|
||||
Get.put(DatabaseProvider());
|
||||
Get.put(AuthenticationProvider());
|
||||
|
||||
Get.put(AudioPlayerProvider());
|
||||
Get.put(ActiveSourcedTrackProvider());
|
||||
Get.put(AudioPlayerStreamProvider());
|
||||
|
||||
Get.put(PlaybackHistoryProvider());
|
||||
Get.put(SegmentsProvider());
|
||||
Get.put(PaletteProvider());
|
||||
Get.put(ScrobblerProvider());
|
||||
Get.put(UserPreferencesProvider());
|
||||
|
||||
Get.put(QueryingTrackInfoProvider());
|
||||
Get.put(SourcedTrackProvider());
|
||||
Get.put(EndlessPlaybackProvider());
|
||||
Get.put(VolumeProvider());
|
||||
Get.put(RecentlyPlayedProvider());
|
||||
|
||||
Get.put(ServerPlaybackRoutesProvider());
|
||||
Get.put(PlaybackServerProvider());
|
||||
}
|
||||
}
|
||||
|
||||