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