diff --git a/.github/actions/setup-build-environment/action.yml b/.github/actions/setup-build-environment/action.yml index ed0f50d5..d61642e9 100644 --- a/.github/actions/setup-build-environment/action.yml +++ b/.github/actions/setup-build-environment/action.yml @@ -11,7 +11,7 @@ runs: - uses: actions/setup-java@v4 with: distribution: temurin - java-version: 11 + java-version: 17 - uses: actions/setup-go@v5 with: go-version: ^1.22 diff --git a/.github/workflows/delivery.yml b/.github/workflows/delivery.yml index 086fcd61..59e337f2 100644 --- a/.github/workflows/delivery.yml +++ b/.github/workflows/delivery.yml @@ -4,13 +4,13 @@ name: Delivery on: push: - branches: [ master ] + branches: [master] concurrency: ${{ github.ref }} jobs: build-irmagobridge-ios: - runs-on: macos-13 + runs-on: macos-14 steps: - name: Check out repository uses: actions/checkout@v4 @@ -35,7 +35,7 @@ jobs: path: android/irmagobridge/irmagobridge.aar build-app-ios-alpha: # Ad Hoc builds do not require unique build numbers, so we can build this on every push. - runs-on: macos-13 + runs-on: macos-14 needs: build-irmagobridge-ios environment: ad-hoc-alpha steps: @@ -80,8 +80,8 @@ jobs: # beta flavor Android app in the intent:// links. strategy: matrix: - flavor: [ alpha, beta ] - type: [ apk, appbundle ] + flavor: [alpha, beta] + type: [apk, appbundle] steps: - name: Check out repository uses: actions/checkout@v4 @@ -118,8 +118,8 @@ jobs: bundle-app-alpha: runs-on: ubuntu-latest needs: - - build-app-ios-alpha - - build-app-android-alpha + - build-app-ios-alpha + - build-app-android-alpha steps: - name: Download app-alpha-ios artifact uses: actions/download-artifact@v4 @@ -164,7 +164,7 @@ jobs: shell: bash continue-on-error: true build-app-ios-beta: - runs-on: macos-13 + runs-on: macos-14 needs: version-check if: needs.version-check.outputs.version-changed == 'true' environment: app-store-beta diff --git a/.github/workflows/status-checks.yml b/.github/workflows/status-checks.yml index c2149b01..f0afede4 100644 --- a/.github/workflows/status-checks.yml +++ b/.github/workflows/status-checks.yml @@ -34,7 +34,7 @@ jobs: uses: ./.github/actions/setup-build-environment - run: bundle exec fastlane unit_test build-irmagobridge-ios: - runs-on: macos-13 # MacOS version is pinned, because it determines which XCode version is used. + runs-on: macos-14 # MacOS version is pinned, because it determines which XCode version is used. needs: lint steps: - name: Check out repository @@ -80,7 +80,7 @@ jobs: name: prototypes-alpha-android path: ./build/app/outputs/apk/alpha/release/*.apk build-app-ios-alpha: - runs-on: macos-13 # MacOS version is pinned, because it determines which XCode version is used. + runs-on: macos-14 # MacOS version is pinned, because it determines which XCode version is used. needs: build-irmagobridge-ios steps: - name: Check out repository @@ -119,8 +119,8 @@ jobs: needs: build-irmagobridge-android strategy: matrix: - flavor: [ alpha, beta ] - type: [ apk, appbundle ] + flavor: [alpha, beta] + type: [apk, appbundle] steps: - name: Check out repository uses: actions/checkout@v4 @@ -152,8 +152,10 @@ jobs: name: app-${{ matrix.flavor }}-android-${{ matrix.type }} path: ./fastlane/build/* build-integration-test-ios: - runs-on: macos-13 # MacOS version is pinned, because it determines which XCode version is used. + runs-on: macos-14 # MacOS version is pinned, because it determines which XCode version is used. needs: build-irmagobridge-ios + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - name: Check out repository uses: actions/checkout@v4 @@ -185,6 +187,10 @@ jobs: with: name: integration-test-ios path: ./fastlane/build/*.zip + - name: Dynamically generate matrix for running integration tests + id: set-matrix + # This oneliner gets every test zip generated by Fastlane and writes this as output to GitHub. This is used for the matrix in the integration-test-ios job below. + run: echo "matrix=$(for file in $(ls ./fastlane/build/*.zip); do basename "$file"; done | jq -R . | jq -sc .)" >> $GITHUB_OUTPUT build-integration-test-android: runs-on: ubuntu-latest needs: build-irmagobridge-android @@ -211,7 +217,10 @@ jobs: needs: - build-integration-test-ios - unit-test # To prevent that test resources are used when we already know there is an issue. - concurrency: integration-test-ios # To prevent that we use too much test resources at the same time. + strategy: + matrix: + file_name: ${{ fromJson(needs.build-integration-test-ios.outputs.matrix) }} + concurrency: integration-test-ios-${{ matrix.file_name }} # To prevent that we use too much test resources at the same time. steps: - name: Download test artifacts uses: actions/download-artifact@v4 @@ -225,14 +234,34 @@ jobs: shell: bash - name: Set Firebase project run: gcloud config set project ${{ secrets.GCLOUD_PROJECT_NAME }} - - name: Run integration tests - run: gcloud firebase test ios run --test ios_tests.zip --timeout 20m --device=model=iphone8,orientation=portrait --device=model=iphone8,orientation=landscape + - name: Run integration tests for each zip file + run: | + gcloud firebase test ios run \ + --test ${{ matrix.file_name }} \ + --timeout 7m \ + --device=model=iphone8,orientation=portrait \ + --device=model=iphone8,orientation=landscape + # this summary is needed to report a final result for the ios test matrix + # this job is added to the branch protection rules, so the matrix has to fully pass before merge + integration-test-ios-summary: + runs-on: ubuntu-latest + needs: integration-test-ios # Wait for all matrix jobs + if: ${{ always() }} # Run even if a matrix job fails + steps: + - name: Check integration test results + run: | + if [ "${{ needs.integration-test-ios.result }}" == "failure" ] || [ "${{ needs.integration-test-ios.result }}" == "cancelled" ]; then + echo "One or more integration tests failed." + exit 1 + else + echo "All integration tests passed." + fi integration-test-android: runs-on: ubuntu-latest container: google/cloud-sdk:latest needs: - - build-integration-test-android - - unit-test # To prevent that test resources are used when we already know there is an issue. + - build-integration-test-android + - unit-test # To prevent that test resources are used when we already know there is an issue. concurrency: integration-test-android # To prevent that we use too much test resources at the same time. steps: - name: Download test artifacts diff --git a/CHANGELOG.md b/CHANGELOG.md index cd7a3950..7c4ff149 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## Unreleased +### Changed +- Upgrade Flutter to 3.24.6 +- Upgrade XCode to 16.0 +- Use Java 17 to build for Android ## [7.5.6] - 2024-07-22 ### Changed diff --git a/README.md b/README.md index 1966215b..25867f38 100644 --- a/README.md +++ b/README.md @@ -38,13 +38,13 @@ attaching data to signed statements. These data can be relevant properties, such git submodule init git submodule update -* Install Java development kit. Java 11 _should_ work. Java 8 is not supported anymore. +* Install Java development kit. We recommend to use Java 17. # On Debian / Ubuntu - apt install openjdk-11-jdk + apt install openjdk-17-jdk # On MacOS - # TODO: Install via `brew install openjdk@11`, but how to replace system Java? + # TODO: Install via `brew install openjdk@17`, but how to replace system Java? * Install the Android SDK tools by going to the [Android developer download page](https://developer.android.com/studio/). Make sure to install the build-tools and platform for Android >= 28. In addition @@ -172,6 +172,7 @@ workflows in .github/workflows). Documentation about the Fastlane scripting can * When you get an error related to `x_cgo_inittls` while running `./bind_go.sh`, you probably use an incorrect version of the Android NDK or your Go version is too old. * When the flutter tool cannot find the generated apk after building for Android, the flavor is probably omitted. You need to run `flutter run --flavor alpha` or `flutter run --flavor beta`. * When you are working with Windows, you need to manually make a symlink between the configuration folders. You can do this by opening a terminal as administrator and use the following command: `mklink /d .\android\app\src\main\assets\irma_configuration .\irma_configuration`. +* When Java jdk version is not compatible: set the jdk version flutter uses with `flutter config --jdk-dir `. Version 17 is recommended for this app (don't try to fiddle with gradle versions). * When you are building for iOS using XCode and you get `Dart Error: Can't load Kernel binary: Invalid kernel binary format version.`, then likely your Flutter cache is corrupted. You can empty and reload the Flutter cache in the following way: ```shell pushd $(which flutter)/../ diff --git a/android/app/build.gradle b/android/app/build.gradle index 225f340c..03ea01c7 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,3 +1,9 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -6,11 +12,6 @@ if (localPropertiesFile.exists()) { } } -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' @@ -21,9 +22,6 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } -apply plugin: 'com.android.application' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - android { compileSdkVersion 34 diff --git a/android/build.gradle b/android/build.gradle index 6ab91a71..bc157bd1 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,20 +1,3 @@ -buildscript { - /* - Because we depend on the packages flutter_privacy_screen and mobile_scanner - that do not specify the correct Kotlin versions themselves we have to include it here. - */ - ext.kotlin_version = '1.6.20' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.4.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - allprojects { repositories { google() diff --git a/android/settings.gradle b/android/settings.gradle index 47c4d731..a41041cc 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,15 +1,25 @@ -include ':app', ':irmagobridge' +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } + repositories { + google() + mavenCentral() + gradlePluginPortal() + } } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "7.4.0" apply false + id "org.jetbrains.kotlin.android" version "1.7.21" apply false } + +include ':app', ':irmagobridge' diff --git a/ci_scripts/install_flutter.sh b/ci_scripts/install_flutter.sh index 23953cf9..41cba311 100755 --- a/ci_scripts/install_flutter.sh +++ b/ci_scripts/install_flutter.sh @@ -3,10 +3,10 @@ # The environment variables FLUTTER_HOME needs to be set and "$FLUTTER_HOME/bin" needs to be added to the PATH. set -euxo pipefail -FLUTTER_VERSION="3.13.5" +FLUTTER_VERSION="3.24.3" FLUTTER_CHANNEL="stable" -FLUTTER_CHECKSUM_LINUX="0f68460f2bf9f09df7d19711517949a2625c5eaf07a55d41746d6f2a25aaa769" -FLUTTER_CHECKSUM_MACOS="31da5a8328792bd55b52f21f96a1c64855b9afb1597717c5ccb1803b50d58333" +FLUTTER_CHECKSUM_LINUX="f4e2369afaf38a8e381c9243fad2ca04b8514194c40ec946825d1f4c5539a095" +FLUTTER_CHECKSUM_MACOS="c7947ac3162acc580d9ba55d16ce4a3e51966f5b8799bf0344f455e8ec3df242" if [[ -z "$FLUTTER_HOME" ]]; then echo "Environment variable FLUTTER_HOME needs to be set" diff --git a/ci_scripts/select_xcode.sh b/ci_scripts/select_xcode.sh index 14dffb85..f8af1253 100755 --- a/ci_scripts/select_xcode.sh +++ b/ci_scripts/select_xcode.sh @@ -1,8 +1,8 @@ #!/usr/bin/env bash set -euxo pipefail -XCODE_VERSION="14.3.1" +XCODE_VERSION="16.0" # Location is based on the Xcode versions bundled with the macOS runners in GitHub Actions. -# https://github.com/actions/runner-images/blob/main/images/macos/macos-13-Readme.md#xcode +# https://github.com/actions/runner-images/blob/main/images/macos/macos-14-Readme.md#xcode sudo xcode-select -s /Applications/Xcode_${XCODE_VERSION}.app/Contents/Developer diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 1f08661a..a467d40a 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -215,29 +215,50 @@ lane :ios_build_integration_test do |options| certificate_password: options[:certificate_password], code_signing_identity: options[:code_signing_identity] ) + + # Navigate to the Flutter project root directory Dir.chdir("..") do - sh( - "flutter", "build", "ios", - "--release", - "./integration_test/test_all.dart" - ) - Dir.chdir("./ios") do + # Get a list of all Dart test files in the integration_test directory + test_files = Dir["integration_test/**/*_test.dart"] + + test_files.each do |test_file| + # Extract the base name of the test file to use for naming zip files + test_name = File.basename(test_file, ".dart") + + # Run Flutter build for each test file sh( - "xcodebuild", - "-workspace", "Runner.xcworkspace", - "-scheme", "Runner", - "-config", "Flutter/Release.xcconfig", - "-derivedDataPath", "../build/ios_integ", - "-sdk", "iphoneos", - "build-for-testing", + "flutter", "build", "ios", + "--release", + "--config-only", + test_file ) - end - Dir.chdir("./build/ios_integ/Build/Products") do - # XCode does not clean left-over build artifacts created by earlier XCode versions. - # Therefore, we ensure only the xctestrun file for the latest iOS SDK is included. - test_run_name = sh("ls -r1 *.xctestrun | head -n 1") - sh("rm -f ../../../../fastlane/build/ios_tests.zip") - sh("zip -r ../../../../fastlane/build/ios_tests.zip Release-iphoneos #{test_run_name}") + + # Navigate to the ios directory and run xcodebuild for each test + Dir.chdir("./ios") do + sh( + "xcodebuild", + "-workspace", "Runner.xcworkspace", + "-scheme", "Runner", + "-config", "Flutter/Release.xcconfig", + "-derivedDataPath", "../build/ios_integ", + "-sdk", "iphoneos", + "build-for-testing" + ) + end + + # Create a zip for each test output + Dir.chdir("./build/ios_integ/Build/Products") do + # XCode does not clean left-over build artifacts created by earlier XCode versions. + # Therefore, we ensure only the xctestrun file for the latest iOS SDK is included. + # Get the latest .xctestrun file (assumes the latest file is the one just built) + test_run_name = sh("ls -r1 *.xctestrun | head -n 1").strip + + # Remove any existing zip file with the same name + sh("rm -f ../../../../fastlane/build/#{test_name}_ios_tests.zip") + + # Zip the build artifacts for the current test file + sh("zip -r ../../../../fastlane/build/#{test_name}_ios_tests.zip Release-iphoneos #{test_run_name}") + end end end end diff --git a/integration_test/disclosure_session/disclosure_session_empty_app_scenarios_test.dart b/integration_test/disclosure_session/disclosure_session_empty_app_scenarios_test.dart new file mode 100644 index 00000000..cf983ca6 --- /dev/null +++ b/integration_test/disclosure_session/disclosure_session_empty_app_scenarios_test.dart @@ -0,0 +1,74 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:integration_test/integration_test.dart'; + +import '../irma_binding.dart'; +import 'empty_app_scenarios/choice.dart'; +import 'empty_app_scenarios/choice_mixed.dart'; +import 'empty_app_scenarios/completely_optional.dart'; +import 'empty_app_scenarios/no_choice.dart'; +import 'empty_app_scenarios/no_choice_multiple_creds.dart'; +import 'empty_app_scenarios/optionals.dart'; +import 'empty_app_scenarios/specific_attribute_values.dart'; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + final irmaBinding = IntegrationTestIrmaBinding.ensureInitialized(); + WidgetController.hitTestWarningShouldBeFatal = true; + + group('disclosure-session', () { + setUp(() async => irmaBinding.setUp()); + tearDown(() => irmaBinding.tearDown()); + + group('empty-app-scenarios', () { + // Full name AND nationality + testWidgets( + 'no-choice', + (tester) => noChoiceTest(tester, irmaBinding), + ); + + // Email OR your mobile number + testWidgets( + 'choice', + (tester) => choiceTest(tester, irmaBinding), + ); + + // Email AND mobile number + testWidgets( + 'no-choice-multiple-creds', + (tester) => noChoiceMultipleCredsTest(tester, irmaBinding), + ); + + // Address from multiplicity OR iDIN + // AND your AGB code (from Nuts) + testWidgets( + 'choice-mixed', + (tester) => choiceMixedTest(tester, irmaBinding), + ); + + // TODO Fix this test + // // Student/employee id from university OR + // // Full name from municipality AND email address + // testWidgets( + // 'choice-mixed-sources', + // (tester) => choiceMixedSourcesTest(tester, irmaBinding), + // ); + + // Bank account number from iDeal. BIC has to be RABONL2U. AND + // Initials, family name and city from iDIN. The city has to be Arnhem + testWidgets( + 'specific-attribute-values', + (tester) => specificAttributeValuesTest(tester, irmaBinding), + ); + + // Address from iDIN or municipality + // And optionally mobile number or e-mail address + testWidgets('optionals', (tester) => optionalsTest(tester, irmaBinding)); + + // E-mail address or nothing + testWidgets( + 'completely-optional', + (tester) => completelyOptionalTest(tester, irmaBinding), + ); + }); + }); +} diff --git a/integration_test/disclosure_session/disclosure_session_filled_app_scenarios_test.dart b/integration_test/disclosure_session/disclosure_session_filled_app_scenarios_test.dart new file mode 100644 index 00000000..db732f04 --- /dev/null +++ b/integration_test/disclosure_session/disclosure_session_filled_app_scenarios_test.dart @@ -0,0 +1,91 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:integration_test/integration_test.dart'; + +import '../irma_binding.dart'; +import 'filled_app_scenarios/filled_choice.dart'; +import 'filled_app_scenarios/filled_choice_mixed.dart'; +import 'filled_app_scenarios/filled_discon.dart'; +import 'filled_app_scenarios/filled_no_choice_multiple_creds.dart'; +import 'filled_app_scenarios/filled_no_choice_same_creds.dart'; +import 'filled_app_scenarios/filled_optional_disjunction.dart'; +import 'filled_app_scenarios/filled_specific_attribute_values_match.dart'; +import 'filled_app_scenarios/filled_specific_attribute_values_no_match.dart'; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + final irmaBinding = IntegrationTestIrmaBinding.ensureInitialized(); + WidgetController.hitTestWarningShouldBeFatal = true; + + group('disclosure-session', () { + setUp(() async => irmaBinding.setUp()); + tearDown(() => irmaBinding.tearDown()); + + group('filled-app-scenarios', () { + // All these tests start with a filled app including: + // An email address + // Personal data from municipality + + // Email OR your mobile number. + testWidgets( + 'filled-choice', + (tester) => filledChoiceTest(tester, irmaBinding), + ); + + // Email AND telephone number + testWidgets( + 'filled-no-choice-multiple-creds', + (tester) => filledNoChoiceMultipleCredsTest(tester, irmaBinding), + ); + + // Requests only the email address, + // but the app already has two email address + testWidgets( + 'filled-no-choice-same-creds', + (tester) => filledNoChoiceSameCredsTest(tester, irmaBinding), + ); + + // Address from municipality OR + // Address from iDIN, with city + testWidgets( + 'filled-choice-mixed', + (tester) => filledChoiceMixedTest(tester, irmaBinding), + ); + + // Address from municipality OR + // Address from iDIN AND + // Email + testWidgets( + 'filled-discon', + (tester) => filledDisconTest(tester, irmaBinding), + ); + + // Address from municipality where city hast to be Arnhem AND + // Email address where domain has to be test.com + testWidgets( + 'filled-specific-attribute-values-match', + (tester) => filledSpecificAttributeValuesMatchTest( + tester, + irmaBinding, + ), + ); + + // Email address where domain has to be test.com + testWidgets( + 'filled-specific-attribute-values-no-match', + (tester) => filledSpecificAttributeValuesNoMatchTest( + tester, + irmaBinding, + ), + ); + + // Email address and optionally a mobile number + testWidgets( + 'filled-optional-disjunction', + (tester) => filledOptionalDisjunctionTest( + tester, + irmaBinding, + ), + ); + }); + }); +} diff --git a/integration_test/disclosure_session/disclosure_session_special_scenarios_test.dart b/integration_test/disclosure_session/disclosure_session_special_scenarios_test.dart new file mode 100644 index 00000000..fa2079e1 --- /dev/null +++ b/integration_test/disclosure_session/disclosure_session_special_scenarios_test.dart @@ -0,0 +1,87 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:integration_test/integration_test.dart'; + +import '../irma_binding.dart'; +import 'special_scenarios/attribute_order.dart'; +import 'special_scenarios/combined_disclosure_issuance.dart'; +import 'special_scenarios/decline_disclosure.dart'; +import 'special_scenarios/nullables.dart'; +import 'special_scenarios/random_blind.dart'; +import 'special_scenarios/revocation.dart'; +import 'special_scenarios/signing.dart'; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + final irmaBinding = IntegrationTestIrmaBinding.ensureInitialized(); + WidgetController.hitTestWarningShouldBeFatal = true; + + group('disclosure-session', () { + setUp(() async => irmaBinding.setUp()); + tearDown(() => irmaBinding.tearDown()); + + group('special-scenarios', () { + // Session with an optional attribute that cannot be null + testWidgets( + 'nullables', + (tester) => nullablesTest( + tester, + irmaBinding, + ), + ); + + // Disclosure session and signing a message + testWidgets( + 'signing', + (tester) => signingTest( + tester, + irmaBinding, + ), + ); + + // Issuance and disclosure in one session + testWidgets( + 'combined-disclosure-issuance-session', + (tester) => combinedDisclosureIssuanceSessionTest( + tester, + irmaBinding, + ), + ); + + // Entering a session with a revoked credential + testWidgets( + 'revocation', + (tester) => revocationTest( + tester, + irmaBinding, + ), + ); + + // Address from municipality with different attribute order + testWidgets( + 'attribute-order', + (tester) => attributeOrderTest( + tester, + irmaBinding, + ), + ); + + // Disclosing stempas credential which is an unobtainable credential (no IssueURL) and contains a random blind attribute. + testWidgets( + 'random-blind', + (tester) => randomBlindTest( + tester, + irmaBinding, + ), + ); + + // Decline disclosure at the last moment + testWidgets( + 'decline-disclosure', + (tester) => declineDisclosure( + tester, + irmaBinding, + ), + ); + }); + }); +} diff --git a/integration_test/disclosure_session/disclosure_session_test.dart b/integration_test/disclosure_session/disclosure_session_test.dart deleted file mode 100644 index 7b46b6ee..00000000 --- a/integration_test/disclosure_session/disclosure_session_test.dart +++ /dev/null @@ -1,225 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:integration_test/integration_test.dart'; - -import '../irma_binding.dart'; -import 'empty_app_scenarios/choice.dart'; -import 'empty_app_scenarios/choice_mixed.dart'; -import 'empty_app_scenarios/completely_optional.dart'; -import 'empty_app_scenarios/no_choice.dart'; -import 'empty_app_scenarios/no_choice_multiple_creds.dart'; -import 'empty_app_scenarios/optionals.dart'; -import 'empty_app_scenarios/specific_attribute_values.dart'; -import 'filled_app_scenarios/filled_choice.dart'; -import 'filled_app_scenarios/filled_choice_mixed.dart'; -import 'filled_app_scenarios/filled_discon.dart'; -import 'filled_app_scenarios/filled_no_choice_multiple_creds.dart'; -import 'filled_app_scenarios/filled_no_choice_same_creds.dart'; -import 'filled_app_scenarios/filled_optional_disjunction.dart'; -import 'filled_app_scenarios/filled_specific_attribute_values_match.dart'; -import 'filled_app_scenarios/filled_specific_attribute_values_no_match.dart'; -import 'special_scenarios/attribute_order.dart'; -import 'special_scenarios/combined_disclosure_issuance.dart'; -import 'special_scenarios/decline_disclosure.dart'; -import 'special_scenarios/nullables.dart'; -import 'special_scenarios/random_blind.dart'; -import 'special_scenarios/revocation.dart'; -import 'special_scenarios/signing.dart'; - -void main() { - IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - final irmaBinding = IntegrationTestIrmaBinding.ensureInitialized(); - WidgetController.hitTestWarningShouldBeFatal = true; - - group('disclosure-session', () { - setUp(() async => irmaBinding.setUp()); - tearDown(() => irmaBinding.tearDown()); - - group( - 'empty-app-scenarios', - () { - // Full name AND nationality - testWidgets( - 'no-choice', - (tester) => noChoiceTest(tester, irmaBinding), - ); - - // Email OR your mobile number - testWidgets( - 'choice', - (tester) => choiceTest(tester, irmaBinding), - ); - - // Email AND mobile number - testWidgets( - 'no-choice-multiple-creds', - (tester) => noChoiceMultipleCredsTest(tester, irmaBinding), - ); - - // Address from multiplicity OR iDIN - // AND your AGB code (from Nuts) - testWidgets( - 'choice-mixed', - (tester) => choiceMixedTest(tester, irmaBinding), - ); - - // TODO Fix this test - // // Student/employee id from university OR - // // Full name from municipality AND email address - // testWidgets( - // 'choice-mixed-sources', - // (tester) => choiceMixedSourcesTest(tester, irmaBinding), - // ); - - // Bank account number from iDeal. BIC has to be RABONL2U. AND - // Initials, family name and city from iDIN. The city has to be Arnhem - testWidgets( - 'specific-attribute-values', - (tester) => specificAttributeValuesTest(tester, irmaBinding), - ); - - // Address from iDIN or municipality - // And optionally mobile number or e-mail address - testWidgets('optionals', (tester) => optionalsTest(tester, irmaBinding)); - - // E-mail address or nothing - testWidgets( - 'completely-optional', - (tester) => completelyOptionalTest(tester, irmaBinding), - ); - }, - ); - - group('filled-app-scenarios', () { - // All these tests start with a filled app including: - // An email address - // Personal data from municipality - - // Email OR your mobile number. - testWidgets( - 'filled-choice', - (tester) => filledChoiceTest(tester, irmaBinding), - ); - - // Email AND telephone number - testWidgets( - 'filled-no-choice-multiple-creds', - (tester) => filledNoChoiceMultipleCredsTest(tester, irmaBinding), - ); - - // Requests only the email address, - // but the app already has two email address - testWidgets( - 'filled-no-choice-same-creds', - (tester) => filledNoChoiceSameCredsTest(tester, irmaBinding), - ); - - // Address from municipality OR - // Address from iDIN, with city - testWidgets( - 'filled-choice-mixed', - (tester) => filledChoiceMixedTest(tester, irmaBinding), - ); - - // Address from municipality OR - // Address from iDIN AND - // Email - testWidgets( - 'filled-discon', - (tester) => filledDisconTest(tester, irmaBinding), - ); - - // Address from municipality where city hast to be Arnhem AND - // Email address where domain has to be test.com - testWidgets( - 'filled-specific-attribute-values-match', - (tester) => filledSpecificAttributeValuesMatchTest( - tester, - irmaBinding, - ), - ); - - // Email address where domain has to be test.com - testWidgets( - 'filled-specific-attribute-values-no-match', - (tester) => filledSpecificAttributeValuesNoMatchTest( - tester, - irmaBinding, - ), - ); - - // Email address and optionally a mobile number - testWidgets( - 'filled-optional-disjunction', - (tester) => filledOptionalDisjunctionTest( - tester, - irmaBinding, - ), - ); - }); - - group('special-scenarios', () { - // Session with an optional attribute that cannot be null - testWidgets( - 'nullables', - (tester) => nullablesTest( - tester, - irmaBinding, - ), - ); - - // Disclosure session and signing a message - testWidgets( - 'signing', - (tester) => signingTest( - tester, - irmaBinding, - ), - ); - - // Issuance and disclosure in one session - testWidgets( - 'combined-disclosure-issuance-session', - (tester) => combinedDisclosureIssuanceSessionTest( - tester, - irmaBinding, - ), - ); - - // Entering a session with a revoked credential - testWidgets( - 'revocation', - (tester) => revocationTest( - tester, - irmaBinding, - ), - ); - - // Address from municipality with different attribute order - testWidgets( - 'attribute-order', - (tester) => attributeOrderTest( - tester, - irmaBinding, - ), - ); - - // Disclosing stempas credential which is an unobtainable credential (no IssueURL) and contains a random blind attribute. - testWidgets( - 'random-blind', - (tester) => randomBlindTest( - tester, - irmaBinding, - ), - ); - - // Decline disclosure at the last moment - testWidgets( - 'decline-disclosure', - (tester) => declineDisclosure( - tester, - irmaBinding, - ), - ); - }); - }); -} diff --git a/integration_test/disclosure_session/disclosure_session_test_all.dart b/integration_test/disclosure_session/disclosure_session_test_all.dart new file mode 100644 index 00000000..602001c3 --- /dev/null +++ b/integration_test/disclosure_session/disclosure_session_test_all.dart @@ -0,0 +1,9 @@ +import 'disclosure_session_empty_app_scenarios_test.dart' as empty_app_scenarios; +import 'disclosure_session_filled_app_scenarios_test.dart' as filled_app_scenarios; +import 'disclosure_session_special_scenarios_test.dart' as special_scenarios; + +void main() { + empty_app_scenarios.main(); + filled_app_scenarios.main(); + special_scenarios.main(); +} diff --git a/integration_test/test_all.dart b/integration_test/test_all.dart index 60fb1168..64f25806 100644 --- a/integration_test/test_all.dart +++ b/integration_test/test_all.dart @@ -1,6 +1,6 @@ import 'activity_test.dart' as activity_test; import 'credential_store_test.dart' as credential_store_test; -import 'disclosure_session/disclosure_session_test.dart' as disclosure_session; +import 'disclosure_session/disclosure_session_test_all.dart' as disclosure_session; import 'enroll_test.dart' as enroll_test; import 'home_test.dart' as home_test; import 'issuance_test.dart' as issuance_test; diff --git a/integration_test/util.dart b/integration_test/util.dart index 64cd33d8..0f460f56 100644 --- a/integration_test/util.dart +++ b/integration_test/util.dart @@ -4,7 +4,7 @@ import 'package:flutter_test/flutter_test.dart'; extension WidgetTesterUtil on WidgetTester { /// Renders the given widget and waits until it settles. Future pumpWidgetAndSettle(Widget w) async { - await pumpWidget(w, const Duration(seconds: 2)); + await pumpWidget(w, duration: const Duration(seconds: 2)); await waitFor(find.byWidget(w)); } diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d24..8c6e5614 100644 --- a/ios/Flutter/AppFrameworkInfo.plist +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/ios/Flutter/Flutter.podspec b/ios/Flutter/Flutter.podspec index 29758b70..98e16339 100644 --- a/ios/Flutter/Flutter.podspec +++ b/ios/Flutter/Flutter.podspec @@ -11,7 +11,7 @@ Pod::Spec.new do |s| s.license = { :type => 'BSD' } s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } s.source = { :git => 'https://github.com/flutter/engine', :tag => s.version.to_s } - s.ios.deployment_target = '11.0' + s.ios.deployment_target = '12.0' # Framework linking is handled by Flutter tooling, not CocoaPods. # Add a placeholder to satisfy `s.dependency 'Flutter'` plugin podspecs. s.vendored_frameworks = 'path/to/nothing' diff --git a/ios/Podfile b/ios/Podfile index 51cef5cd..887602a5 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,4 +1,4 @@ -platform :ios, '11.0' +platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 97a157e6..9ef8aab6 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -17,18 +17,16 @@ PODS: - Flutter - package_info_plus (0.4.5): - Flutter - - permission_handler_apple (9.1.1): + - permission_handler_apple (9.3.0): - Flutter - qr_code_scanner (0.2.0): - Flutter - MTBBarcodeScanner - - Sentry/HybridSDK (8.15.2): - - SentryPrivate (= 8.15.2) - - sentry_flutter (0.0.1): + - Sentry/HybridSDK (8.36.0) + - sentry_flutter (8.9.0): - Flutter - FlutterMacOS - - Sentry/HybridSDK (= 8.15.2) - - SentryPrivate (8.15.2) + - Sentry/HybridSDK (= 8.36.0) - share (0.0.1): - Flutter - shared_preferences_foundation (0.0.1): @@ -58,7 +56,6 @@ SPEC REPOS: - IOSSecuritySuite - MTBBarcodeScanner - Sentry - - SentryPrivate EXTERNAL SOURCES: Flutter: @@ -91,25 +88,24 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/url_launcher_ios/ios" SPEC CHECKSUMS: - Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 + Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 flutter_jailbreak_detection: c5bf66ff6c0c4230769b6ba0bd63eb6ac4148a76 - flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef + flutter_native_splash: edf599c81f74d093a4daf8e17bd7a018854bc778 flutter_privacy_screen: 60e2b67bb00f0bba6ccfbdf8c5ad353ef928fb68 - integration_test: 13825b8a9334a850581300559b8839134b124670 + integration_test: 252f60fa39af5e17c3aa9899d35d908a0721b573 IOSSecuritySuite: 72c55371aafe586196c325a8348319c36d385ce4 MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb native_device_orientation: 3b4cfc9565a7b879cc4fde282b3e27745e852d0d package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62 - package_info_plus: fd030dabf36271f146f1f3beacd48f564b0f17f7 - permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6 + package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c + permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e - Sentry: 6f5742b4c47c17c9adcf265f6f328cf4a0ed1923 - sentry_flutter: 2c309a1d4b45e59d02cfa15795705687f1e2081b - SentryPrivate: b2f7996f37781080f04a946eb4e377ff63c64195 + Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 + sentry_flutter: 0eb93e5279eb41e2392212afe1ccd2fecb4f8cbe share: 0b2c3e82132f5888bccca3351c504d0003b3b410 - shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126 - url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe -PODFILE CHECKSUM: 6481f0eb60f548a47d740e4b9431c58b05cf55b3 +PODFILE CHECKSUM: a5d23baa2c1e9ecb0238b15941bc5d7f9ca5c6bc -COCOAPODS: 1.14.3 +COCOAPODS: 1.15.2 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 4a02306c..f81d9fb6 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -216,6 +216,7 @@ 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, DE37E3181C3181F0765467D4 /* [CP] Embed Pods Frameworks */, + C0D4CAA2152B33773676F635 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -251,7 +252,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1430; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = "The Chromium Authors"; TargetAttributes = { 97C146ED1CF9000F007C117D = { @@ -384,6 +385,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + C0D4CAA2152B33773676F635 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/permission_handler_apple/permission_handler_apple_privacy.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/permission_handler_apple_privacy.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; DE37E3181C3181F0765467D4 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -394,7 +413,6 @@ "${BUILT_PRODUCTS_DIR}/IOSSecuritySuite/IOSSecuritySuite.framework", "${BUILT_PRODUCTS_DIR}/MTBBarcodeScanner/MTBBarcodeScanner.framework", "${BUILT_PRODUCTS_DIR}/Sentry/Sentry.framework", - "${BUILT_PRODUCTS_DIR}/SentryPrivate/SentryPrivate.framework", "${BUILT_PRODUCTS_DIR}/flutter_jailbreak_detection/flutter_jailbreak_detection.framework", "${BUILT_PRODUCTS_DIR}/flutter_native_splash/flutter_native_splash.framework", "${BUILT_PRODUCTS_DIR}/flutter_privacy_screen/flutter_privacy_screen.framework", @@ -413,7 +431,6 @@ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IOSSecuritySuite.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MTBBarcodeScanner.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SentryPrivate.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_jailbreak_detection.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_native_splash.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_privacy_screen.framework", diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 6edb69af..66103db6 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ + FLTEnableImpeller + ITSAppUsesNonExemptEncryption CFBundleDevelopmentRegion diff --git a/lib/src/theme/theme.dart b/lib/src/theme/theme.dart index 2a85e943..16f2fb9e 100644 --- a/lib/src/theme/theme.dart +++ b/lib/src/theme/theme.dart @@ -75,10 +75,8 @@ class IrmaThemeData { onSecondary: light, error: error, onError: light, - background: backgroundPrimary, surface: surfacePrimary, - onBackground: primary, - onSurface: primary, + onSurface: dark, ); //Init spacing diff --git a/lib/src/widgets/irma_markdown.dart b/lib/src/widgets/irma_markdown.dart index 3d7c9265..42f0239b 100644 --- a/lib/src/widgets/irma_markdown.dart +++ b/lib/src/widgets/irma_markdown.dart @@ -32,7 +32,7 @@ class IrmaMarkdown extends StatelessWidget { h4: theme.textTheme.headlineMedium, strong: theme.textTheme.bodyLarge, a: theme.hyperlinkTextStyle, - textScaleFactor: MediaQuery.textScaleFactorOf(context), + textScaler: MediaQuery.textScalerOf(context), )) .merge(styleSheet), diff --git a/pubspec.lock b/pubspec.lock index 6d72a3d3..30535bbe 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,34 +5,47 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 + sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834 url: "https://pub.dev" source: hosted - version: "64.0.0" + version: "72.0.0" + _macros: + dependency: transitive + description: dart + source: sdk + version: "0.3.2" analyzer: dependency: transitive description: name: analyzer - sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" + sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139 + url: "https://pub.dev" + source: hosted + version: "6.7.0" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "2.0.3" archive: dependency: transitive description: name: archive - sha256: "20071638cbe4e5964a427cfa0e86dce55d060bc7d82d56f3554095d7239a8765" + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d url: "https://pub.dev" source: hosted - version: "3.4.2" + version: "3.6.1" args: dependency: transitive description: name: args - sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.5.0" async: dependency: "direct main" description: @@ -77,34 +90,34 @@ packages: dependency: transitive description: name: build_daemon - sha256: "5f02d73eb2ba16483e693f80bee4f088563a820e47d1027d4cdfe62b5bb43e65" + sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.0.2" build_resolvers: dependency: transitive description: name: build_resolvers - sha256: "0713a05b0386bd97f9e63e78108805a4feca5898a4b821d6610857f10c91e975" + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.2" build_runner: dependency: "direct dev" description: name: build_runner - sha256: "10c6bcdbf9d049a0b666702cf1cee4ddfdc38f02a19d35ae392863b47519848b" + sha256: dd09dd4e2b078992f42aac7f1a622f01882a8492fef08486b27ddde929c19f04 url: "https://pub.dev" source: hosted - version: "2.4.6" + version: "2.4.12" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: c9e32d21dd6626b5c163d48b037ce906bbe428bc23ab77bcd77bb21e593b6185 + sha256: f8126682b87a7282a339b871298cc12009cb67109cfa1614d6436fb0289193e0 url: "https://pub.dev" source: hosted - version: "7.2.11" + version: "7.3.2" built_collection: dependency: transitive description: @@ -117,10 +130,10 @@ packages: dependency: transitive description: name: built_value - sha256: a8de5955205b4d1dbbbc267daddf2178bd737e4bab8987c04a500478c9651e74 + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb url: "https://pub.dev" source: hosted - version: "8.6.3" + version: "8.9.2" characters: dependency: transitive description: @@ -141,10 +154,10 @@ packages: dependency: transitive description: name: cli_util - sha256: b8db3080e59b2503ca9e7922c3df2072cf13992354d5e944074ffa836fba43b7 + sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.4.1" clock: dependency: transitive description: @@ -157,18 +170,18 @@ packages: dependency: transitive description: name: code_builder - sha256: "1be9be30396d7e4c0db42c35ea6ccd7cc6a1e19916b5dc64d6ac216b5544d677" + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 url: "https://pub.dev" source: hosted - version: "4.7.0" + version: "4.10.0" collection: dependency: "direct main" description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" convert: dependency: transitive description: @@ -181,10 +194,10 @@ packages: dependency: transitive description: name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27 url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.5" csslib: dependency: transitive description: @@ -197,18 +210,18 @@ packages: dependency: "direct main" description: name: cupertino_icons - sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 url: "https://pub.dev" source: hosted - version: "1.0.6" + version: "1.0.8" dart_style: dependency: transitive description: name: dart_style - sha256: abd7625e16f51f554ea244d090292945ec4d4be7bfbaf2ec8cccea568919d334 + sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab" url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.3.7" email_validator: dependency: "direct main" description: @@ -237,18 +250,18 @@ packages: dependency: transitive description: name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.3" file: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.0" fixnum: dependency: transitive description: @@ -279,10 +292,10 @@ packages: dependency: "direct main" description: name: flutter_i18n - sha256: c7e9752c5dea38963bed26513c25a6e5db70c110fc2c68b84694aafa37b29636 + sha256: "37334bfabd05655895dc0c90a38022e4e588eefb848ffc9d382f37439a44be46" url: "https://pub.dev" source: hosted - version: "0.34.0" + version: "0.36.2" flutter_jailbreak_detection: dependency: "direct main" description: @@ -316,18 +329,18 @@ packages: dependency: "direct main" description: name: flutter_markdown - sha256: a10979814c5f4ddbe2b6143fba25d927599e21e3ba65b3862995960606fae78f + sha256: "04c4722cc36ec5af38acc38ece70d22d3c2123c61305d555750a091517bbe504" url: "https://pub.dev" source: hosted - version: "0.6.17+3" + version: "0.6.23" flutter_native_splash: dependency: "direct dev" description: name: flutter_native_splash - sha256: ecff62b3b893f2f665de7e4ad3de89f738941fcfcaaba8ee601e749efafa4698 + sha256: aa06fec78de2190f3db4319dd60fdc8d12b2626e93ef9828633928c2dcaea840 url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" flutter_privacy_screen: dependency: "direct main" description: @@ -340,10 +353,10 @@ packages: dependency: "direct main" description: name: flutter_svg - sha256: "8c5d68a82add3ca76d792f058b186a0599414f279f00ece4830b9b231b570338" + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" url: "https://pub.dev" source: hosted - version: "2.0.7" + version: "2.0.10+1" flutter_test: dependency: "direct dev" description: flutter @@ -358,10 +371,10 @@ packages: dependency: transitive description: name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "4.0.0" fuchsia_remote_debug_protocol: dependency: transitive description: flutter @@ -379,10 +392,10 @@ packages: dependency: transitive description: name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" html: dependency: transitive description: @@ -395,10 +408,10 @@ packages: dependency: transitive description: name: http - sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -419,10 +432,10 @@ packages: dependency: transitive description: name: image - sha256: "028f61960d56f26414eb616b48b04eb37d700cbe477b7fb09bf1d7ce57fd9271" + sha256: "2237616a36c0d69aef7549ab439b833fb7f9fb9fc861af2cc9ac3eedddd69ca8" url: "https://pub.dev" source: hosted - version: "4.1.3" + version: "4.2.0" integration_test: dependency: "direct dev" description: flutter @@ -432,10 +445,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -456,18 +469,42 @@ packages: dependency: "direct main" description: name: json_annotation - sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" url: "https://pub.dev" source: hosted - version: "4.8.1" + version: "4.9.0" json_serializable: dependency: "direct dev" description: name: json_serializable - sha256: aa1f5a8912615733e0fdc7a02af03308933c93235bdc8d50d0b0c8a8ccb0b969 + sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b url: "https://pub.dev" source: hosted - version: "6.7.1" + version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" + url: "https://pub.dev" + source: hosted + version: "10.0.5" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" + url: "https://pub.dev" + source: hosted + version: "3.0.5" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -488,58 +525,66 @@ packages: dependency: "direct main" description: name: lottie - sha256: b8bdd54b488c54068c57d41ae85d02808da09e2bee8b8dd1f59f441e7efa60cd + sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + url: "https://pub.dev" + source: hosted + version: "2.7.0" + macros: + dependency: transitive + description: + name: macros + sha256: "0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536" url: "https://pub.dev" source: hosted - version: "2.6.0" + version: "0.1.2-main.4" markdown: dependency: transitive description: name: markdown - sha256: acf35edccc0463a9d7384e437c015a3535772e09714cf60e07eeef3a15870dcd + sha256: ef2a1298144e3f985cc736b22e0ccdaf188b5b3970648f2d9dc13efd1d9df051 url: "https://pub.dev" source: hosted - version: "7.1.1" + version: "7.2.2" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.15.0" mime: dependency: transitive description: name: mime - sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "1.0.6" native_device_orientation: dependency: "direct main" description: name: native_device_orientation - sha256: "7d2fa1a1420b7b4ac3317760ffd063b86704679fb4f1796644581da4a6356ccc" + sha256: "744a03030fad5a332a54833cd34f1e2ee51ae9acf477b4ef85bacc8823af9937" url: "https://pub.dev" source: hosted - version: "1.1.4" + version: "1.2.1" nested: dependency: transitive description: @@ -568,26 +613,26 @@ packages: dependency: transitive description: name: package_info_plus - sha256: "6ff267fcd9d48cb61c8df74a82680e8b82e940231bb5f68356672fde0397334a" + sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 url: "https://pub.dev" source: hosted - version: "4.1.0" + version: "8.0.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" path: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -608,90 +653,90 @@ packages: dependency: transitive description: name: path_provider_platform_interface - sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" path_provider_windows: dependency: transitive description: name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.0" permission_handler: dependency: "direct main" description: name: permission_handler - sha256: ad65ba9af42a3d067203641de3fd9f547ded1410bad3b84400c2b4899faede70 + sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb" url: "https://pub.dev" source: hosted - version: "11.0.0" + version: "11.3.1" permission_handler_android: dependency: transitive description: name: permission_handler_android - sha256: ace7d15a3d1a4a0b91c041d01e5405df221edb9de9116525efc773c74e6fc790 + sha256: "76e4ab092c1b240d31177bb64d2b0bea43f43d0e23541ec866151b9f7b2490fa" url: "https://pub.dev" source: hosted - version: "11.0.5" + version: "12.0.12" permission_handler_apple: dependency: transitive description: name: permission_handler_apple - sha256: "99e220bce3f8877c78e4ace901082fb29fa1b4ebde529ad0932d8d664b34f3f5" + sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0 + url: "https://pub.dev" + source: hosted + version: "9.4.5" + permission_handler_html: + dependency: transitive + description: + name: permission_handler_html + sha256: af26edbbb1f2674af65a8f4b56e1a6f526156bc273d0e65dd8075fab51c78851 url: "https://pub.dev" source: hosted - version: "9.1.4" + version: "0.1.3+2" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface - sha256: f2343e9fa9c22ae4fd92d4732755bfe452214e7189afcc097380950cf567b4b2 + sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9 url: "https://pub.dev" source: hosted - version: "3.11.5" + version: "4.2.3" permission_handler_windows: dependency: transitive description: name: permission_handler_windows - sha256: cc074aace208760f1eee6aa4fae766b45d947df85bc831cde77009cdb4720098 + sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e" url: "https://pub.dev" source: hosted - version: "0.1.3" + version: "0.2.1" petitparser: dependency: transitive description: name: petitparser - sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 url: "https://pub.dev" source: hosted - version: "5.4.0" + version: "6.0.2" platform: dependency: transitive description: name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.5" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: da3fdfeccc4d4ff2da8f8c556704c08f912542c5fb3cf2233ed75372384a034d + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" url: "https://pub.dev" source: hosted - version: "2.1.6" - pointycastle: - dependency: transitive - description: - name: pointycastle - sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" - url: "https://pub.dev" - source: hosted - version: "3.7.3" + version: "2.1.8" pool: dependency: transitive description: @@ -704,18 +749,18 @@ packages: dependency: transitive description: name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32" url: "https://pub.dev" source: hosted - version: "4.2.4" + version: "5.0.2" provider: dependency: transitive description: name: provider - sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c url: "https://pub.dev" source: hosted - version: "6.0.5" + version: "6.1.2" pub_semver: dependency: transitive description: @@ -728,10 +773,10 @@ packages: dependency: transitive description: name: pubspec_parse - sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 url: "https://pub.dev" source: hosted - version: "1.2.3" + version: "1.3.0" qr_code_scanner: dependency: "direct main" description: @@ -744,34 +789,34 @@ packages: dependency: "direct main" description: name: quiver - sha256: b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47 + sha256: ea0b925899e64ecdfbf9c7becb60d5b50e706ade44a85b2363be2a22d88117d2 url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.2.2" rxdart: dependency: "direct main" description: name: rxdart - sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" url: "https://pub.dev" source: hosted - version: "0.27.7" + version: "0.28.0" sentry: dependency: transitive description: name: sentry - sha256: e7ded42974bac5f69e4ca4ddc57d30499dd79381838f24b7e8fd9aa4139e7b79 + sha256: "033287044a6644a93498969449d57c37907e56f5cedb17b88a3ff20a882261dd" url: "https://pub.dev" source: hosted - version: "7.13.2" + version: "8.9.0" sentry_flutter: dependency: "direct main" description: name: sentry_flutter - sha256: d6f55ec7a1f681784165021f749007712a72ff57eadf91e963331b6ae326f089 + sha256: "3780b5a0bb6afd476857cfbc6c7444d969c29a4d9bd1aa5b6960aa76c65b737a" url: "https://pub.dev" source: hosted - version: "7.13.2" + version: "8.9.0" share: dependency: "direct main" description: @@ -784,58 +829,58 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: b7f41bad7e521d205998772545de63ff4e6c97714775902c199353f8bf1511ac + sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051" url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.2" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" + sha256: "480ba4345773f56acda9abf5f50bd966f581dac5d514e5fc4a18c62976bbba7e" url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.2" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "7bf53a9f2d007329ee6f3df7268fd498f8373602f943c975598bbb34649b62a7" + sha256: c4b35f6cb8f63c147312c054ce7c2254c8066745125264f0c88739c417fc9d9f url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.5.2" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: c2eb5bf57a2fe9ad6988121609e47d3e07bb3bdca5b6f8444e4cf302428a128a + sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.4.1" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.4.1" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: d762709c2bbe80626ecc819143013cc820fa49ca5e363620ee20a8b15a3e3daf + sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.4.2" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: f763a101313bd3be87edffe0560037500967de9c394a714cd598d945517f694f + sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.4.1" shelf: dependency: transitive description: @@ -848,10 +893,10 @@ packages: dependency: transitive description: name: shelf_web_socket - sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "2.0.0" sky_engine: dependency: transitive description: flutter @@ -861,10 +906,10 @@ packages: dependency: transitive description: name: source_gen - sha256: fc0da689e5302edb6177fdd964efcb7f58912f43c28c2047a808f5bfff643d16 + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.5.0" source_helper: dependency: transitive description: @@ -881,22 +926,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" stack_trace: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" stream_transform: dependency: transitive description: @@ -941,10 +994,10 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.7.2" timeline_tile: dependency: "direct main" description: @@ -965,10 +1018,10 @@ packages: dependency: transitive description: name: toml - sha256: "157c5dca5160fced243f3ce984117f729c788bb5e475504f3dbcda881accee44" + sha256: "9968de24e45b632bf1a654fe1ac7b6fe5261c349243df83fd262397799c45a2d" url: "https://pub.dev" source: hosted - version: "0.14.0" + version: "0.15.0" typed_data: dependency: transitive description: @@ -989,98 +1042,98 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: "47e208a6711459d813ba18af120d9663c20bdf6985d6ad39fe165d2538378d27" + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" url: "https://pub.dev" source: hosted - version: "6.1.14" + version: "6.3.0" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: b04af59516ab45762b2ca6da40fa830d72d0f6045cd97744450b73493fa76330 + sha256: e35a698ac302dd68e41f73250bd9517fe3ab5fa4f18fe4647a0872db61bacbab url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "6.3.10" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "7c65021d5dee51813d652357bc65b8dd4a6177082a9966bc8ba6ee477baa795f" + sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e url: "https://pub.dev" source: hosted - version: "6.1.5" + version: "6.3.1" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: b651aad005e0cb06a01dbd84b428a301916dc75f0e7ea6165f80057fee2d8e8e + sha256: e2b9622b4007f97f504cd64c0128309dfb978ae66adbe944125ed9e1750f06af url: "https://pub.dev" source: hosted - version: "3.0.6" + version: "3.2.0" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: b55486791f666e62e0e8ff825e58a023fd6b1f71c49926483f1128d3bbd8fe88 + sha256: "769549c999acdb42b8bcfa7c43d72bf79a382ca7441ab18a808e101149daf672" url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "3.2.1" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - sha256: "95465b39f83bfe95fcb9d174829d6476216f2d548b79c38ab2506e0458787618" + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.3.2" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: "2942294a500b4fa0b918685aff406773ba0a4cd34b7f42198742a94083020ce5" + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" url: "https://pub.dev" source: hosted - version: "2.0.20" + version: "2.3.3" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "95fef3129dc7cfaba2bc3d5ba2e16063bb561fc6d78e63eee16162bc70029069" + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" url: "https://pub.dev" source: hosted - version: "3.0.8" + version: "3.1.2" uuid: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.5.1" vector_graphics: dependency: transitive description: name: vector_graphics - sha256: "670f6e07aca990b4a2bcdc08a784193c4ccdd1932620244c3a86bb72a0eac67f" + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" url: "https://pub.dev" source: hosted - version: "1.1.7" + version: "1.1.11+1" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: "7451721781d967db9933b63f5733b1c4533022c0ba373a01bdd79d1a5457f69f" + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da url: "https://pub.dev" source: hosted - version: "1.1.7" + version: "1.1.11+1" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "80a13c613c8bde758b1464a1755a7b3a8f2b6cec61fbf0f5a53c94c30f03ba2e" + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" url: "https://pub.dev" source: hosted - version: "1.1.7" + version: "1.1.11+1" vector_math: dependency: transitive description: @@ -1101,10 +1154,10 @@ packages: dependency: transitive description: name: vm_service - sha256: c620a6f783fa22436da68e42db7ebbf18b8c44b9a46ab911f666ff09ffd9153f + sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" url: "https://pub.dev" source: hosted - version: "11.7.1" + version: "14.2.5" watcher: dependency: transitive description: @@ -1117,58 +1170,66 @@ packages: dependency: transitive description: name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" url: "https://pub.dev" source: hosted - version: "0.1.4-beta" + version: "0.1.6" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "3.0.1" webdriver: dependency: transitive description: name: webdriver - sha256: "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49" + sha256: "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" win32: dependency: transitive description: name: win32 - sha256: "350a11abd2d1d97e0cc7a28a81b781c08002aa2864d9e3f192ca0ffa18b06ed3" + sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a" url: "https://pub.dev" source: hosted - version: "5.0.9" + version: "5.5.4" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" xml: dependency: transitive description: name: xml - sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "6.5.0" xml2json: dependency: transitive description: name: xml2json - sha256: "1cd5d23474f38e794fbcab262290bc638c59c985c34d29180fc4525eda24ea7d" + sha256: dbe79a85d902674d95c7608c8048355ce2ec5846640da1c0f91389ccdad5b5a8 url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "6.2.4" yaml: dependency: transitive description: @@ -1178,5 +1239,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.1.0 <4.0.0" - flutter: ">=3.13.0" + dart: ">=3.5.0 <4.0.0" + flutter: ">=3.24.0" diff --git a/pubspec.yaml b/pubspec.yaml index 519cb728..c107d002 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,25 +13,25 @@ dependencies: flutter_localizations: sdk: flutter - sentry_flutter: ^7.13.2 + sentry_flutter: ^8.9.0 # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.3 flutter_svg: ^2.0.7 - flutter_i18n: ^0.34.0 + flutter_i18n: ^0.36.2 flutter_bloc: ^7.2.0 equatable: ^2.0.3 email_validator: ^2.0.1 url_launcher: ^6.0.10 json_annotation: ^4.8.0 - rxdart: ^0.27.2 + rxdart: ^0.28.0 package_info: ^2.0.2 collection: ^1.15.0 qr_code_scanner: ^1.0.1 native_device_orientation: ^1.1.4 share: ^2.0.4 - intl: ^0.18.0 + intl: ^0.19.0 flutter_markdown: ^0.6.6 shared_preferences: ^2.0.7 async: ^2.6.1