diff --git a/README.md b/README.md index 2c6989d..d1336c1 100644 --- a/README.md +++ b/README.md @@ -22,16 +22,18 @@ 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` | +| macOS | `paren.zip` | | 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. *** 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/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/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") 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 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 diff --git a/lib/components/adaptive_calendar_picker.dart b/lib/components/adaptive_calendar_picker.dart new file mode 100644 index 0000000..1464f5e --- /dev/null +++ b/lib/components/adaptive_calendar_picker.dart @@ -0,0 +1,47 @@ +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}) { + if (Platform.isIOS || Platform.isMacOS) { + return cupertinoCalendarPicker(context, initialDate: initialDate); + } + + return materialCalendarPicker(context, initialDate: initialDate); + } + + static Future materialCalendarPicker( + BuildContext context, { + DateTime? initialDate, + }) { + return showDatePicker( + context: context, + initialDate: initialDate, + firstDate: firstDate, + lastDate: lastDate, + ); + } + + static Future cupertinoCalendarPicker( + BuildContext context, { + DateTime? initialDate, + }) { + 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/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(); diff --git a/pubspec.lock b/pubspec.lock index 7e08769..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: @@ -482,10 +498,10 @@ packages: dependency: "direct main" description: name: liquid_glass_widgets - sha256: "2794bd0080a27c0f78a8c7ee70a0be1700057f3c9578794e6891e94157f166ac" + sha256: "0d90d073fe57a67ee9153f887ed4d3384f5fcedaf53ca52c840f5ba835792118" url: "https://pub.dev" source: hosted - version: "0.16.0" + version: "0.17.1" logging: dependency: transitive description: @@ -570,10 +586,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 +618,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: @@ -1045,4 +1061,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 4208098..fbdd855 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,11 +1,11 @@ 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 - flutter: ">=3.34.0" + flutter: ^3.44.0 dependencies: flutter: @@ -31,7 +31,8 @@ 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.17.1 + cupertino_calendar_picker: ^2.2.6 # image_picker: 1.1.2 dev_dependencies: diff --git a/release-github-darwin.sh b/release-github-darwin.sh new file mode 100755 index 0000000..e859c63 --- /dev/null +++ b/release-github-darwin.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash +set -euo pipefail + +git_count=$(git rev-list --count main) + +REPO="yurtemre7/paren" + +if [[ ! -f pubspec.yaml ]]; then + echo "Error: run this script from your Flutter project root." >&2 + exit 1 +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 (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 [[ ${#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" ]]; 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 + echo "Error: could not find the latest release in $REPO." >&2 + exit 1 +fi + +echo "==> Uploading $(basename "$IPA_PATH") to release $TAG" +gh release upload "$TAG" "$IPA_PATH" -R "$REPO" --clobber + +echo "==> Uploading ${APP_NAME}.zip to release $TAG" +gh release upload "$TAG" "$ZIP_PATH" -R "$REPO" --clobber + +echo "==> Done" diff --git a/release-github-ipa.sh b/release-github-ipa.sh deleted file mode 100755 index 4c258f3..0000000 --- a/release-github-ipa.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -git_count=$(git rev-list --count main) - -REPO="yurtemre7/paren" - -if [[ ! -f pubspec.yaml ]]; then - echo "Error: run this script from your Flutter project root." >&2 - exit 1 -fi - -echo "==> flutter build ipa --release --build-number='$git_count'" -flutter build ipa --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)" - -if [[ -z "$IPA_PATH" || ! -f "$IPA_PATH" ]]; then - echo "Error: no IPA found in build/ios/ipa." >&2 - exit 1 -fi - -TAG="$(gh release view -R "$REPO" --json tagName --jq .tagName)" - -if [[ -z "$TAG" ]]; then - echo "Error: could not find the latest release in $REPO." >&2 - exit 1 -fi - -echo "==> Uploading $(basename "$IPA_PATH") to release $TAG" -gh release upload "$TAG" "$IPA_PATH" -R "$REPO" --clobber - -echo "==> Done" \ No newline at end of file diff --git a/release-ios.sh b/release-ios.sh index 244201a..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-ipa.sh git add ./ios/ git commit -m "chore: update ios version" git push