diff --git a/.github/workflows/flutter_build.yml b/.github/workflows/flutter_build.yml
index 3a02db39f..eb15c6d3e 100644
--- a/.github/workflows/flutter_build.yml
+++ b/.github/workflows/flutter_build.yml
@@ -9,24 +9,24 @@ jobs:
build_ios:
name: (iOS)
runs-on: macos-latest
- timeout-minutes: 15
+ timeout-minutes: 30
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Set Xcode version
uses: maxim-lobanov/setup-xcode@v1
with:
- xcode-version: "16.4" # Set to a specific recent stable Xcode version
+ xcode-version: "16.4"
- - uses: actions/setup-java@v2
+ - uses: actions/setup-java@v4
with:
distribution: "zulu"
- java-version: "17" # Use JDK 17 for better compatibility
+ java-version: "21"
- uses: subosito/flutter-action@v2
with:
channel: "stable"
- flutter-version: "3.38.3" # Latest stable Flutter version as of Dec 05 2025
+ flutter-version: "3.44.0"
- run: flutter clean
- run: flutter --version
@@ -39,7 +39,6 @@ jobs:
name: (Android)
runs-on: ubuntu-latest
timeout-minutes: 20
- # Removed the 'strategy' block with 'api-level' and 'target' matrix
steps:
- uses: actions/checkout@v4
@@ -47,13 +46,13 @@ jobs:
uses: actions/setup-java@v4
with:
distribution: "zulu"
- java-version: "21" # Keeping Java 21 as per your current setup
+ java-version: "21"
- name: Set up Flutter SDK
uses: subosito/flutter-action@v2
with:
channel: "stable"
- flutter-version: "3.38.3" # Latest stable Flutter version as of Dec 05 2025
+ flutter-version: "3.44.0"
- name: Clean Flutter project
run: flutter clean
@@ -70,7 +69,6 @@ jobs:
- name: Generate localization files
run: flutter gen-l10n
- # Cache Gradle dependencies for faster subsequent builds
- name: Cache Gradle dependencies
uses: actions/cache@v4
with:
@@ -81,6 +79,5 @@ jobs:
restore-keys: |
${{ runner.os }}-gradle-
- # Build the Android APK (Debug)
- name: Build Android APK (Debug)
run: flutter build apk -t "lib/mains/main_netknights.dart" --debug --flavor netknights
diff --git a/.github/workflows/flutter_test.yml b/.github/workflows/flutter_test.yml
index 8798b4b73..771b99164 100644
--- a/.github/workflows/flutter_test.yml
+++ b/.github/workflows/flutter_test.yml
@@ -17,22 +17,19 @@ jobs:
uses: actions/setup-java@v4
with:
distribution: "zulu"
- java-version: "17" # Using JDK 17 for broader compatibility
+ java-version: "21"
- name: Set up Flutter SDK
uses: subosito/flutter-action@v2
with:
channel: "stable"
- flutter-version: "3.38.3" # Use the latest stable Flutter version as of Dec 05 2025
- cache: true # Enable caching for Flutter SDK itself
- # cache-key and cache-path are automatically handled by subosito/flutter-action when cache: true
+ flutter-version: "3.44.0"
+ cache: true
- name: Cache Flutter Pub dependencies
uses: actions/cache@v4
with:
- path: |
- ${{ runner.tool_cache }}/flutter_plugin_cache # This is often included in ~/.pub-cache, but good to be explicit
- ~/.pub-cache
+ path: ~/.pub-cache
key: ${{ runner.os }}-flutter-${{ hashFiles('**/pubspec.lock') }}
restore-keys: |
${{ runner.os }}-flutter-
@@ -53,4 +50,4 @@ jobs:
run: flutter gen-l10n
- name: Run Flutter tests
- run: flutter test --no-pub # Use --no-pub since pub get was already run/cached
+ run: flutter test --no-pub
diff --git a/.gitignore b/.gitignore
index fea212de0..2a8594237 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,6 +11,7 @@
.buildlog/
.history
.svn/
+*.local.*
# IntelliJ related
*.iml
@@ -30,6 +31,7 @@ build/
# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
+**/android/.kotlin/
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 37aa22aa8..04576601c 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -3,7 +3,6 @@ plugins {
// START: FlutterFire Configuration
id 'com.google.gms.google-services'
// END: FlutterFire Configuration
- id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin"
}
@@ -62,10 +61,6 @@ android {
targetCompatibility = JavaVersion.VERSION_21
}
- kotlinOptions {
- jvmTarget = '21'
- }
-
defaultConfig {
applicationId "it.netknights.piauthenticator"
minSdkVersion flutter.minSdkVersion
@@ -140,3 +135,9 @@ android {
flutter {
source '../..'
}
+
+kotlin {
+ compilerOptions {
+ jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_21
+ }
+}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 87e6da081..d74b5d609 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -26,9 +26,6 @@
android:icon="@mipmap/ic_launcher"
android:enableOnBackInvokedCallback="true"
android:requestLegacyExternalStorage="true">
-
result,
- required double time,
- required String version,
- required String versionNumber,
+ @Default(null) double? time,
+ @Default(null) String? version,
+ @Default(null) String? versionNumber,
@Default(null) String? signature,
@Default(null) D? detail,
}) = PiSuccessResponse;
@@ -64,15 +64,15 @@ sealed class PiServerResponse<
factory PiServerResponse.error({
required int statusCode,
- required int id,
- required String jsonrpc,
+ @Default(null) int? id,
+ @Default(null) String? jsonrpc,
@Default(null) D? detail,
/// This is a throwable error
required PiServerResultError piServerResultError,
- required double time,
- required String version,
- required String versionNumber,
+ @Default(null) double? time,
+ @Default(null) String? version,
+ @Default(null) String? versionNumber,
@Default(null) String? signature,
}) = PiErrorResponse;
bool get isError => this is PiErrorResponse;
@@ -87,12 +87,15 @@ sealed class PiServerResponse<
final map = validateMap(
map: json,
validators: {
- ID: Validators.intType,
- JSONRPC: Validators.string,
+ ID: Validators.intOptional,
+ JSONRPC: Validators.stringOptional,
RESULT: RequiredObjectValidator