From 3005183b3cf1ead228c0c5327ece74d4ddf243a8 Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Sun, 14 Jun 2026 17:27:08 +0200 Subject: [PATCH 01/19] chore: update ios version --- ios/ParenW/Info.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/ParenW/Info.plist b/ios/ParenW/Info.plist index 2176381..36f8f25 100644 --- a/ios/ParenW/Info.plist +++ b/ios/ParenW/Info.plist @@ -5,7 +5,7 @@ CFBundleShortVersionString 1.11.5 CFBundleVersion - 667 + 674 NSExtension NSExtensionPointIdentifier From 9fcc8535a5456b7be32ba401ba01c6dc945279f5 Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Sun, 14 Jun 2026 17:44:54 +0200 Subject: [PATCH 02/19] chore: add iOS ipa file to table, also add iOS and macOS as targets of the app --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2c6989d..1da9ba8 100644 --- a/README.md +++ b/README.md @@ -22,16 +22,17 @@ Head over to the [**latest release**](https://github.com/yurtemre7/paren/release | Android (most phones, 2016+) | `paren-arm64-v8a.apk` | | Android (older 32-bit devices) | `paren-armeabi-v7a.apk` | | Android (emulator / x86) | `paren-x86_64.apk` | +| iOS (most phones, sideloading) | `paren.ipa` | | Windows | `paren-*.msix` | | Linux | `paren-linux.tar.gz` | -> Not sure which APK? Grab `paren-arm64-v8a.apk`. +> Not sure which APK on your Android? Grab `paren-arm64-v8a.apk`. *** ## Code -The project is written in [Flutter](https://flutter.dev/) and targets Android, Windows, and Linux. +The project is written in [Flutter](https://flutter.dev/) and targets Android, iOS, macOS, Windows, and Linux. Browse the codebase freely — check if the app behaves the way you want it to. *** From 9905b743670074953b65339c7a24aa96ff62872c Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Sun, 14 Jun 2026 17:51:17 +0200 Subject: [PATCH 03/19] feat: add macOS build to the github release too --- release-github-ipa.sh => release-github-darwin.sh | 9 +++++++++ release-ios.sh | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) rename release-github-ipa.sh => release-github-darwin.sh (66%) diff --git a/release-github-ipa.sh b/release-github-darwin.sh similarity index 66% rename from release-github-ipa.sh rename to release-github-darwin.sh index 4c258f3..d1618a5 100755 --- a/release-github-ipa.sh +++ b/release-github-darwin.sh @@ -12,14 +12,21 @@ fi echo "==> flutter build ipa --release --build-number='$git_count'" flutter build ipa --release --build-number="$git_count" +flutter build macos --release --build-number="$git_count" IPA_PATH="$(find build/ios/ipa -maxdepth 1 -type f -name '*.ipa' -print0 | xargs -r -0 ls -t | head -n 1)" +APP_PATH="$(find build/macos/Build/Products/Release -maxdepth 1 -type f -name '*.app' -print0 | xargs -r -0 ls -t | head -n 1)" if [[ -z "$IPA_PATH" || ! -f "$IPA_PATH" ]]; then echo "Error: no IPA found in build/ios/ipa." >&2 exit 1 fi +if [[ -z "$APP_PATH" || ! -f "$APP_PATH" ]]; then + echo "Error: no APP found in build/macos/Build/Products/Release." >&2 + exit 1 +fi + TAG="$(gh release view -R "$REPO" --json tagName --jq .tagName)" if [[ -z "$TAG" ]]; then @@ -29,5 +36,7 @@ fi echo "==> Uploading $(basename "$IPA_PATH") to release $TAG" gh release upload "$TAG" "$IPA_PATH" -R "$REPO" --clobber +echo "==> Uploading $(basename "$APP_PATH") to release $TAG" +gh release upload "$TAG" "$APP_PATH" -R "$REPO" --clobber echo "==> Done" \ No newline at end of file diff --git a/release-ios.sh b/release-ios.sh index 244201a..80fefb7 100755 --- a/release-ios.sh +++ b/release-ios.sh @@ -8,7 +8,7 @@ cd ios || exit echo "==> bundler exec fastlane release" bundler exec fastlane release cd .. || exit -./release-github-ipa.sh +./release-github-darwin.sh git add ./ios/ git commit -m "chore: update ios version" git push From bff629a0539f448536d641a4f15473e2df1bb7f5 Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Mon, 15 Jun 2026 17:28:23 +0200 Subject: [PATCH 04/19] chore: update packages --- pubspec.lock | 12 ++++++------ pubspec.yaml | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 7e08769..e766289 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -482,10 +482,10 @@ packages: dependency: "direct main" description: name: liquid_glass_widgets - sha256: "2794bd0080a27c0f78a8c7ee70a0be1700057f3c9578794e6891e94157f166ac" + sha256: "881b8d7c40d8ac23ac5b56ccf747250c45dc1bb9f3fa92bc0444fee1d2ff7187" url: "https://pub.dev" source: hosted - version: "0.16.0" + version: "0.16.1" logging: dependency: transitive description: @@ -570,10 +570,10 @@ packages: dependency: transitive description: name: path_provider - sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" + sha256: a7f4874f987173da295a61c181b8ee71dab59b332a486b391babf26a1b884825 url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.1.6" path_provider_android: dependency: transitive description: @@ -602,10 +602,10 @@ packages: dependency: transitive description: name: path_provider_platform_interface - sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + sha256: "484838772624c3a4b94f1e44a3e19897fee738f2d5c4ce448443b0417f7c9dda" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" path_provider_windows: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 4208098..a5cc6cb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -31,7 +31,7 @@ dependencies: flutter_colorpicker: 1.1.0 stupid_simple_sheet: 0.9.1+1 json_annotation: 4.12.0 - liquid_glass_widgets: ^0.16.0 + liquid_glass_widgets: ^0.16.1 # image_picker: 1.1.2 dev_dependencies: From 1f95f43985297db8bc20520d0de92567035595f8 Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Tue, 16 Jun 2026 21:25:48 +0200 Subject: [PATCH 05/19] chore: match gradle, gpa and kotlin versions --- android/gradle/wrapper/gradle-wrapper.properties | 2 +- android/settings.gradle.kts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index a20f2c4..76d4386 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-all.zip diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts index 88ed306..e8dad11 100644 --- a/android/settings.gradle.kts +++ b/android/settings.gradle.kts @@ -19,9 +19,9 @@ pluginManagement { plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "9.1.1" apply false - id("org.jetbrains.kotlin.android") version "2.2.20" apply false - id("org.jetbrains.kotlin.plugin.compose") version "2.2.20" apply false + id("com.android.application") version "9.2.1" apply false + id("org.jetbrains.kotlin.android") version "2.4.0" apply false + id("org.jetbrains.kotlin.plugin.compose") version "2.4.0" apply false } include(":app") From 8f6f0c3360943b205ad7ee563ec5beef40423c92 Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Tue, 16 Jun 2026 21:26:14 +0200 Subject: [PATCH 06/19] chore: set flutter version with caret ^ --- pubspec.lock | 2 +- pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index e766289..47541e4 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1045,4 +1045,4 @@ packages: version: "3.1.3" sdks: dart: ">=3.12.0 <4.0.0" - flutter: ">=3.44.0" + flutter: ">=3.44.0 <4.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index a5cc6cb..5bcb039 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -5,7 +5,7 @@ version: 1.11.5+1 environment: sdk: ^3.12.0 - flutter: ">=3.34.0" + flutter: ^3.44.0 dependencies: flutter: From 832145adae10ead2d8f1f62ca91744c05899f3a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Jun 2026 03:55:16 +0000 Subject: [PATCH 07/19] chore(deps): bump liquid_glass_widgets from 0.16.1 to 0.16.2 Bumps [liquid_glass_widgets](https://github.com/sdegenaar/liquid_glass_widgets) from 0.16.1 to 0.16.2. - [Changelog](https://github.com/sdegenaar/liquid_glass_widgets/blob/main/CHANGELOG.md) - [Commits](https://github.com/sdegenaar/liquid_glass_widgets/compare/v0.16.1...v0.16.2) --- updated-dependencies: - dependency-name: liquid_glass_widgets dependency-version: 0.16.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pubspec.lock | 6 +++--- pubspec.yaml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 47541e4..3da4dba 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -482,10 +482,10 @@ packages: dependency: "direct main" description: name: liquid_glass_widgets - sha256: "881b8d7c40d8ac23ac5b56ccf747250c45dc1bb9f3fa92bc0444fee1d2ff7187" + sha256: "4dc8107a4f45d697c661dfec91d9442d2f306f90e49a9848a2f0f8d7c2dc2209" url: "https://pub.dev" source: hosted - version: "0.16.1" + version: "0.16.2" logging: dependency: transitive description: @@ -1045,4 +1045,4 @@ packages: version: "3.1.3" sdks: dart: ">=3.12.0 <4.0.0" - flutter: ">=3.44.0 <4.0.0" + flutter: ">=3.44.0" diff --git a/pubspec.yaml b/pubspec.yaml index 5bcb039..5a45c63 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -31,7 +31,7 @@ dependencies: flutter_colorpicker: 1.1.0 stupid_simple_sheet: 0.9.1+1 json_annotation: 4.12.0 - liquid_glass_widgets: ^0.16.1 + liquid_glass_widgets: ^0.16.2 # image_picker: 1.1.2 dev_dependencies: From d951ec28150ae1087c159b8900afb6255bb04162 Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Thu, 18 Jun 2026 20:32:48 +0200 Subject: [PATCH 08/19] chore: update packages --- pubspec.lock | 6 +++--- pubspec.yaml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 3da4dba..1c97c0a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -482,10 +482,10 @@ packages: dependency: "direct main" description: name: liquid_glass_widgets - sha256: "4dc8107a4f45d697c661dfec91d9442d2f306f90e49a9848a2f0f8d7c2dc2209" + sha256: "776adcdb7d48af0b935642425936813074355830eb0a47ecca8b227549d5b057" url: "https://pub.dev" source: hosted - version: "0.16.2" + version: "0.16.3" logging: dependency: transitive description: @@ -1045,4 +1045,4 @@ packages: version: "3.1.3" sdks: dart: ">=3.12.0 <4.0.0" - flutter: ">=3.44.0" + flutter: ">=3.44.0 <4.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index 5a45c63..4affdc7 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -31,7 +31,7 @@ dependencies: flutter_colorpicker: 1.1.0 stupid_simple_sheet: 0.9.1+1 json_annotation: 4.12.0 - liquid_glass_widgets: ^0.16.2 + liquid_glass_widgets: ^0.16.3 # image_picker: 1.1.2 dev_dependencies: From 6aed5187207882893e66bb09dae0d7ed34cbcfa0 Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Sun, 14 Jun 2026 17:58:42 +0200 Subject: [PATCH 09/19] feat: fix macOS .app path --- release-github-darwin.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release-github-darwin.sh b/release-github-darwin.sh index d1618a5..78c94da 100755 --- a/release-github-darwin.sh +++ b/release-github-darwin.sh @@ -15,7 +15,7 @@ flutter build ipa --release --build-number="$git_count" flutter build macos --release --build-number="$git_count" IPA_PATH="$(find build/ios/ipa -maxdepth 1 -type f -name '*.ipa' -print0 | xargs -r -0 ls -t | head -n 1)" -APP_PATH="$(find build/macos/Build/Products/Release -maxdepth 1 -type f -name '*.app' -print0 | xargs -r -0 ls -t | head -n 1)" +APP_PATH="$(find build/macos/Build/Products/Release -maxdepth 1 -name '*.app' -print)" if [[ -z "$IPA_PATH" || ! -f "$IPA_PATH" ]]; then echo "Error: no IPA found in build/ios/ipa." >&2 From 5c26b6fe00bf4319af9cb9b6fa64e80c2e9aa8d9 Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Sun, 14 Jun 2026 17:58:52 +0200 Subject: [PATCH 10/19] feat: add macOS to download table --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1da9ba8..179c4a2 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ Head over to the [**latest release**](https://github.com/yurtemre7/paren/release | Android (emulator / x86) | `paren-x86_64.apk` | | iOS (most phones, sideloading) | `paren.ipa` | | Windows | `paren-*.msix` | +| macOS | `paren.app` | | Linux | `paren-linux.tar.gz` | > Not sure which APK on your Android? Grab `paren-arm64-v8a.apk`. From 397a5e45316b3d619be59c170c42dd028fa8ba70 Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Sun, 14 Jun 2026 18:11:53 +0200 Subject: [PATCH 11/19] feat: fix darwin release script --- release-github-darwin.sh | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/release-github-darwin.sh b/release-github-darwin.sh index 78c94da..e859c63 100755 --- a/release-github-darwin.sh +++ b/release-github-darwin.sh @@ -12,21 +12,37 @@ fi echo "==> flutter build ipa --release --build-number='$git_count'" flutter build ipa --release --build-number="$git_count" + +echo "==> flutter build macos --release --build-number='$git_count'" flutter build macos --release --build-number="$git_count" -IPA_PATH="$(find build/ios/ipa -maxdepth 1 -type f -name '*.ipa' -print0 | xargs -r -0 ls -t | head -n 1)" -APP_PATH="$(find build/macos/Build/Products/Release -maxdepth 1 -name '*.app' -print)" +# --- IPA (safe discovery) --- +ipa_files=() +while IFS= read -r -d '' file; do + ipa_files+=("$file") +done < <(find build/ios/ipa -maxdepth 1 -type f -name '*.ipa' -print0) -if [[ -z "$IPA_PATH" || ! -f "$IPA_PATH" ]]; then +if [[ ${#ipa_files[@]} -eq 0 ]]; then echo "Error: no IPA found in build/ios/ipa." >&2 exit 1 fi +IPA_PATH="$(ls -t "${ipa_files[@]}" | head -n 1)" + +# --- macOS .app → zip --- +APP_PATH="$(find build/macos/Build/Products/Release -maxdepth 1 -type d -name '*.app' | head -n 1)" -if [[ -z "$APP_PATH" || ! -f "$APP_PATH" ]]; then - echo "Error: no APP found in build/macos/Build/Products/Release." >&2 +if [[ -z "$APP_PATH" ]]; then + echo "Error: no .app found in build/macos/Build/Products/Release." >&2 exit 1 fi +APP_NAME="$(basename "$APP_PATH" .app)" +ZIP_PATH="build/macos/Build/Products/Release/${APP_NAME}.zip" + +echo "==> Zipping ${APP_NAME}.app → ${APP_NAME}.zip" +ditto -c -k --sequesterRsrc --keepParent "$APP_PATH" "$ZIP_PATH" + +# --- Upload --- TAG="$(gh release view -R "$REPO" --json tagName --jq .tagName)" if [[ -z "$TAG" ]]; then @@ -36,7 +52,8 @@ fi echo "==> Uploading $(basename "$IPA_PATH") to release $TAG" gh release upload "$TAG" "$IPA_PATH" -R "$REPO" --clobber -echo "==> Uploading $(basename "$APP_PATH") to release $TAG" -gh release upload "$TAG" "$APP_PATH" -R "$REPO" --clobber -echo "==> Done" \ No newline at end of file +echo "==> Uploading ${APP_NAME}.zip to release $TAG" +gh release upload "$TAG" "$ZIP_PATH" -R "$REPO" --clobber + +echo "==> Done" From 7f1c84d33c978cd7b139f27a8a5e6c9e02fe0faa Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Sun, 14 Jun 2026 18:12:10 +0200 Subject: [PATCH 12/19] feat: rename macOS download file --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 179c4a2..d1336c1 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Head over to the [**latest release**](https://github.com/yurtemre7/paren/release | Android (emulator / x86) | `paren-x86_64.apk` | | iOS (most phones, sideloading) | `paren.ipa` | | Windows | `paren-*.msix` | -| macOS | `paren.app` | +| macOS | `paren.zip` | | Linux | `paren-linux.tar.gz` | > Not sure which APK on your Android? Grab `paren-arm64-v8a.apk`. From 74c878a04fde75d2088af4a32de8388bb4b7c9a7 Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Fri, 19 Jun 2026 18:02:13 +0200 Subject: [PATCH 13/19] chore: update packages --- pubspec.lock | 4 ++-- pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 1c97c0a..0475187 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -482,10 +482,10 @@ packages: dependency: "direct main" description: name: liquid_glass_widgets - sha256: "776adcdb7d48af0b935642425936813074355830eb0a47ecca8b227549d5b057" + sha256: "57c70a75b0a34d731a9c8d1fa1c41d2c853029922d0a26492fbdb17f99de5aab" url: "https://pub.dev" source: hosted - version: "0.16.3" + version: "0.17.0" logging: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 4affdc7..50945b8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -31,7 +31,7 @@ dependencies: flutter_colorpicker: 1.1.0 stupid_simple_sheet: 0.9.1+1 json_annotation: 4.12.0 - liquid_glass_widgets: ^0.16.3 + liquid_glass_widgets: ^0.17.0 # image_picker: 1.1.2 dev_dependencies: From 7e235b68eec81e794c7fdaae26c3df3c9e7634f7 Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Sat, 20 Jun 2026 11:49:50 +0200 Subject: [PATCH 14/19] chore: update packages --- pubspec.lock | 4 ++-- pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 0475187..465d924 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -482,10 +482,10 @@ packages: dependency: "direct main" description: name: liquid_glass_widgets - sha256: "57c70a75b0a34d731a9c8d1fa1c41d2c853029922d0a26492fbdb17f99de5aab" + sha256: "0d90d073fe57a67ee9153f887ed4d3384f5fcedaf53ca52c840f5ba835792118" url: "https://pub.dev" source: hosted - version: "0.17.0" + version: "0.17.1" logging: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 50945b8..d845ee0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -31,7 +31,7 @@ dependencies: flutter_colorpicker: 1.1.0 stupid_simple_sheet: 0.9.1+1 json_annotation: 4.12.0 - liquid_glass_widgets: ^0.17.0 + liquid_glass_widgets: ^0.17.1 # image_picker: 1.1.2 dev_dependencies: From 084abdcab5d2b9cb68aa5624de5d3448c5384ce9 Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Sun, 21 Jun 2026 14:29:45 +0200 Subject: [PATCH 15/19] chore: update bundle dependencies --- android/Gemfile.lock | 32 ++++++++++++++++---------------- ios/Gemfile.lock | 32 ++++++++++++++++---------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/android/Gemfile.lock b/android/Gemfile.lock index 62c1c76..331f838 100644 --- a/android/Gemfile.lock +++ b/android/Gemfile.lock @@ -8,7 +8,7 @@ GEM artifactory (3.0.17) atomos (0.1.3) aws-eventstream (1.4.0) - aws-partitions (1.1259.0) + aws-partitions (1.1261.0) aws-sdk-core (3.252.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) @@ -20,7 +20,7 @@ GEM aws-sdk-kms (1.129.0) aws-sdk-core (~> 3, >= 3.248.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.225.1) + aws-sdk-s3 (1.226.0) aws-sdk-core (~> 3, >= 3.248.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) @@ -125,7 +125,7 @@ GEM xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) fastlane-sirp (1.1.0) gh_inspector (1.1.3) - google-apis-androidpublisher_v3 (0.102.0) + google-apis-androidpublisher_v3 (0.103.0) google-apis-core (>= 0.15.0, < 2.a) google-apis-core (0.18.0) addressable (~> 2.5, >= 2.5.1) @@ -135,11 +135,11 @@ GEM mutex_m representable (~> 3.0) retriable (>= 2.0, < 4.a) - google-apis-iamcredentials_v1 (0.27.0) + google-apis-iamcredentials_v1 (0.28.0) google-apis-core (>= 0.15.0, < 2.a) - google-apis-playcustomapp_v1 (0.17.0) + google-apis-playcustomapp_v1 (0.18.0) google-apis-core (>= 0.15.0, < 2.a) - google-apis-storage_v1 (0.63.0) + google-apis-storage_v1 (0.64.0) google-apis-core (>= 0.15.0, < 2.a) google-cloud-core (1.9.0) google-cloud-env (>= 1.0, < 3.a) @@ -148,7 +148,7 @@ GEM base64 (~> 0.2) faraday (>= 1.0, < 3.a) google-cloud-errors (1.6.0) - google-cloud-storage (1.60.0) + google-cloud-storage (1.61.0) addressable (~> 2.8) digest-crc (~> 0.4) google-apis-core (>= 0.18, < 2) @@ -158,7 +158,7 @@ GEM googleauth (~> 1.9) mini_mime (~> 1.0) google-logging-utils (0.2.0) - googleauth (1.17.0) + googleauth (1.17.1) faraday (>= 1.0, < 3.a) google-cloud-env (~> 2.2) google-logging-utils (~> 0.1) @@ -245,10 +245,10 @@ CHECKSUMS artifactory (3.0.17) sha256=3023d5c964c31674090d655a516f38ca75665c15084140c08b7f2841131af263 atomos (0.1.3) sha256=7d43b22f2454a36bace5532d30785b06de3711399cb1c6bf932573eda536789f aws-eventstream (1.4.0) sha256=116bf85c436200d1060811e6f5d2d40c88f65448f2125bc77ffce5121e6e183b - aws-partitions (1.1259.0) sha256=1a61c53f85cee1e69e4ab7946c7350b2237d724acf589023715e7117c03c18c6 + aws-partitions (1.1261.0) sha256=89eda89781c1ea4e1be2a2dcdc72318c62c6171a01cdaeaa0cbecf3cea6f9fdc aws-sdk-core (3.252.0) sha256=09c042cbfc2acf2239441cc9b982ebab2a999bed2ef6bdc51849e7b3d6e48a1c aws-sdk-kms (1.129.0) sha256=363f548df321f4a4fcfd05523384e591060b400f8e65133ed7ef0793155a3343 - aws-sdk-s3 (1.225.1) sha256=d4b23a8db9b0a5548766b52d382b184f47f7e126560acdb731dd46adb5e26512 + aws-sdk-s3 (1.226.0) sha256=e599f431e006ec9b92c61ee0f14d3f658a1f6c8a1d623d2160be927ac958e2bf aws-sigv4 (1.12.1) sha256=6973ff95cb0fd0dc58ba26e90e9510a2219525d07620c8babeb70ef831826c00 babosa (1.0.4) sha256=18dea450f595462ed7cb80595abd76b2e535db8c91b350f6c4b3d73986c5bc99 base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b @@ -283,17 +283,17 @@ CHECKSUMS fastlane (2.236.1) sha256=fb89e618e0f38636e487743622cf710ad722723f5d33a63f19e367f84d3770bc fastlane-sirp (1.1.0) sha256=10bc94f9682efd8e1badfb31452a76dd8981f1f3a33717c765fde6d75b54d847 gh_inspector (1.1.3) sha256=04cca7171b87164e053aa43147971d3b7f500fcb58177698886b48a9fc4a1939 - google-apis-androidpublisher_v3 (0.102.0) sha256=562415c44bd7f81cc808abbea11845ede16cdc3696d95f95efcf50aaffb159cf + google-apis-androidpublisher_v3 (0.103.0) sha256=8075b9da398b201493ad1cd4074ff1a76ae67abf7eaad4242c0c75d22d61b559 google-apis-core (0.18.0) sha256=96b057816feeeab448139ed5b5c78eab7fc2a9d8958f0fbc8217dedffad054ee - google-apis-iamcredentials_v1 (0.27.0) sha256=9289f29968610754ef11d98b9ec627f0153f3e2616fef839aef096de529f6d1e - google-apis-playcustomapp_v1 (0.17.0) sha256=d5bc90b705f3f862bab4998086449b0abe704ee1685a84821daa90ca7fa95a78 - google-apis-storage_v1 (0.63.0) sha256=7063a6c19c40f5ef96d5894df33c4f9ac915e3107e632b1870ba5247e3bb633f + google-apis-iamcredentials_v1 (0.28.0) sha256=0a92ffe6cc39c569554af2a77a25dfc61519ed8bbb64ab04cffdd352dc5ef106 + google-apis-playcustomapp_v1 (0.18.0) sha256=44b277b9dee4a59ac5e9d98be1485edc5e382d2f9d73c79ae8908a455786a254 + google-apis-storage_v1 (0.64.0) sha256=75b11afa2edcee859b84c7a6972ee4456314eeef5f762827fd6cf5c5ffaf93f2 google-cloud-core (1.9.0) sha256=ab55409f51488e8deefb6edcc1ce4771dfb5da2fe7b3bc075709a030c2b682a4 google-cloud-env (2.2.2) sha256=94bed40e05a67e9468ce1cb38389fba9a90aa8fc62fc9e173204c1dca59e21e7 google-cloud-errors (1.6.0) sha256=1da8476dd706ad04b9d32e3c4b90d07d3463b37d6407cb56d41342ea7647d0a1 - google-cloud-storage (1.60.0) sha256=b21b752d37945d678a4533be5ef4303f15d33a964d8bc709c7c41c3600f650db + google-cloud-storage (1.61.0) sha256=a77f10f4a603289948b09e81c3e23d762a18733fd69d70a4c1399663fbd96002 google-logging-utils (0.2.0) sha256=675462b4ea5affa825a3442694ca2d75d0069455a1d0956127207498fca3df7b - googleauth (1.17.0) sha256=dbddcaa3b78469fa9392c0e784ab6d8f3f760a1e5f6c6dbbbaa44a612c4198b0 + googleauth (1.17.1) sha256=0f7e6fc70e204cee1b2d71f1e1de2d3b349d432404197fe68ebf7fa23d0821b9 highline (2.0.3) sha256=2ddd5c127d4692721486f91737307236fe005352d12a4202e26c48614f719479 http-cookie (1.0.8) sha256=b14fe0445cf24bf9ae098633e9b8d42e4c07c3c1f700672b09fbfe32ffd41aa6 httpclient (2.9.0) sha256=4b645958e494b2f86c2f8a2f304c959baa273a310e77a2931ddb986d83e498c8 diff --git a/ios/Gemfile.lock b/ios/Gemfile.lock index 62c1c76..331f838 100644 --- a/ios/Gemfile.lock +++ b/ios/Gemfile.lock @@ -8,7 +8,7 @@ GEM artifactory (3.0.17) atomos (0.1.3) aws-eventstream (1.4.0) - aws-partitions (1.1259.0) + aws-partitions (1.1261.0) aws-sdk-core (3.252.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) @@ -20,7 +20,7 @@ GEM aws-sdk-kms (1.129.0) aws-sdk-core (~> 3, >= 3.248.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.225.1) + aws-sdk-s3 (1.226.0) aws-sdk-core (~> 3, >= 3.248.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) @@ -125,7 +125,7 @@ GEM xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) fastlane-sirp (1.1.0) gh_inspector (1.1.3) - google-apis-androidpublisher_v3 (0.102.0) + google-apis-androidpublisher_v3 (0.103.0) google-apis-core (>= 0.15.0, < 2.a) google-apis-core (0.18.0) addressable (~> 2.5, >= 2.5.1) @@ -135,11 +135,11 @@ GEM mutex_m representable (~> 3.0) retriable (>= 2.0, < 4.a) - google-apis-iamcredentials_v1 (0.27.0) + google-apis-iamcredentials_v1 (0.28.0) google-apis-core (>= 0.15.0, < 2.a) - google-apis-playcustomapp_v1 (0.17.0) + google-apis-playcustomapp_v1 (0.18.0) google-apis-core (>= 0.15.0, < 2.a) - google-apis-storage_v1 (0.63.0) + google-apis-storage_v1 (0.64.0) google-apis-core (>= 0.15.0, < 2.a) google-cloud-core (1.9.0) google-cloud-env (>= 1.0, < 3.a) @@ -148,7 +148,7 @@ GEM base64 (~> 0.2) faraday (>= 1.0, < 3.a) google-cloud-errors (1.6.0) - google-cloud-storage (1.60.0) + google-cloud-storage (1.61.0) addressable (~> 2.8) digest-crc (~> 0.4) google-apis-core (>= 0.18, < 2) @@ -158,7 +158,7 @@ GEM googleauth (~> 1.9) mini_mime (~> 1.0) google-logging-utils (0.2.0) - googleauth (1.17.0) + googleauth (1.17.1) faraday (>= 1.0, < 3.a) google-cloud-env (~> 2.2) google-logging-utils (~> 0.1) @@ -245,10 +245,10 @@ CHECKSUMS artifactory (3.0.17) sha256=3023d5c964c31674090d655a516f38ca75665c15084140c08b7f2841131af263 atomos (0.1.3) sha256=7d43b22f2454a36bace5532d30785b06de3711399cb1c6bf932573eda536789f aws-eventstream (1.4.0) sha256=116bf85c436200d1060811e6f5d2d40c88f65448f2125bc77ffce5121e6e183b - aws-partitions (1.1259.0) sha256=1a61c53f85cee1e69e4ab7946c7350b2237d724acf589023715e7117c03c18c6 + aws-partitions (1.1261.0) sha256=89eda89781c1ea4e1be2a2dcdc72318c62c6171a01cdaeaa0cbecf3cea6f9fdc aws-sdk-core (3.252.0) sha256=09c042cbfc2acf2239441cc9b982ebab2a999bed2ef6bdc51849e7b3d6e48a1c aws-sdk-kms (1.129.0) sha256=363f548df321f4a4fcfd05523384e591060b400f8e65133ed7ef0793155a3343 - aws-sdk-s3 (1.225.1) sha256=d4b23a8db9b0a5548766b52d382b184f47f7e126560acdb731dd46adb5e26512 + aws-sdk-s3 (1.226.0) sha256=e599f431e006ec9b92c61ee0f14d3f658a1f6c8a1d623d2160be927ac958e2bf aws-sigv4 (1.12.1) sha256=6973ff95cb0fd0dc58ba26e90e9510a2219525d07620c8babeb70ef831826c00 babosa (1.0.4) sha256=18dea450f595462ed7cb80595abd76b2e535db8c91b350f6c4b3d73986c5bc99 base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b @@ -283,17 +283,17 @@ CHECKSUMS fastlane (2.236.1) sha256=fb89e618e0f38636e487743622cf710ad722723f5d33a63f19e367f84d3770bc fastlane-sirp (1.1.0) sha256=10bc94f9682efd8e1badfb31452a76dd8981f1f3a33717c765fde6d75b54d847 gh_inspector (1.1.3) sha256=04cca7171b87164e053aa43147971d3b7f500fcb58177698886b48a9fc4a1939 - google-apis-androidpublisher_v3 (0.102.0) sha256=562415c44bd7f81cc808abbea11845ede16cdc3696d95f95efcf50aaffb159cf + google-apis-androidpublisher_v3 (0.103.0) sha256=8075b9da398b201493ad1cd4074ff1a76ae67abf7eaad4242c0c75d22d61b559 google-apis-core (0.18.0) sha256=96b057816feeeab448139ed5b5c78eab7fc2a9d8958f0fbc8217dedffad054ee - google-apis-iamcredentials_v1 (0.27.0) sha256=9289f29968610754ef11d98b9ec627f0153f3e2616fef839aef096de529f6d1e - google-apis-playcustomapp_v1 (0.17.0) sha256=d5bc90b705f3f862bab4998086449b0abe704ee1685a84821daa90ca7fa95a78 - google-apis-storage_v1 (0.63.0) sha256=7063a6c19c40f5ef96d5894df33c4f9ac915e3107e632b1870ba5247e3bb633f + google-apis-iamcredentials_v1 (0.28.0) sha256=0a92ffe6cc39c569554af2a77a25dfc61519ed8bbb64ab04cffdd352dc5ef106 + google-apis-playcustomapp_v1 (0.18.0) sha256=44b277b9dee4a59ac5e9d98be1485edc5e382d2f9d73c79ae8908a455786a254 + google-apis-storage_v1 (0.64.0) sha256=75b11afa2edcee859b84c7a6972ee4456314eeef5f762827fd6cf5c5ffaf93f2 google-cloud-core (1.9.0) sha256=ab55409f51488e8deefb6edcc1ce4771dfb5da2fe7b3bc075709a030c2b682a4 google-cloud-env (2.2.2) sha256=94bed40e05a67e9468ce1cb38389fba9a90aa8fc62fc9e173204c1dca59e21e7 google-cloud-errors (1.6.0) sha256=1da8476dd706ad04b9d32e3c4b90d07d3463b37d6407cb56d41342ea7647d0a1 - google-cloud-storage (1.60.0) sha256=b21b752d37945d678a4533be5ef4303f15d33a964d8bc709c7c41c3600f650db + google-cloud-storage (1.61.0) sha256=a77f10f4a603289948b09e81c3e23d762a18733fd69d70a4c1399663fbd96002 google-logging-utils (0.2.0) sha256=675462b4ea5affa825a3442694ca2d75d0069455a1d0956127207498fca3df7b - googleauth (1.17.0) sha256=dbddcaa3b78469fa9392c0e784ab6d8f3f760a1e5f6c6dbbbaa44a612c4198b0 + googleauth (1.17.1) sha256=0f7e6fc70e204cee1b2d71f1e1de2d3b349d432404197fe68ebf7fa23d0821b9 highline (2.0.3) sha256=2ddd5c127d4692721486f91737307236fe005352d12a4202e26c48614f719479 http-cookie (1.0.8) sha256=b14fe0445cf24bf9ae098633e9b8d42e4c07c3c1f700672b09fbfe32ffd41aa6 httpclient (2.9.0) sha256=4b645958e494b2f86c2f8a2f304c959baa273a310e77a2931ddb986d83e498c8 From cc2064f79c48fd9509fd9f48f6b0e76b30b98093 Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Sun, 21 Jun 2026 14:49:22 +0200 Subject: [PATCH 16/19] feat: add cupertino style date selection dialog --- lib/components/adaptive_calendar_picker.dart | 50 +++++++++++++++++ lib/providers/sheets_provider.dart | 58 ++++++++++---------- pubspec.lock | 16 ++++++ pubspec.yaml | 1 + 4 files changed, 97 insertions(+), 28 deletions(-) create mode 100644 lib/components/adaptive_calendar_picker.dart diff --git a/lib/components/adaptive_calendar_picker.dart b/lib/components/adaptive_calendar_picker.dart new file mode 100644 index 0000000..1039e47 --- /dev/null +++ b/lib/components/adaptive_calendar_picker.dart @@ -0,0 +1,50 @@ +import 'dart:io'; + +import 'package:cupertino_calendar_picker/cupertino_calendar_picker.dart'; +import 'package:flutter/material.dart'; + +class AdaptiveCalendarPicker { + // The very first date in computer history + static var firstDate = DateTime.fromMillisecondsSinceEpoch(0); + // Allow future dates up to 1 year + static var lastDate = DateTime.now().add(Duration(days: 365)); + + static Future show( + BuildContext context, { + DateTime? initialDate, + }) async { + if (Platform.isIOS || Platform.isMacOS) { + return cupertinoCalendarPicker(context, initialDate: initialDate); + } + + return materialCalendarPicker(context, initialDate: initialDate); + } + + static Future materialCalendarPicker( + BuildContext context, { + DateTime? initialDate, + }) async { + return showDatePicker( + context: context, + initialDate: initialDate, + firstDate: firstDate, + lastDate: lastDate, + ); + } + + static Future cupertinoCalendarPicker( + BuildContext context, { + DateTime? initialDate, + }) async { + var renderBox = context.findRenderObject() as RenderBox?; + + return showCupertinoCalendarPicker( + context, + widgetRenderBox: renderBox, + minimumDateTime: firstDate, + initialDateTime: initialDate, + maximumDateTime: lastDate, + dismissBehavior: CalendarDismissBehavior.onOusideTapOrDateSelect, + ); + } +} diff --git a/lib/providers/sheets_provider.dart b/lib/providers/sheets_provider.dart index 5e5566a..d5901de 100644 --- a/lib/providers/sheets_provider.dart +++ b/lib/providers/sheets_provider.dart @@ -4,6 +4,7 @@ import 'package:get/get.dart'; import 'package:intl/intl.dart'; import 'package:paren/classes/sheet.dart'; import 'package:paren/classes/sheet_entry.dart'; +import 'package:paren/components/adaptive_calendar_picker.dart'; import 'package:paren/components/adaptive_overlay.dart'; import 'package:paren/l10n/app_localizations_extension.dart'; import 'package:paren/providers/constants.dart'; @@ -229,36 +230,37 @@ class SheetsProvider extends GetxController { ); }), 12.h, - TextField( - controller: dateCtrl, - onTap: () async { - var pickedDate = await showDatePicker( - context: context, - initialDate: selectedDate, - firstDate: DateTime(2000), - lastDate: DateTime.now().add( - Duration(days: 365), - ), // Allow future dates up to 1 year + Builder( + builder: (context) { + return TextField( + controller: dateCtrl, + onTap: () async { + var pickedDate = + await AdaptiveCalendarPicker.show( + context, + initialDate: selectedDate, + ); + if (pickedDate != null && context.mounted) { + setState(() { + selectedDate = DateTime( + pickedDate.year, + pickedDate.month, + pickedDate.day, + 12, + ); + dateCtrl.text = dateFormatter.format( + selectedDate, + ); + }); + } + }, + readOnly: true, + decoration: InputDecoration( + label: Text(l10n.date), + suffixIcon: Icon(Icons.date_range), + ), ); - if (pickedDate != null && context.mounted) { - setState(() { - selectedDate = DateTime( - pickedDate.year, - pickedDate.month, - pickedDate.day, - 12, - ); - dateCtrl.text = dateFormatter.format( - selectedDate, - ); - }); - } }, - readOnly: true, - decoration: InputDecoration( - label: Text(l10n.date), - suffixIcon: Icon(Icons.date_range), - ), ), if (entry != null && sheet != null) ...[ 12.h, diff --git a/pubspec.lock b/pubspec.lock index 465d924..3b85704 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -177,6 +177,22 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.7" + cupertino_calendar_picker: + dependency: "direct main" + description: + name: cupertino_calendar_picker + sha256: "91a717b990d2c602c0be84a8c1e584eea69fae92dad7b3259d019e1b40e10a54" + url: "https://pub.dev" + source: hosted + version: "2.2.6" + cupertino_icons: + dependency: transitive + description: + name: cupertino_icons + sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd" + url: "https://pub.dev" + source: hosted + version: "1.0.9" dart_style: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index d845ee0..cf9ead2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -32,6 +32,7 @@ dependencies: stupid_simple_sheet: 0.9.1+1 json_annotation: 4.12.0 liquid_glass_widgets: ^0.17.1 + cupertino_calendar_picker: ^2.2.6 # image_picker: 1.1.2 dev_dependencies: From f3f0094718e424ffd5f216c3a8dd4adc907eb6f3 Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Sun, 21 Jun 2026 14:51:48 +0200 Subject: [PATCH 17/19] feat: add more linting rules and fix the issues --- analysis_options.yaml | 2 ++ lib/components/adaptive_calendar_picker.dart | 9 +++------ lib/screens/home/customization.dart | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 768c576..9e45ada 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -45,6 +45,8 @@ linter: omit_obvious_local_variable_types: true omit_obvious_property_types: true directives_ordering: true + unnecessary_async: true + avoid_slow_async_io: true # Additional information about this file can be found at # https://dart.dev/guides/language/analysis-options diff --git a/lib/components/adaptive_calendar_picker.dart b/lib/components/adaptive_calendar_picker.dart index 1039e47..1464f5e 100644 --- a/lib/components/adaptive_calendar_picker.dart +++ b/lib/components/adaptive_calendar_picker.dart @@ -9,10 +9,7 @@ class AdaptiveCalendarPicker { // Allow future dates up to 1 year static var lastDate = DateTime.now().add(Duration(days: 365)); - static Future show( - BuildContext context, { - DateTime? initialDate, - }) async { + static Future show(BuildContext context, {DateTime? initialDate}) { if (Platform.isIOS || Platform.isMacOS) { return cupertinoCalendarPicker(context, initialDate: initialDate); } @@ -23,7 +20,7 @@ class AdaptiveCalendarPicker { static Future materialCalendarPicker( BuildContext context, { DateTime? initialDate, - }) async { + }) { return showDatePicker( context: context, initialDate: initialDate, @@ -35,7 +32,7 @@ class AdaptiveCalendarPicker { static Future cupertinoCalendarPicker( BuildContext context, { DateTime? initialDate, - }) async { + }) { var renderBox = context.findRenderObject() as RenderBox?; return showCupertinoCalendarPicker( diff --git a/lib/screens/home/customization.dart b/lib/screens/home/customization.dart index 61ed385..8978161 100644 --- a/lib/screens/home/customization.dart +++ b/lib/screens/home/customization.dart @@ -279,7 +279,7 @@ class _CustomizationState extends State { 3, (i) => i == paren.appThemeMode.value.index, ), - onPressed: (int index) async { + onPressed: (int index) { if (paren.appThemeMode.value.index == index) return; paren.appThemeMode.value = ThemeMode.values[index]; paren.setTheme(); From 478839def7107b42b4b144b626d19c934be5dedd Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Sun, 21 Jun 2026 14:56:52 +0200 Subject: [PATCH 18/19] chore: bump version --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index cf9ead2..fbdd855 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: paren description: "A new Flutter project." publish_to: "none" -version: 1.11.5+1 +version: 1.11.6+1 environment: sdk: ^3.12.0 From 4ca1ebf37f83d87d98d8a85783a33c905cc072ba Mon Sep 17 00:00:00 2001 From: Emre Yurtseven Date: Sun, 21 Jun 2026 14:58:01 +0200 Subject: [PATCH 19/19] chore: remove github darwin script from store scripts --- release-ios.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/release-ios.sh b/release-ios.sh index 80fefb7..7ef9f77 100755 --- a/release-ios.sh +++ b/release-ios.sh @@ -8,7 +8,6 @@ cd ios || exit echo "==> bundler exec fastlane release" bundler exec fastlane release cd .. || exit -./release-github-darwin.sh git add ./ios/ git commit -m "chore: update ios version" git push