diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..2bc7868 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,25 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "example", + "cwd": "example", + "request": "launch", + "type": "dart" + }, + { + "name": "example (profile mode)", + "cwd": "example", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "example (release mode)", + "cwd": "example", + "request": "launch", + "type": "dart", + "flutterMode": "release" + } + ] +} diff --git a/README.md b/README.md index 395431c..4cec2f3 100644 --- a/README.md +++ b/README.md @@ -60,9 +60,6 @@ fluter: weight: 500 - asset: packages/liquid_flutter/fonts/Lato-Bold.ttf weight: 800 - - family: LiquidIcons - fonts: - - asset: packages/liquid_flutter/fonts/LiquidIcons.ttf ``` @@ -106,19 +103,21 @@ To utilize SEC-Kit's UI components, incorporate the following providers and port ``` -## Use the SEC Sheet +## Use the SEC Modal -To display the SEC Sheet, utilize the `SecSheet` widget. It requires a connection strategy, a payload, and callbacks for the verification process: +To display the SEC Modal, utilize the `SecModalBuilder` widget. It requires a connection strategy, a payload, and callbacks for the verification process: ```dart - SecSheet( + SecModalBuilder( strategy: _connectionStrategy, payload: // Payload, - onVerificationDone: () {}, + onVerificationDone: (mesurement) {}, onVerificationFailed: () {}, - builder: (context, openSheet) { - // Call openSheet to open the SEC Sheet + onDismiss: (){ } // Optionally + canDismiss: true, // Define whether the user can dismiss the modal + builder: (context, openModal) { + // Call openModal to open the SEC Sheet }, ), diff --git a/example/.gitignore b/example/.gitignore index 29a3a50..75cb76c 100644 --- a/example/.gitignore +++ b/example/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related @@ -41,3 +43,5 @@ app.*.map.json /android/app/debug /android/app/profile /android/app/release + +node_modules/ \ No newline at end of file diff --git a/example/.metadata b/example/.metadata index 1425146..706ff77 100644 --- a/example/.metadata +++ b/example/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled and should not be manually edited. version: - revision: "7482962148e8d758338d8a28f589f317e1e42ba4" + revision: "603104015dd692ea3403755b55d07813d5cf8965" channel: "stable" project_type: app @@ -13,20 +13,11 @@ project_type: app migration: platforms: - platform: root - create_revision: 7482962148e8d758338d8a28f589f317e1e42ba4 - base_revision: 7482962148e8d758338d8a28f589f317e1e42ba4 + create_revision: 603104015dd692ea3403755b55d07813d5cf8965 + base_revision: 603104015dd692ea3403755b55d07813d5cf8965 - platform: android - create_revision: 7482962148e8d758338d8a28f589f317e1e42ba4 - base_revision: 7482962148e8d758338d8a28f589f317e1e42ba4 - - platform: ios - create_revision: 7482962148e8d758338d8a28f589f317e1e42ba4 - base_revision: 7482962148e8d758338d8a28f589f317e1e42ba4 - - platform: macos - create_revision: 7482962148e8d758338d8a28f589f317e1e42ba4 - base_revision: 7482962148e8d758338d8a28f589f317e1e42ba4 - - platform: web - create_revision: 7482962148e8d758338d8a28f589f317e1e42ba4 - base_revision: 7482962148e8d758338d8a28f589f317e1e42ba4 + create_revision: 603104015dd692ea3403755b55d07813d5cf8965 + base_revision: 603104015dd692ea3403755b55d07813d5cf8965 # User provided section diff --git a/example/android/.gitignore b/example/android/.gitignore index 6f56801..55afd91 100644 --- a/example/android/.gitignore +++ b/example/android/.gitignore @@ -7,7 +7,7 @@ gradle-wrapper.jar GeneratedPluginRegistrant.java # Remember to never publicly share your keystore. -# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +# See https://flutter.dev/to/reference-keystore key.properties **/*.keystore **/*.jks diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index e28b4e7..b5511a9 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -1,67 +1,44 @@ plugins { id "com.android.application" id "kotlin-android" + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. id "dev.flutter.flutter-gradle-plugin" } -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - android { - namespace "com.example.example" - compileSdk flutter.compileSdkVersion - ndkVersion flutter.ndkVersion + namespace = "com.example.example" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = '1.8' - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' + jvmTarget = JavaVersion.VERSION_1_8 } defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.example" + applicationId = "com.example.example" // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. - minSdkVersion flutter.minSdkVersion - targetSdkVersion flutter.targetSdkVersion - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName } buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug + signingConfig = signingConfigs.debug } } } flutter { - source '../..' + source = "../.." } - -dependencies {} diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index aff7dec..1e8ec45 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -2,11 +2,12 @@ + android:icon="@mipmap/launcher_icon"> diff --git a/example/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml b/example/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml new file mode 100644 index 0000000..55aebf9 --- /dev/null +++ b/example/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml @@ -0,0 +1,3 @@ + + + diff --git a/example/android/app/src/main/res/mipmap-hdpi/launcher_icon.png b/example/android/app/src/main/res/mipmap-hdpi/launcher_icon.png new file mode 100644 index 0000000..a20bc4c Binary files /dev/null and b/example/android/app/src/main/res/mipmap-hdpi/launcher_icon.png differ diff --git a/example/android/app/src/main/res/mipmap-mdpi/launcher_icon.png b/example/android/app/src/main/res/mipmap-mdpi/launcher_icon.png new file mode 100644 index 0000000..6148d29 Binary files /dev/null and b/example/android/app/src/main/res/mipmap-mdpi/launcher_icon.png differ diff --git a/example/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png b/example/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png new file mode 100644 index 0000000..d5d20e6 Binary files /dev/null and b/example/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png differ diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png b/example/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png new file mode 100644 index 0000000..d12ab5c Binary files /dev/null and b/example/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png differ diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png b/example/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png new file mode 100644 index 0000000..005d654 Binary files /dev/null and b/example/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png differ diff --git a/example/android/build.gradle b/example/android/build.gradle index bc157bd..d2ffbff 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -5,12 +5,12 @@ allprojects { } } -rootProject.buildDir = '../build' +rootProject.buildDir = "../build" subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } subprojects { - project.evaluationDependsOn(':app') + project.evaluationDependsOn(":app") } tasks.register("clean", Delete) { diff --git a/example/android/gradle.properties b/example/android/gradle.properties index 598d13f..2597170 100644 --- a/example/android/gradle.properties +++ b/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index e1ca574..7bb2df6 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/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-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip diff --git a/example/android/settings.gradle b/example/android/settings.gradle index 1d6d19b..b9e43bd 100644 --- a/example/android/settings.gradle +++ b/example/android/settings.gradle @@ -5,10 +5,9 @@ pluginManagement { def flutterSdkPath = properties.getProperty("flutter.sdk") assert flutterSdkPath != null, "flutter.sdk not set in local.properties" return flutterSdkPath - } - settings.ext.flutterSdkPath = flutterSdkPath() + }() - includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") repositories { google() @@ -19,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false } include ":app" diff --git a/example/flutter_launcher_icons.yaml b/example/flutter_launcher_icons.yaml new file mode 100644 index 0000000..1b2a189 --- /dev/null +++ b/example/flutter_launcher_icons.yaml @@ -0,0 +1,21 @@ +# flutter pub run flutter_launcher_icons +flutter_launcher_icons: + image_path: "../banner.png" + + android: "launcher_icon" + # image_path_android: "assets/icon/icon.png" + min_sdk_android: 21 # android min sdk min:16, default 21 + # adaptive_icon_background: "assets/icon/background.png" + # adaptive_icon_foreground: "assets/icon/foreground.png" + # adaptive_icon_monochrome: "assets/icon/monochrome.png" + + ios: true + # image_path_ios: "assets/icon/icon.png" + remove_alpha_channel_ios: true + # image_path_ios_dark_transparent: "assets/icon/icon_dark.png" + # image_path_ios_tinted_grayscale: "assets/icon/icon_tinted.png" + # desaturate_tinted_to_grayscale_ios: true + + macos: + generate: true + image_path: "../banner.png" diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index e2fab6a..a90cf53 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -1,4 +1,6 @@ PODS: + - device_info_plus (0.0.1): + - Flutter - Flutter (1.0.0) - flutter_blue_plus (0.0.1): - Flutter @@ -11,6 +13,7 @@ PODS: - FlutterMacOS DEPENDENCIES: + - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) - Flutter (from `Flutter`) - flutter_blue_plus (from `.symlinks/plugins/flutter_blue_plus/ios`) - haptic_feedback (from `.symlinks/plugins/haptic_feedback/ios`) @@ -18,6 +21,8 @@ DEPENDENCIES: - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) EXTERNAL SOURCES: + device_info_plus: + :path: ".symlinks/plugins/device_info_plus/ios" Flutter: :path: Flutter flutter_blue_plus: @@ -30,6 +35,7 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/shared_preferences_foundation/darwin" SPEC CHECKSUMS: + device_info_plus: bf2e3232933866d73fe290f2942f2156cdd10342 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 flutter_blue_plus: 4837da7d00cf5d441fdd6635b3a57f936778ea96 haptic_feedback: ccbfbef39de4757f4bdf0ef03e7dfb3ffb4363d3 @@ -38,4 +44,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 2626946c0f4c5a786ca56bc00721109d51be6950 -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index 2cac466..705691b 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -539,7 +539,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -596,7 +596,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d36b1fa..d0d98aa 100644 --- a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,122 +1 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} +{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png index dc9ada4..44d7807 100644 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 7353c41..b7f133a 100644 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 797d452..3992a8e 100644 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 6ed2d93..dad52aa 100644 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cd7b00..84f3605 100644 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index fe73094..f485c7a 100644 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index 321773c..cacb1ae 100644 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 797d452..3992a8e 100644 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index 502f463..4cb7175 100644 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index 0ec3034..abf5a3b 100644 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png new file mode 100644 index 0000000..256b091 Binary files /dev/null and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png new file mode 100644 index 0000000..dadb76f Binary files /dev/null and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png new file mode 100644 index 0000000..3202b17 Binary files /dev/null and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png new file mode 100644 index 0000000..14ee981 Binary files /dev/null and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 0ec3034..abf5a3b 100644 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index e9f5fea..dc2fa61 100644 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png new file mode 100644 index 0000000..a20bc4c Binary files /dev/null and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 0000000..d12ab5c Binary files /dev/null and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 84ac32a..f809c23 100644 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 8953cba..23f2db4 100644 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 0467bf1..484a569 100644 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/example/lib/main.dart b/example/lib/main.dart index 9869951..e1079b2 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,10 +1,6 @@ -import 'dart:typed_data'; - +import 'package:example/virtual_strategy.dart'; import 'package:flutter/material.dart'; import 'package:mtrust_sec_kit/mtrust_sec_kit.dart'; -//import 'package:mtrust_urp_ble_strategy/mtrust_urp_ble_strategy.dart'; - -import 'package:mtrust_urp_virtual_strategy/mtrust_urp_virtual_strategy.dart'; import 'package:liquid_flutter/liquid_flutter.dart'; @@ -28,26 +24,6 @@ void main() { )); } -extension PrependLength on Uint8List { - Uint8List prependLength() { - return Uint8List.fromList(_int16ToBytes(length) + this); - } - - Uint8List _int16ToBytes(int value) { - if (value < -32768 || value > 32767) { - throw ArgumentError('Value must be between -32768 and 32767.'); - } - - final bytes = Uint8List(2); - - // Store the two bytes in little-endian order - bytes[0] = (value >> 8) & 0xFF; // Upper byte - bytes[1] = value & 0xFF; // Lower byte - - return bytes; - } -} - class MainApp extends StatefulWidget { const MainApp({super.key}); @@ -56,33 +32,11 @@ class MainApp extends StatefulWidget { } class _MainAppState extends State { - final _virtualStrategy = UrpVirtualStrategy((UrpRequest request) async { - final payload = UrpSecCommandWrapper.fromBuffer(request.payload); - final result = switch (payload.deviceCommand.command) { - (UrpSecCommand.urpSecPrime) => UrpResponse(), - (UrpSecCommand.urpSecStartMeasurement) => UrpResponse( - payload: UrpSecMeasurement( - nonce: 12, - readerId: "foo", - signature: "bar", - ).writeToBuffer(), - ), - _ => switch (payload.coreCommand.command) { - (UrpCommand.urpOff) => UrpResponse(), - _ => throw Exception("Command not supported"), - }, - }; - - await Future.delayed(const Duration(seconds: 2)); - - return result; - }); - - //late final _bleStrategy = UrpBleStrategy(); + bool _canDismiss = true; @override void initState() { - _virtualStrategy.createVirtualReader(FoundDevice( + virtualStrategy.createVirtualReader(FoundDevice( name: "SEC-000123", type: UrpDeviceType.urpSec, address: "00:00:00:00:00:00", @@ -90,14 +44,6 @@ class _MainAppState extends State { super.initState(); } - // Will be called if a verification was successful. - void onVerificationDone(/*Measurement content*/) async { - // Get auth token - } - - // Will be called if a verification failed. - void onVerificationFailed() {} - @override Widget build(BuildContext context) { return LdPortal( @@ -109,25 +55,54 @@ class _MainAppState extends State { ), ), body: SafeArea( - child: Column(mainAxisAlignment: MainAxisAlignment.end, children: [ - Container( - width: double.infinity, - ), - SecSheet( - strategy: _virtualStrategy, - payload: "", - onVerificationDone: (measurement) {}, - onVerificationFailed: () {}, - builder: (context, openSheet) { + child: LdAutoSpace(children: [ + LdToggle( + label: "User can dismiss modal", + checked: _canDismiss, + onChanged: (value) { + setState(() { + _canDismiss = value; + }); + }), + SecModalBuilder( + canDismiss: _canDismiss, + strategy: virtualStrategy, + payload: "", + onDismiss: () { + debugPrint("Dismissed"); + }, + onVerificationDone: (measurement) { + debugPrint("Verification done $measurement"); + }, + onVerificationFailed: () { + debugPrint("Verification failed"); + }, + builder: (context, openModal) { return LdButton( - onPressed: openSheet, - child: const Text("Open SEC Sheet"), + onPressed: openModal, + size: LdSize.l, + child: const Text("Start verification"), ); }, ), ldSpacerL, + LdButton( + onPressed: () async { + final result = await secModal( + canDismiss: _canDismiss, + topRadius: 10, + bottomRadius: 10, + strategy: virtualStrategy, + payload: "", + insets: const EdgeInsets.all(1), + useSafeArea: true, + ).show(context); + debugPrint("Result: $result"); + }, + child: const Text("Show using secModal().show()"), + ), ]), - ), + ).padL(), ), ); } diff --git a/example/lib/virtual_strategy.dart b/example/lib/virtual_strategy.dart new file mode 100644 index 0000000..e3e2f74 --- /dev/null +++ b/example/lib/virtual_strategy.dart @@ -0,0 +1,25 @@ +import 'package:mtrust_urp_types/sec.pb.dart'; +import 'package:mtrust_urp_types/wrapper.pb.dart'; +import 'package:mtrust_urp_virtual_strategy/mtrust_urp_virtual_strategy.dart'; + +final virtualStrategy = UrpVirtualStrategy((UrpRequest request) async { + final payload = UrpSecCommandWrapper.fromBuffer(request.payload); + final result = switch (payload.deviceCommand.command) { + (UrpSecCommand.urpSecPrime) => UrpResponse(), + (UrpSecCommand.urpSecStartMeasurement) => UrpResponse( + payload: UrpSecMeasurement( + nonce: 12, + readerId: "foo", + signature: "bar", + ).writeToBuffer(), + ), + _ => switch (payload.coreCommand.command) { + (UrpCommand.urpOff) => UrpResponse(), + _ => throw Exception("Command not supported"), + }, + }; + + await Future.delayed(const Duration(seconds: 2)); + + return result; +}); diff --git a/example/macos/Flutter/GeneratedPluginRegistrant.swift b/example/macos/Flutter/GeneratedPluginRegistrant.swift index 194ebba..7af0528 100644 --- a/example/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/example/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,10 +5,12 @@ import FlutterMacOS import Foundation +import device_info_plus import flutter_blue_plus import shared_preferences_foundation func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) FlutterBluePlusPlugin.register(with: registry.registrar(forPlugin: "FlutterBluePlusPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) } diff --git a/example/macos/Podfile.lock b/example/macos/Podfile.lock new file mode 100644 index 0000000..2ee09d7 --- /dev/null +++ b/example/macos/Podfile.lock @@ -0,0 +1,35 @@ +PODS: + - device_info_plus (0.0.1): + - FlutterMacOS + - flutter_blue_plus (0.0.1): + - FlutterMacOS + - FlutterMacOS (1.0.0) + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`) + - flutter_blue_plus (from `Flutter/ephemeral/.symlinks/plugins/flutter_blue_plus/macos`) + - FlutterMacOS (from `Flutter/ephemeral`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) + +EXTERNAL SOURCES: + device_info_plus: + :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos + flutter_blue_plus: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_blue_plus/macos + FlutterMacOS: + :path: Flutter/ephemeral + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin + +SPEC CHECKSUMS: + device_info_plus: 1b14eed9bf95428983aed283a8d51cce3d8c4215 + flutter_blue_plus: e2868679021f19d12a8c0c58a33f1df66ec7fa6a + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + +PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367 + +COCOAPODS: 1.15.2 diff --git a/example/macos/Runner.xcodeproj/project.pbxproj b/example/macos/Runner.xcodeproj/project.pbxproj index daa7bf1..5dba34a 100644 --- a/example/macos/Runner.xcodeproj/project.pbxproj +++ b/example/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + E490857E6786C6813FCA99D6 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F65307DF0D3C370BAC070FE /* Pods_RunnerTests.framework */; }; + EAF4EB52A59D7D8925704F27 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45A6510343CDE55A10359966 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,13 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0EA638472FE3DA71C0D02B9B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 26342EC2F9F484B1A1F815B5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "example.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -76,8 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 45A6510343CDE55A10359966 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4F65307DF0D3C370BAC070FE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 51590149ADCE5C9D2E8FA7B1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 614047AB96498E3DB9298B5E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + C601BD03F7201A96B0846C45 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + D32C481DFEE7979DFFE52233 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E490857E6786C6813FCA99D6 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,6 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + EAF4EB52A59D7D8925704F27 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -125,6 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + BA15A9C1E915103CEF0B6627 /* Pods */, ); sourceTree = ""; }; @@ -172,9 +185,25 @@ path = Runner; sourceTree = ""; }; + BA15A9C1E915103CEF0B6627 /* Pods */ = { + isa = PBXGroup; + children = ( + D32C481DFEE7979DFFE52233 /* Pods-Runner.debug.xcconfig */, + 0EA638472FE3DA71C0D02B9B /* Pods-Runner.release.xcconfig */, + 26342EC2F9F484B1A1F815B5 /* Pods-Runner.profile.xcconfig */, + 51590149ADCE5C9D2E8FA7B1 /* Pods-RunnerTests.debug.xcconfig */, + 614047AB96498E3DB9298B5E /* Pods-RunnerTests.release.xcconfig */, + C601BD03F7201A96B0846C45 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 45A6510343CDE55A10359966 /* Pods_Runner.framework */, + 4F65307DF0D3C370BAC070FE /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + E4C32AF9FF547E8887C7369A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + D361D0B131183BEF4310E92F /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + E208EFA921A461338A872EA2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + D361D0B131183BEF4310E92F /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + E208EFA921A461338A872EA2 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + E4C32AF9FF547E8887C7369A /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 51590149ADCE5C9D2E8FA7B1 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 614047AB96498E3DB9298B5E /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C601BD03F7201A96B0846C45 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/example/macos/Runner.xcworkspace/contents.xcworkspacedata b/example/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a1..21a3cc1 100644 --- a/example/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/example/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/example/macos/Runner/AppDelegate.swift b/example/macos/Runner/AppDelegate.swift index d53ef64..b3c1761 100644 --- a/example/macos/Runner/AppDelegate.swift +++ b/example/macos/Runner/AppDelegate.swift @@ -1,9 +1,13 @@ import Cocoa import FlutterMacOS -@NSApplicationMain +@main class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index a2ec33f..96d3fee 100644 --- a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,68 +1,68 @@ { - "images" : [ - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_16.png", - "scale" : "1x" + "info": { + "version": 1, + "author": "xcode" }, - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "2x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "1x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_64.png", - "scale" : "2x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_128.png", - "scale" : "1x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "2x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "1x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "2x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "1x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_1024.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} + "images": [ + { + "size": "16x16", + "idiom": "mac", + "filename": "app_icon_16.png", + "scale": "1x" + }, + { + "size": "16x16", + "idiom": "mac", + "filename": "app_icon_32.png", + "scale": "2x" + }, + { + "size": "32x32", + "idiom": "mac", + "filename": "app_icon_32.png", + "scale": "1x" + }, + { + "size": "32x32", + "idiom": "mac", + "filename": "app_icon_64.png", + "scale": "2x" + }, + { + "size": "128x128", + "idiom": "mac", + "filename": "app_icon_128.png", + "scale": "1x" + }, + { + "size": "128x128", + "idiom": "mac", + "filename": "app_icon_256.png", + "scale": "2x" + }, + { + "size": "256x256", + "idiom": "mac", + "filename": "app_icon_256.png", + "scale": "1x" + }, + { + "size": "256x256", + "idiom": "mac", + "filename": "app_icon_512.png", + "scale": "2x" + }, + { + "size": "512x512", + "idiom": "mac", + "filename": "app_icon_512.png", + "scale": "1x" + }, + { + "size": "512x512", + "idiom": "mac", + "filename": "app_icon_1024.png", + "scale": "2x" + } + ] +} \ No newline at end of file diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png index 82b6f9d..44d7807 100644 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png and b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png index 13b35eb..bac5c39 100644 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png and b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png index 0a3f5fa..e90d05f 100644 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png and b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png index bdb5722..b0712e9 100644 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png and b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png index f083318..cec5602 100644 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png and b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png index 326c0e7..220b975 100644 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png and b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png index 2f1632c..d72cf65 100644 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png and b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/example/pubspec.lock b/example/pubspec.lock index 2910949..608689a 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: archive - sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + sha256: "6199c74e3db4fbfbd04f66d739e72fe11c8a8957d5f219f1f4482dbde6420b5a" url: "https://pub.dev" source: hosted - version: "3.6.1" + version: "4.0.2" args: dependency: transitive description: @@ -41,6 +41,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c + url: "https://pub.dev" + source: hosted + version: "0.4.2" clock: dependency: transitive description: @@ -61,10 +77,26 @@ packages: dependency: transitive description: name: crypto - sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27 + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.0.6" + device_info_plus: + dependency: transitive + description: + name: device_info_plus + sha256: b37d37c2f912ad4e8ec694187de87d05de2a3cb82b465ff1f65f65a2d05de544 + url: "https://pub.dev" + source: hosted + version: "11.2.1" + device_info_plus_platform_interface: + dependency: transitive + description: + name: device_info_plus_platform_interface + sha256: "0b04e02b30791224b31969eb1b50d723498f402971bff3630bca2ba839bd1ed2" + url: "https://pub.dev" + source: hosted + version: "7.0.2" fake_async: dependency: transitive description: @@ -118,6 +150,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.33.4" + flutter_launcher_icons: + dependency: "direct dev" + description: + name: flutter_launcher_icons + sha256: "31cd0885738e87c72d6f055564d37fabcdacee743b396b78c7636c169cac64f5" + url: "https://pub.dev" + source: hosted + version: "0.14.2" flutter_lints: dependency: "direct dev" description: @@ -151,10 +191,10 @@ packages: dependency: transitive description: name: flutter_sticky_header - sha256: "017f398fbb45a589e01491861ca20eb6570a763fd9f3888165a978e11248c709" + sha256: "7f76d24d119424ca0c95c146b8627a457e8de8169b0d584f766c2c545db8f8be" url: "https://pub.dev" source: hosted - version: "0.6.5" + version: "0.7.0" flutter_svg: dependency: transitive description: @@ -181,6 +221,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.1" + fuzzy: + dependency: transitive + description: + name: fuzzy + sha256: af5fbd36f2f8de0663a5b562ef5ca209aea957e81a2f0e97f97475cfbed044ec + url: "https://pub.dev" + source: hosted + version: "0.5.1" haptic_feedback: dependency: transitive description: @@ -193,10 +241,10 @@ packages: dependency: transitive description: name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" http_parser: dependency: transitive description: @@ -205,6 +253,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image: + dependency: transitive + description: + name: image + sha256: "8346ad4b5173924b5ddddab782fc7d8a6300178c8b1dc427775405a01701c4a6" + url: "https://pub.dev" + source: hosted + version: "4.5.2" intl: dependency: transitive description: @@ -213,14 +269,22 @@ packages: url: "https://pub.dev" source: hosted version: "0.19.0" + jiffy: + dependency: transitive + description: + name: jiffy + sha256: "1c1b86459969ff9f32dc5b0ffe392f1e08181e66396cf9dd8fa7c90552a691af" + url: "https://pub.dev" + source: hosted + version: "6.3.2" json_annotation: dependency: transitive description: name: json_annotation - sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" url: "https://pub.dev" source: hosted - version: "4.8.1" + version: "4.9.0" leak_tracker: dependency: transitive description: @@ -257,10 +321,10 @@ packages: dependency: "direct main" description: name: liquid_flutter - sha256: "2a7f05e1849a435af3c04c48c574a6aa8cd5439ef54ba0b5a7a5f6de089919b0" + sha256: "27cbb567fde79bd7faf80f6f7e7c3de3944d639e400bcc94270c5a0920a81542" url: "https://pub.dev" source: hosted - version: "15.3.2" + version: "18.2.0" logger: dependency: transitive description: @@ -277,14 +341,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - lottie: - dependency: transitive - description: - name: lottie - sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 - url: "https://pub.dev" - source: hosted - version: "2.7.0" matcher: dependency: transitive description: @@ -309,14 +365,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.15.0" - mtrust_better_log: - dependency: transitive - description: - name: mtrust_better_log - sha256: b922a50326c3855ef366c46cfef36df6b58cf683f0e937c32f4064316aa70101 - url: "https://pub.dev" - source: hosted - version: "1.0.0" mtrust_sec_kit: dependency: "direct main" description: @@ -328,18 +376,18 @@ packages: dependency: "direct main" description: name: mtrust_urp_ble_strategy - sha256: f9a326268a34912ecfc5b48653adefb07cb9b1fe72d2498c2aecb2600ae7ca2d + sha256: "38623dfd962db4e0049a67c594a902bc5908bfe9fdf09847d5f85d2d3123f754" url: "https://pub.dev" source: hosted - version: "9.0.0-0" + version: "9.0.0-5" mtrust_urp_core: dependency: transitive description: name: mtrust_urp_core - sha256: a118fe7b2373e00ab437d4b94e2287bff4a47386ced16888ccaaf5b1b80517c9 + sha256: "72e065f7d6a02cb4a11caed69d8fb133c2ee9071194ce72fcba6dddf54f3fbae" url: "https://pub.dev" source: hosted - version: "9.0.0-0" + version: "9.0.0-5" mtrust_urp_types: dependency: "direct main" description: @@ -352,18 +400,18 @@ packages: dependency: "direct main" description: name: mtrust_urp_ui - sha256: "411e9a21d80403cce29e3b5b0394de85a644034dd1cd2a5ea0d0cc6d7a9c09a9" + sha256: "80f85517cbd7f7562fbf34364566a3ef9ff89356a4a22da3b4864141e6979e4f" url: "https://pub.dev" source: hosted - version: "9.0.0-0" + version: "9.0.0-5" mtrust_urp_virtual_strategy: dependency: "direct main" description: name: mtrust_urp_virtual_strategy - sha256: "3e8352ad5c44bb75c315759dec2ae69c5e04b5312cd666c779a2383741a896b2" + sha256: "77d8538179ffaf247c3fd4cdc5c6b4b0b903e7483f13e3e85bb296c817ff4ab1" url: "https://pub.dev" source: hosted - version: "9.0.0-0" + version: "9.0.0-5" multi_split_view: dependency: transitive description: @@ -444,6 +492,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + posix: + dependency: transitive + description: + name: posix + sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a + url: "https://pub.dev" + source: hosted + version: "6.0.1" protobuf: dependency: transitive description: @@ -488,18 +544,18 @@ packages: dependency: transitive description: name: shared_preferences - sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051" + sha256: a752ce92ea7540fc35a0d19722816e04d0e72828a4200e83a98cf1a1eb524c9a url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.3.5" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "3b9febd815c9ca29c9e3520d50ec32f49157711e143b7a4ca039eb87e8ade5ab" + sha256: bf808be89fe9dc467475e982c1db6c2faf3d2acf54d526cd5ec37d86c99dbd84 url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.4.1" shared_preferences_foundation: dependency: transitive description: @@ -577,6 +633,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + stringr: + dependency: transitive + description: + name: stringr + sha256: "2846b6811c3cbb34c8937a35e623986e3fbf7203b3bb33ffe7f80e496ea3eff2" + url: "https://pub.dev" + source: hosted + version: "1.0.0" term_glyph: dependency: transitive description: @@ -605,10 +669,10 @@ packages: dependency: transitive description: name: value_layout_builder - sha256: "98202ec1807e94ac72725b7f0d15027afde513c55c69ff3f41bcfccb950831bc" + sha256: c02511ea91ca5c643b514a33a38fa52536f74aa939ec367d02938b5ede6807fa url: "https://pub.dev" source: hosted - version: "0.3.1" + version: "0.4.0" vector_graphics: dependency: transitive description: @@ -653,18 +717,34 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "1.1.0" win32: dependency: transitive description: name: win32 - sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4 + sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a" url: "https://pub.dev" source: hosted - version: "5.5.1" + version: "5.5.4" + win32_registry: + dependency: transitive + description: + name: win32_registry + sha256: "723b7f851e5724c55409bb3d5a32b203b3afe8587eaf5dafb93a5fed8ecda0d6" + url: "https://pub.dev" + source: hosted + version: "1.1.4" + wolt_modal_sheet: + dependency: transitive + description: + name: wolt_modal_sheet + sha256: b2d1c2af08ff70c17a66325d6e510cb2f902f432c887cc55e72c55701a94fac4 + url: "https://pub.dev" + source: hosted + version: "0.9.4" xdg_directories: dependency: transitive description: @@ -681,6 +761,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce + url: "https://pub.dev" + source: hosted + version: "3.1.3" sdks: dart: ">=3.5.0 <4.0.0" flutter: ">=3.24.0" diff --git a/example/pubspec.yaml b/example/pubspec.yaml index b719acf..a9b564f 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -12,15 +12,17 @@ dependencies: mtrust_sec_kit: path: ../ mtrust_urp_types: ^4.1.0 - mtrust_urp_ble_strategy: ^9.0.0-0 - mtrust_urp_virtual_strategy: ^9.0.0-0 - mtrust_urp_ui: ^9.0.0-0 - liquid_flutter: ^15.3.2 + mtrust_urp_ble_strategy: ^9.0.0-5 + mtrust_urp_virtual_strategy: ^9.0.0-5 + mtrust_urp_ui: ^9.0.0-5 + liquid_flutter: ^18.2.0 + dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^3.0.0 + flutter_launcher_icons: ^0.14.2 flutter: uses-material-design: true @@ -31,6 +33,3 @@ flutter: weight: 500 - asset: packages/liquid_flutter/fonts/Lato-Bold.ttf weight: 800 - - family: LiquidIcons - fonts: - - asset: packages/liquid_flutter/fonts/LiquidIcons.ttf diff --git a/lib/mtrust_sec_kit.dart b/lib/mtrust_sec_kit.dart index 6e996b7..f3ce7e2 100644 --- a/lib/mtrust_sec_kit.dart +++ b/lib/mtrust_sec_kit.dart @@ -6,5 +6,5 @@ export 'package:mtrust_urp_ui/mtrust_urp_ui.dart'; export 'src/sec_reader.dart'; export 'src/ui/l10n/sec_locale.dart'; -export 'src/ui/sec_sheet.dart'; +export 'src/ui/sec_modal.dart'; export 'src/ui/sec_view.dart'; diff --git a/lib/src/ui/count_down_progress.dart b/lib/src/ui/count_down_progress.dart index aea10e3..9619ca8 100644 --- a/lib/src/ui/count_down_progress.dart +++ b/lib/src/ui/count_down_progress.dart @@ -51,7 +51,7 @@ class _CountDownProgressState extends State { widthFactor: 0.7, child: LinearProgressIndicator( value: _progress, - borderRadius: ldRadiusSm, + borderRadius: LdTheme.of(context).radius(LdSize.s), backgroundColor: LdTheme.of(context).background, valueColor: AlwaysStoppedAnimation( LdTheme.of(context).primaryColor, diff --git a/lib/src/ui/scanning_instruction.dart b/lib/src/ui/scanning_instruction.dart index f898b94..5f190bd 100644 --- a/lib/src/ui/scanning_instruction.dart +++ b/lib/src/ui/scanning_instruction.dart @@ -55,6 +55,7 @@ class _ScanningInstructionState extends State @override Widget build(BuildContext context) { final theme = LdTheme.of(context, listen: true); + return Stack( children: [ AnimatedBuilder( @@ -143,10 +144,10 @@ class _ScanningInstructionState extends State decoration: BoxDecoration( gradient: LinearGradient( colors: [ - theme.surface, - theme.surface.withAlpha(0), - theme.surface.withAlpha(0), - theme.surface, + theme.background, + theme.background.withAlpha(0), + theme.background.withAlpha(0), + theme.background, ], stops: const [0, 0.1, 0.9, 1], ), diff --git a/lib/src/ui/sec_modal.dart b/lib/src/ui/sec_modal.dart new file mode 100644 index 0000000..77f4a40 --- /dev/null +++ b/lib/src/ui/sec_modal.dart @@ -0,0 +1,196 @@ +import 'dart:io'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:liquid_flutter/liquid_flutter.dart'; +import 'package:mtrust_sec_kit/mtrust_sec_kit.dart'; +import 'package:mtrust_sec_kit/src/ui/sec_result.dart'; + +/// Shows a sheet that guides the user through the SEC workflow. +/// pass the [ConnectionStrategy] and the [payload] to the sheet. +/// The [onVerificationDone] will be called if the verification was successful. +/// The [onVerificationFailed] will be called if the verification failed. +/// Provide a [builder] that renders some UI with a callback to open the sheet. +class SecModalBuilder extends StatelessWidget { + /// Creates a new instance of [SecModalBuilder] + const SecModalBuilder({ + required this.strategy, + required this.payload, + required this.onVerificationDone, + required this.onVerificationFailed, + required this.builder, + this.onDismiss, + this.disconnectOnClose = true, + this.turnOffOnClose = true, + this.canDismiss = true, + super.key, + }); + + /// Whether the connection should be disconnected when the sheet is closed. + final bool disconnectOnClose; + + /// Whether the reader should be turned off when the sheet is closed. + final bool turnOffOnClose; + + /// Strategy to use for the connection. + final ConnectionStrategy strategy; + + /// Payload to send to the reader. + final String payload; + + /// Will be called if a verification was successful. + final void Function(UrpSecMeasurement measurement) onVerificationDone; + + /// Will be called if a verification failed. + final void Function() onVerificationFailed; + + /// Called when the user dismisses the sheet. + final void Function()? onDismiss; + + /// The builder that opens the sheet. + final Widget Function(BuildContext context, Function openSheet) builder; + + /// Whether the modal can be dissmissed by the user + final bool canDismiss; + + @override + Widget build(BuildContext context) { + var topRadius = LdTheme.of(context).sizingConfig.radiusM; + var bottomRadius = 0.0; + var useSafeArea = true; + var insets = EdgeInsets.zero; + final screenRadius = LdTheme.of(context).screenRadius; + + if (screenRadius != 0) { + topRadius = screenRadius - 1; + bottomRadius = screenRadius - 1; + if (!kIsWeb && Platform.isIOS) { + useSafeArea = false; + insets = const EdgeInsets.all(1); + } + } + + Future handleClose() async { + if (turnOffOnClose && strategy.status == ConnectionStatus.connected) { + await SECReader(connectionStrategy: strategy).off(); + } + if (disconnectOnClose) { + await strategy.disconnectDevice(); + } + } + + return LdModalBuilder( + builder: (context, openModal) { + return builder(context, () async { + final result = await openModal(); + if (result is SecResultFailed) { + onVerificationFailed(); + } else if (result is SecResultSuccess) { + onVerificationDone(result.measurement); + } else { + onDismiss?.call(); + } + await handleClose(); + }); + }, + modal: secModal( + canDismiss: canDismiss, + insets: insets, + topRadius: topRadius, + bottomRadius: bottomRadius, + useSafeArea: useSafeArea, + strategy: strategy, + payload: payload, + ), + ); + } +} + +/// Returned in case of a successful SEC verification. +class SecResultSuccess extends SecResult { + /// Creates a new instance of [SecResultSuccess] + SecResultSuccess(this.measurement); + + /// The resulting measurement. + final UrpSecMeasurement measurement; +} + +/// Returned in case of a dismissed SEC verification. +class SecResultDismissed extends SecResult {} + +/// Returned in case of a failed SEC verification (e.g. a timeout) +class SecResultFailed extends SecResult {} + +/// Build a modal using [SecWidget], pops the result of the SEC verification. +/// The result is either [SecResultSuccess], [SecResultFailed] +/// or [SecResultDismissed]. If the user dismisses the modal via the back +/// button or the swip gesture, the result is null. +LdModal secModal({ + /// Whether the modal can be dissmissed by the user + required bool canDismiss, + + /// The top radius of the modal + required double topRadius, + + /// The bottom radius of the modal + required double bottomRadius, + + /// The strategy to use for the connection + required ConnectionStrategy strategy, + + /// The payload to send to the reader + required String payload, + + /// The insets of the modal + required EdgeInsets insets, + + /// Whether to use safe area inside the modal + required bool useSafeArea, +}) { + return LdModal( + disableScrolling: true, + padding: EdgeInsets.zero, + noHeader: true, + userCanDismiss: canDismiss, + topRadius: topRadius, + fixedDialogSize: const Size(400, 400), + bottomRadius: bottomRadius, + useSafeArea: useSafeArea, + insets: insets, + size: LdSize.s, + modalContent: (context) => AspectRatio( + aspectRatio: 1, + child: Stack( + children: [ + SecWidget( + strategy: strategy, + payload: payload, + onVerificationDone: (UrpSecMeasurement measurement) async { + Navigator.of(context).pop(SecResultSuccess(measurement)); + }, + onVerificationFailed: () async { + Navigator.of(context).pop(SecResultFailed()); + }, + ), + if (canDismiss) + Align( + alignment: Alignment.topRight, + child: IntrinsicHeight( + child: LdButton( + size: LdSize.s, + mode: LdButtonMode.vague, + onPressed: () async { + Navigator.of(context).pop(SecResultDismissed()); + }, + child: const Icon( + Icons.clear, + size: 18, + ), + ), + ), + ), + ], + ), + ).padL(), + ); +} diff --git a/lib/src/ui/sec_result.dart b/lib/src/ui/sec_result.dart new file mode 100644 index 0000000..a831b0c --- /dev/null +++ b/lib/src/ui/sec_result.dart @@ -0,0 +1,2 @@ +/// Result of the SEC verification. +abstract class SecResult {} diff --git a/lib/src/ui/sec_sheet.dart b/lib/src/ui/sec_sheet.dart deleted file mode 100644 index a0a847d..0000000 --- a/lib/src/ui/sec_sheet.dart +++ /dev/null @@ -1,107 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:liquid_flutter/liquid_flutter.dart'; -import 'package:mtrust_sec_kit/mtrust_sec_kit.dart'; - -/// Shows a sheet that guides the user through the SEC workflow. -/// pass the [ConnectionStrategy] and the [payload] to the sheet. -/// The [onVerificationDone] will be called if the verification was successful. -/// The [onVerificationFailed] will be called if the verification failed. -/// Provide a [builder] that renders some UI with a callback to open the sheet. -class SecSheet extends StatelessWidget { - /// Creates a new instance of [SecSheet] - const SecSheet({ - required this.strategy, - required this.payload, - required this.onVerificationDone, - required this.onVerificationFailed, - required this.builder, - this.onDismiss, - this.disconnectOnClose = true, - this.turnOffOnClose = true, - super.key, - }); - - /// Whether the connection should be disconnected when the sheet is closed. - final bool disconnectOnClose; - - /// Whether the reader should be turned off when the sheet is closed. - final bool turnOffOnClose; - - /// Strategy to use for the connection. - final ConnectionStrategy strategy; - - /// Payload to send to the reader. - final String payload; - - /// Will be called if a verification was successful. - final void Function(UrpSecMeasurement measurement) onVerificationDone; - - /// Will be called if a verification failed. - final void Function() onVerificationFailed; - - /// Called when the user dismisses the sheet. - final void Function()? onDismiss; - - /// The builder that opens the sheet. - final Widget Function(BuildContext context, Function openSheet) builder; - - @override - Widget build(BuildContext context) { - return LdButtonSheet( - buttonBuilder: builder, - sheetBuilder: (context, dismissSheet, isOpen) { - Future dismiss() async { - if (turnOffOnClose && strategy.status == ConnectionStatus.connected) { - await SECReader(connectionStrategy: strategy).off(); - } - if (disconnectOnClose) { - await strategy.disconnectDevice(); - } - dismissSheet(); - onDismiss?.call(); - } - - return LdSheet( - customDetachedSize: const Size(450, 450), - open: isOpen, - initialSize: 1, - minInsets: LdTheme.of(context).pad(LdSize.m), - noHeader: true, - child: AspectRatio( - aspectRatio: 1, - child: Stack( - children: [ - SecWidget( - strategy: strategy, - payload: payload, - onVerificationDone: (UrpSecMeasurement measurement) async { - onVerificationDone(measurement); - await dismiss(); - }, - onVerificationFailed: () async { - onVerificationFailed(); - await dismiss(); - }, - ), - Align( - alignment: Alignment.topRight, - child: IntrinsicHeight( - child: LdButton( - size: LdSize.s, - mode: LdButtonMode.vague, - onPressed: dismiss, - child: const Icon( - Icons.clear, - size: 18, - ), - ), - ), - ), - ], - ), - ).padL(), - ); - }, - ); - } -} diff --git a/lib/src/ui/sec_view.dart b/lib/src/ui/sec_view.dart index b4db987..7563f29 100644 --- a/lib/src/ui/sec_view.dart +++ b/lib/src/ui/sec_view.dart @@ -150,7 +150,7 @@ class _ScanningView extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, animate: true, children: [ - LdTextH( + LdTextHs( SecLocalizations.of(context).scanning, textAlign: TextAlign.center, ), @@ -176,6 +176,7 @@ class _ScanningView extends StatelessWidget { textAlign: TextAlign.center, ), ldSpacerL, + ldSpacerL, Expanded( child: SecReaderVisualization( ledColor: Colors.green, @@ -187,14 +188,13 @@ class _ScanningView extends StatelessWidget { ), ), ldSpacerL, - LdButtonSuccess( + LdButton( onPressed: () async { await onVerificationDone( measurementController.state.result!, ); }, loadingText: SecLocalizations.of(context).disconnecting, - context: context, child: Text( SecLocalizations.of(context).done, ), diff --git a/pubspec.yaml b/pubspec.yaml index e185a73..2bc9c35 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -12,10 +12,11 @@ dependencies: flutter_localizations: sdk: flutter intl: ^0.19.0 - liquid_flutter: ^15.3.2 - mtrust_urp_core: ^9.0.0-0 + liquid_flutter: ^18.2.0 + mtrust_urp_core: ^9.0.0-5 mtrust_urp_types: ^4.1.0 - mtrust_urp_ui: ^9.0.0-0 + mtrust_urp_ui: ^9.0.0-5 + dev_dependencies: flutter_test: sdk: flutter diff --git a/test/compare_goldens.dart b/test/compare_goldens.dart new file mode 100644 index 0000000..14af168 --- /dev/null +++ b/test/compare_goldens.dart @@ -0,0 +1,43 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter_test/flutter_test.dart'; + +/// Works just like [LocalFileComparator] but includes a [threshold] that, when +/// exceeded, marks the test as a failure. +class LocalFileComparatorWithThreshold extends LocalFileComparator { + LocalFileComparatorWithThreshold(super.testFile, this.threshold) + : assert( + threshold >= 0 && threshold <= 1, + 'Threshold must be between 0 and 1', + ); + + /// Threshold above which tests will be marked as failing. + /// Ranges from 0 to 1, both inclusive. + final double threshold; + + /// Copy of [LocalFileComparator]'s [compare] method, except for the fact that + /// it checks if the [ComparisonResult.diffPercent] is not greater than + /// [threshold] to decide whether this test is successful or a failure. + @override + Future compare(Uint8List imageBytes, Uri golden) async { + final result = await GoldenFileComparator.compareLists( + imageBytes, + await getGoldenBytes(golden), + ); + + if (!result.passed && result.diffPercent <= threshold) { + debugPrint( + 'A difference of ${result.diffPercent * 100}% was found, but it is ' + 'acceptable since it is not greater than the threshold of ' + '${threshold * 100}%', + ); + + return true; + } + + if (!result.passed) { + final error = await generateFailureOutput(result, golden, basedir); + throw FlutterError(error); + } + return result.passed; + } +} diff --git a/test/flutter_test_config.dart b/test/flutter_test_config.dart new file mode 100644 index 0000000..4017c7f --- /dev/null +++ b/test/flutter_test_config.dart @@ -0,0 +1,27 @@ +import 'dart:async'; + +import 'package:flutter_test/flutter_test.dart'; +import 'package:golden_toolkit/golden_toolkit.dart'; + +import 'compare_goldens.dart'; + +const _kGoldenTestsThreshold = 1 / 100; + +Future testExecutable(FutureOr Function() testMain) async { + await loadAppFonts(); + if (goldenFileComparator is LocalFileComparator) { + final testUrl = (goldenFileComparator as LocalFileComparator).basedir; + + goldenFileComparator = LocalFileComparatorWithThreshold( + Uri.parse('$testUrl/test.dart'), + _kGoldenTestsThreshold, + ); + } else { + throw Exception( + 'Expected `goldenFileComparator` to be of type `LocalFileComparator`, ' + 'but it is of type `${goldenFileComparator.runtimeType}`', + ); + } + + await testMain(); +} diff --git a/test/golden_utils.dart b/test/golden_utils.dart index 215969a..ba7d4bb 100644 --- a/test/golden_utils.dart +++ b/test/golden_utils.dart @@ -38,7 +38,7 @@ Widget liquidFrame({ margin: const EdgeInsets.all(16), decoration: BoxDecoration( color: theme.background, - borderRadius: ldRadiusM, + borderRadius: theme.radius(LdSize.m), ), child: Directionality( textDirection: TextDirection.ltr, diff --git a/test/goldens/SecWidget/Idle/l-dark.png b/test/goldens/SecWidget/Idle/l-dark.png index e08d0da..26df00f 100644 Binary files a/test/goldens/SecWidget/Idle/l-dark.png and b/test/goldens/SecWidget/Idle/l-dark.png differ diff --git a/test/goldens/SecWidget/Idle/l-light.png b/test/goldens/SecWidget/Idle/l-light.png index 557101d..ee61c18 100644 Binary files a/test/goldens/SecWidget/Idle/l-light.png and b/test/goldens/SecWidget/Idle/l-light.png differ diff --git a/test/goldens/SecWidget/Idle/m-dark.png b/test/goldens/SecWidget/Idle/m-dark.png index 898b4ff..edba02e 100644 Binary files a/test/goldens/SecWidget/Idle/m-dark.png and b/test/goldens/SecWidget/Idle/m-dark.png differ diff --git a/test/goldens/SecWidget/Idle/m-light.png b/test/goldens/SecWidget/Idle/m-light.png index e46b17b..92c5de4 100644 Binary files a/test/goldens/SecWidget/Idle/m-light.png and b/test/goldens/SecWidget/Idle/m-light.png differ diff --git a/test/goldens/SecWidget/Idle/s-dark.png b/test/goldens/SecWidget/Idle/s-dark.png index 926b128..446ceaa 100644 Binary files a/test/goldens/SecWidget/Idle/s-dark.png and b/test/goldens/SecWidget/Idle/s-dark.png differ diff --git a/test/goldens/SecWidget/Idle/s-light.png b/test/goldens/SecWidget/Idle/s-light.png index ed32dc9..d3ccbc4 100644 Binary files a/test/goldens/SecWidget/Idle/s-light.png and b/test/goldens/SecWidget/Idle/s-light.png differ diff --git a/test/goldens/SecWidget/Measure Complete/l-dark.png b/test/goldens/SecWidget/Measure Complete/l-dark.png index 693275e..4c7ab60 100644 Binary files a/test/goldens/SecWidget/Measure Complete/l-dark.png and b/test/goldens/SecWidget/Measure Complete/l-dark.png differ diff --git a/test/goldens/SecWidget/Measure Complete/l-light.png b/test/goldens/SecWidget/Measure Complete/l-light.png index 1730914..897283e 100644 Binary files a/test/goldens/SecWidget/Measure Complete/l-light.png and b/test/goldens/SecWidget/Measure Complete/l-light.png differ diff --git a/test/goldens/SecWidget/Measure Complete/m-dark.png b/test/goldens/SecWidget/Measure Complete/m-dark.png index b796003..22a6249 100644 Binary files a/test/goldens/SecWidget/Measure Complete/m-dark.png and b/test/goldens/SecWidget/Measure Complete/m-dark.png differ diff --git a/test/goldens/SecWidget/Measure Complete/m-light.png b/test/goldens/SecWidget/Measure Complete/m-light.png index c25c915..8af343f 100644 Binary files a/test/goldens/SecWidget/Measure Complete/m-light.png and b/test/goldens/SecWidget/Measure Complete/m-light.png differ diff --git a/test/goldens/SecWidget/Measure Complete/s-dark.png b/test/goldens/SecWidget/Measure Complete/s-dark.png index 02719d6..4807f84 100644 Binary files a/test/goldens/SecWidget/Measure Complete/s-dark.png and b/test/goldens/SecWidget/Measure Complete/s-dark.png differ diff --git a/test/goldens/SecWidget/Measure Complete/s-light.png b/test/goldens/SecWidget/Measure Complete/s-light.png index 7a14096..d50ea08 100644 Binary files a/test/goldens/SecWidget/Measure Complete/s-light.png and b/test/goldens/SecWidget/Measure Complete/s-light.png differ diff --git a/test/goldens/SecWidget/Measure Fail/l-dark.png b/test/goldens/SecWidget/Measure Fail/l-dark.png index 242480d..eca7d82 100644 Binary files a/test/goldens/SecWidget/Measure Fail/l-dark.png and b/test/goldens/SecWidget/Measure Fail/l-dark.png differ diff --git a/test/goldens/SecWidget/Measure Fail/l-light.png b/test/goldens/SecWidget/Measure Fail/l-light.png index 908ef49..d81fd1a 100644 Binary files a/test/goldens/SecWidget/Measure Fail/l-light.png and b/test/goldens/SecWidget/Measure Fail/l-light.png differ diff --git a/test/goldens/SecWidget/Measure Fail/m-dark.png b/test/goldens/SecWidget/Measure Fail/m-dark.png index f264a94..b9c4cf8 100644 Binary files a/test/goldens/SecWidget/Measure Fail/m-dark.png and b/test/goldens/SecWidget/Measure Fail/m-dark.png differ diff --git a/test/goldens/SecWidget/Measure Fail/m-light.png b/test/goldens/SecWidget/Measure Fail/m-light.png index 489619c..8976da2 100644 Binary files a/test/goldens/SecWidget/Measure Fail/m-light.png and b/test/goldens/SecWidget/Measure Fail/m-light.png differ diff --git a/test/goldens/SecWidget/Measure Fail/s-dark.png b/test/goldens/SecWidget/Measure Fail/s-dark.png index bab9634..a77b730 100644 Binary files a/test/goldens/SecWidget/Measure Fail/s-dark.png and b/test/goldens/SecWidget/Measure Fail/s-dark.png differ diff --git a/test/goldens/SecWidget/Measure Fail/s-light.png b/test/goldens/SecWidget/Measure Fail/s-light.png index 354c19c..a9fee91 100644 Binary files a/test/goldens/SecWidget/Measure Fail/s-light.png and b/test/goldens/SecWidget/Measure Fail/s-light.png differ diff --git a/test/goldens/SecWidget/Measuring/l-dark.png b/test/goldens/SecWidget/Measuring/l-dark.png index 242480d..eca7d82 100644 Binary files a/test/goldens/SecWidget/Measuring/l-dark.png and b/test/goldens/SecWidget/Measuring/l-dark.png differ diff --git a/test/goldens/SecWidget/Measuring/l-light.png b/test/goldens/SecWidget/Measuring/l-light.png index 908ef49..d81fd1a 100644 Binary files a/test/goldens/SecWidget/Measuring/l-light.png and b/test/goldens/SecWidget/Measuring/l-light.png differ diff --git a/test/goldens/SecWidget/Measuring/m-dark.png b/test/goldens/SecWidget/Measuring/m-dark.png index f264a94..b9c4cf8 100644 Binary files a/test/goldens/SecWidget/Measuring/m-dark.png and b/test/goldens/SecWidget/Measuring/m-dark.png differ diff --git a/test/goldens/SecWidget/Measuring/m-light.png b/test/goldens/SecWidget/Measuring/m-light.png index 489619c..8976da2 100644 Binary files a/test/goldens/SecWidget/Measuring/m-light.png and b/test/goldens/SecWidget/Measuring/m-light.png differ diff --git a/test/goldens/SecWidget/Measuring/s-dark.png b/test/goldens/SecWidget/Measuring/s-dark.png index bab9634..a77b730 100644 Binary files a/test/goldens/SecWidget/Measuring/s-dark.png and b/test/goldens/SecWidget/Measuring/s-dark.png differ diff --git a/test/goldens/SecWidget/Measuring/s-light.png b/test/goldens/SecWidget/Measuring/s-light.png index 354c19c..a9fee91 100644 Binary files a/test/goldens/SecWidget/Measuring/s-light.png and b/test/goldens/SecWidget/Measuring/s-light.png differ diff --git a/test/goldens/SecWidget/Priming/l-dark.png b/test/goldens/SecWidget/Priming/l-dark.png index 225a3ae..9b63091 100644 Binary files a/test/goldens/SecWidget/Priming/l-dark.png and b/test/goldens/SecWidget/Priming/l-dark.png differ diff --git a/test/goldens/SecWidget/Priming/l-light.png b/test/goldens/SecWidget/Priming/l-light.png index 59cedb4..258638a 100644 Binary files a/test/goldens/SecWidget/Priming/l-light.png and b/test/goldens/SecWidget/Priming/l-light.png differ diff --git a/test/goldens/SecWidget/Priming/m-dark.png b/test/goldens/SecWidget/Priming/m-dark.png index 1828c6d..de19d5a 100644 Binary files a/test/goldens/SecWidget/Priming/m-dark.png and b/test/goldens/SecWidget/Priming/m-dark.png differ diff --git a/test/goldens/SecWidget/Priming/m-light.png b/test/goldens/SecWidget/Priming/m-light.png index 3f28c5e..fa14660 100644 Binary files a/test/goldens/SecWidget/Priming/m-light.png and b/test/goldens/SecWidget/Priming/m-light.png differ diff --git a/test/goldens/SecWidget/Priming/s-dark.png b/test/goldens/SecWidget/Priming/s-dark.png index b9eecad..eb92024 100644 Binary files a/test/goldens/SecWidget/Priming/s-dark.png and b/test/goldens/SecWidget/Priming/s-dark.png differ diff --git a/test/goldens/SecWidget/Priming/s-light.png b/test/goldens/SecWidget/Priming/s-light.png index 3e78173..6af3bfd 100644 Binary files a/test/goldens/SecWidget/Priming/s-light.png and b/test/goldens/SecWidget/Priming/s-light.png differ diff --git a/test/goldens/SecWidget/Waiting for measurement/l-dark.png b/test/goldens/SecWidget/Waiting for measurement/l-dark.png index c2ee70f..481e510 100644 Binary files a/test/goldens/SecWidget/Waiting for measurement/l-dark.png and b/test/goldens/SecWidget/Waiting for measurement/l-dark.png differ diff --git a/test/goldens/SecWidget/Waiting for measurement/l-light.png b/test/goldens/SecWidget/Waiting for measurement/l-light.png index 95f3381..9b94d53 100644 Binary files a/test/goldens/SecWidget/Waiting for measurement/l-light.png and b/test/goldens/SecWidget/Waiting for measurement/l-light.png differ diff --git a/test/goldens/SecWidget/Waiting for measurement/m-dark.png b/test/goldens/SecWidget/Waiting for measurement/m-dark.png index 236f306..00f5f68 100644 Binary files a/test/goldens/SecWidget/Waiting for measurement/m-dark.png and b/test/goldens/SecWidget/Waiting for measurement/m-dark.png differ diff --git a/test/goldens/SecWidget/Waiting for measurement/m-light.png b/test/goldens/SecWidget/Waiting for measurement/m-light.png index 1e31c14..7996ef7 100644 Binary files a/test/goldens/SecWidget/Waiting for measurement/m-light.png and b/test/goldens/SecWidget/Waiting for measurement/m-light.png differ diff --git a/test/goldens/SecWidget/Waiting for measurement/s-dark.png b/test/goldens/SecWidget/Waiting for measurement/s-dark.png index f89f88d..17cec50 100644 Binary files a/test/goldens/SecWidget/Waiting for measurement/s-dark.png and b/test/goldens/SecWidget/Waiting for measurement/s-dark.png differ diff --git a/test/goldens/SecWidget/Waiting for measurement/s-light.png b/test/goldens/SecWidget/Waiting for measurement/s-light.png index c6d4f52..cd4c5f6 100644 Binary files a/test/goldens/SecWidget/Waiting for measurement/s-light.png and b/test/goldens/SecWidget/Waiting for measurement/s-light.png differ