Flutter plugin to store data behind biometric authentication (ie. fingerprint)

Overview

biometric_storage

Pub

Encrypted file store, optionally secured by biometric lock for Android, iOS, MacOS and partial support for Linux, Windows and Web.

Meant as a way to store small data in a hardware encrypted fashion. E.g. to store passwords, secret keys, etc. but not massive amounts of data.

  • Android: Uses androidx with KeyStore.
  • iOS and MacOS: LocalAuthentication with KeyChain.
  • Linux: Stores values in Keyring using libsecret. (No biometric authentication support).
  • Windows: Uses wincreds.h to store into read/write into credential store.
  • Web: Warning Uses unauthenticated, unencrypted storage in localStorage. If you have a better idea for secure storage on web platform, please open an Issue.

Check out AuthPass Password Manager for a app which makes heavy use of this plugin.

Getting Started

Installation

Android

  • Requirements:
    • Android: API Level >= 23 (android/app/build.gradle minSdkVersion 23)

    • Make sure to use the latest kotlin version:

      • android/build.gradle: ext.kotlin_version = '1.4.31'
    • MainActivity must extend FlutterFragmentActivity

    • Theme for the main activity must use Theme.AppCompat thme. (Otherwise there will be crases on Android < 29) For example:

      AndroidManifest.xml:

      <activity
      android:name=".MainActivity"
      android:launchMode="singleTop"
      android:theme="@style/LaunchTheme"

      xml/styles.xml:

          <style name="LaunchTheme" parent="Theme.AppCompat.NoActionBar">
          <!-- Show a splash screen on the activity. Automatically removed when
               Flutter draws its first frame -->
          <item name="android:windowBackground">@drawable/launch_background</item>
      
          <item name="android:windowNoTitle">true</item>
          <item name="android:windowActionBar">false</item>
          <item name="android:windowFullscreen">true</item>
          <item name="android:windowContentOverlay">@null</item>
      </style>
Resources

iOS

https://developer.apple.com/documentation/localauthentication/logging_a_user_into_your_app_with_face_id_or_touch_id

  • include the NSFaceIDUsageDescription key in your app’s Info.plist file
  • Requires at least iOS 9

Mac OS

  • include the NSFaceIDUsageDescription key in your app’s Info.plist file
  • enable keychain sharing and signing. (not sure why this is required. but without it You will probably see an error like:

    SecurityError, Error while writing data: -34018: A required entitlement isn't present.

  • Requires at least Mac OS 10.12

Usage

You basically only need 4 methods.

  1. Check whether biometric authentication is supported by the device
  final response = await BiometricStorage().canAuthenticate()
  if (response != CanAuthenticateResponse.success) {
    // panic..
  }
  1. Create the access object
  final store = BiometricStorage().getStorage('mystorage');
  1. Read data
  final data = await storageFile.read();
  1. Write data
  final myNewData = 'Hello World';
  await storageFile.write(myNewData);

See also the API documentation: https://pub.dev/documentation/biometric_storage/latest/biometric_storage/BiometricStorageFile-class.html#instance-methods

Comments
  • Authenticated Option on Samsung device throws Exception

    Authenticated Option on Samsung device throws Exception

    Greetings and thank you for creating this plugin!

    I was able to get your example working (v1.1.0+1) while using the Biometric Authenticated option on my iPhone X (14.2) and my Pixel 3 (Android 11) just fine but on my Samsung S8+ (Android 9, One UI 1.0) when I write, it throws the following exception:

    java.security.KeyStoreException: the master key android-keystore://default_authenticated_master_key exists but is unusable java.security.KeyStoreException: the master key android-keystore://default_authenticated_master_key exists but is unusable at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewMasterKey(AndroidKeysetManager.java:268) at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build(AndroidKeysetManager.java:228) at androidx.security.crypto.EncryptedFile$Builder.build(EncryptedFile.java:200) at design.codeux.biometric_storage.BiometricStorageFile.buildEncryptedFile(BiometricStorageFile.kt:67) at design.codeux.biometric_storage.BiometricStorageFile.writeFile(BiometricStorageFile.kt:73) at design.codeux.biometric_storage.BiometricStoragePlugin$onMethodCall$8$1.invoke(BiometricStoragePlugin.kt:195) at design.codeux.biometric_storage.BiometricStoragePlugin$onMethodCall$8$1.invoke(BiometricStoragePlugin.kt:76) at design.codeux.biometric_storage.BiometricStoragePlugin$onMethodCall$4$1.invoke(BiometricStoragePlugin.kt:159) at design.codeux.biometric_storage.BiometricStoragePlugin$onMethodCall$4$1.invoke(BiometricStoragePlugin.kt:76) at design.codeux.biometric_storage.BiometricStoragePlugin$authenticate$prompt$1$onAuthenticationSucceeded$$inlined$ui$1.run(BiometricStoragePlugin.kt:290) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7073) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964) Caused by: android.security.keystore.UserNotAuthenticatedException: User not authenticated at android.security.KeyStore.getInvalidKeyException(KeyStore.java:1233) at android.security.KeyStore.getInvalidKeyException(KeyStore.java:1331) at android.security.keystore.KeyStoreCryptoOperationUtils.getInvalidKeyExceptionForInit(KeyStoreCryptoOperationUtils.java:54) at android.security.keystore.KeyStoreCryptoOperationUtils.getExceptionForCipherInit(KeyStoreCryptoOperationUtils.java:89) at android.security.keystore.AndroidKeyStoreCipherSpiBase.ensureKeystoreOperationInitialized(AndroidKeyStoreCipherSpiBase.java:265) at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineInit(AndroidKeyStoreCipherSpiBase.java:109) at javax.crypto.Cipher.tryTransformWithProvider(Cipher.java:2984) at javax.crypto.Cipher.tryCombinations(Cipher.java:2891) at javax.crypto.Cipher$SpiAndProviderUpdater.updateAndGetSpiAndProvider(Cipher.java:2796) at javax.crypto.Cipher.chooseProvider(Cipher.java:773) at javax.crypto.Cipher.init(Cipher.java:1143) at javax.crypto.Cipher.init(Cipher.java:1084) at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.encrypt(AndroidKeystoreAesGcm.java:69) at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.validateAead(AndroidKeystoreKmsClient.java:226) at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.getAead(AndroidKeystoreKmsClient.java:160) at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewMasterKey(AndroidKeysetManager.java:259) ... 16 more

    Please advise.

    opened by html-rulez-d00d 28
  • Compiling on linux fails

    Compiling on linux fails

    Compiling an app that depends on biometric_storage fails on the latest ~~master channel~~ stable release with the following error message (on linux and I'd guess on macos as well):

    dart_tool/flutter_build/generated_main.dart:47:9: Error: Undefined name 'Win32BiometricStoragePlugin'.
            Win32BiometricStoragePlugin.registerWith();
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    

    I think this might be related to recent changes to dartPluginClass by flutter, so if you think this is flutter's bug and not yours feel free to close this issue :)

    opened by miDeb 23
  • Mention required proguard configuration in README

    Mention required proguard configuration in README

    Hi all,

    I just tried to integrate this great package in freshly created flutter app with no other content.

    I faced quite some problems getting it to build due to some java.lang.NoSuchMethodError: kotlin.jvm.internal.FunctionReferenceImpl.<init> exceptions during the build.

    Gladly I remembered a similar problem I had that required to enable Proguard.

    I saw that you have enabled Proguard as well in this commit: https://github.com/authpass/biometric_storage/commit/b37f0d7390b93ac21935862625348eebef5c4cdd

    Maybe this information should be added to the README.

    Looking forward to your comments.

    Benjamin

    opened by benjaminSchilling33 12
  • Exception when using pre release version - 3.0.0-rc.6

    Exception when using pre release version - 3.0.0-rc.6

    I/flutter (25078): login error: PlatformException(Unexpected Error, User not authenticated, android.security.keystore.UserNotAuthenticatedException: User not authenticated I/flutter (25078): android.security.keystore.UserNotAuthenticatedException: User not authenticated I/flutter (25078): at android.security.KeyStore.getInvalidKeyException(KeyStore.java:1497) I/flutter (25078): at android.security.KeyStore.getInvalidKeyException(KeyStore.java:1539) I/flutter (25078): at android.security.keystore.KeyStoreCryptoOperationUtils.getInvalidKeyExceptionForInit(KeyStoreCryptoOperationUtils.java:54) I/flutter (25078): at android.security.keystore.KeyStoreCryptoOperationUtils.getExceptionForCipherInit(KeyStoreCryptoOperationUtils.java:89) I/flutter (25078): at android.security.keystore.AndroidKeyStoreCipherSpiBase.ensureKeystoreOperationInitialized(AndroidKeyStoreCipherSpiBase.java:265) I/flutter (25078): at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineInit(AndroidKeyStoreCipherSpiBase.java:109) I/flutter (25078): at javax.crypto.Cipher.tryTransformWithProvider(Cipher.java:2984) I/flutter (25078): at javax.crypto.Cipher.tryCombinations(Cipher.java:2891) I/flutter (25078): at javax.crypto.Cipher$SpiAndProviderUpdater.updateAndGetSpiAndProvider(Cipher.java:2796) I/flutter (25078): at javax.crypto.Cipher.chooseProvider(Cipher.java:773) I/flutter (25078): at javax.crypto.Cipher.init(Cipher.java:1143) I/flutter (25078): at javax.crypto.Cipher.init(Cipher.java:1084) I/flutter (25078): at design.codeux.biometric_storage.CryptographyManagerImpl.getInitializedCipherForEncryption(CryptographyManager.kt:94) I/flutter (25078): at design.codeux.biometric_storage.BiometricStorageFile.cipherForEncrypt(BiometricStorageFile.kt:68) I/flutter (25078): at design.codeux.biometric_storage.BiometricStoragePlugin$onMethodCall$4.invoke(BiometricStoragePlugin.kt:154) I/flutter (25078): at design.codeux.biometric_storage.BiometricStoragePlugin$onMethodCall$8.invoke(BiometricStoragePlugin.kt:198) I/flutter (25078): at design.codeux.biometric_storage.BiometricStoragePlugin$onMethodCall$8.invoke(BiometricStoragePlugin.kt:88) I/flutter (25078): at design.codeux.biometric_storage.BiometricStoragePlugin$onMethodCall$3.invoke(BiometricStoragePlugin.kt:146) I/flutter (25078): at design.codeux.biometric_storage.BiometricStoragePlugin.onMethodCall(BiometricStoragePlugin.kt:198) I/flutter (25078): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233) I/flutter (25078): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85) I/flutter (25078): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:818) I/flutter (25078): at android.os.MessageQueue.nativePollOnce(Native Method) I/flutter (25078): at android.os.MessageQueue.next(MessageQueue.java:335) I/flutter (25078): at android.os.Looper.loop(Looper.java:206) I/flutter (25078): at android.app.ActivityThread.main(ActivityThread.java:8528) I/flutter (25078): at java.lang.reflect.Method.invoke(Native Method) I/flutter (25078): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) I/flutter (25078): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) I/flutter (25078): , null) - stack: #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:597:7) I/flutter (25078): #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:158:18)

    opened by Androrier 11
  • Build Failure on Android

    Build Failure on Android

    
    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Execution failed for task ':biometric_storage:kaptGenerateStubsDebugKotlin'.
    > Could not resolve all files for configuration ':biometric_storage:debugCompileClasspath'.
       > Failed to transform moshi-1.13.0.jar (com.squareup.moshi:moshi:1.13.0) to match attributes {artifactType=android-classes-jar, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.jvm.environment=standard-jvm, org.gradle.jvm.version=8, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-api, org.jetbrains.kotlin.platform.type=jvm}.
          > Execution failed for JetifyTransform: C:\Users\xeine\.gradle\caches\modules-2\files-2.1\com.squareup.moshi\moshi\1.13.0\da685586facab9eb5c4fb630ce248be14e7da21b\moshi-1.13.0.jar.
             > Failed to transform 'C:\Users\xeine\.gradle\caches\modules-2\files-2.1\com.squareup.moshi\moshi\1.13.0\da685586facab9eb5c4fb630ce248be14e7da21b\moshi-1.13.0.jar' using Jetifier. Reason: IllegalArgumentException, message: Unsupported class file major version 60. (Run with --stacktrace for more details.)
               Suggestions:
                - Check out existing issues at https://issuetracker.google.com/issues?q=componentid:460323&s=modified_time:desc, it's possible that this issue has already been filed there.
                - If this issue has not been filed, please report it at https://issuetracker.google.com/issues/new?component=460323 (run with --stacktrace and provide a stack trace if possible).
    
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    * Get more help at https://help.gradle.org
    
    BUILD FAILED in 23s
    Exception: Gradle task assembleDebug failed with exit code 1
    
    
    

    Flutter Doctor

    
    [√] Flutter (Channel stable, 2.10.3, on Microsoft Windows [Version 10.0.22000.588], locale en-DE)
        • Flutter version 2.10.3 at C:\tools\flutter
        • Upstream repository https://github.com/flutter/flutter.git
        • Framework revision 7e9793dee1 (3 weeks ago), 2022-03-02 11:23:12 -0600
        • Engine revision bd539267b4
        • Dart version 2.16.1
        • DevTools version 2.9.2
    
    [√] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
        • Android SDK at C:\Users\xeine\AppData\Local\Android\Sdk
        • Platform android-31, build-tools 31.0.0
        • ANDROID_SDK_ROOT = C:\Users\xeine\AppData\Local\Android\Sdk
        • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
        • Java version OpenJDK Runtime Environment (build 11.0.11+9-b60-7590822)
        • All Android licenses accepted.
    
    [√] Chrome - develop for the web
        • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
    
    [X] Visual Studio - develop for Windows
        X Visual Studio not installed; this is necessary for Windows development.
          Download at https://visualstudio.microsoft.com/downloads/.
          Please install the "Desktop development with C++" workload, including all of its default components
    
    [√] Android Studio (version 2021.1)
        • Android Studio at C:\Program Files\Android\Android Studio
        • Flutter plugin can be installed from:
           https://plugins.jetbrains.com/plugin/9212-flutter
        • Dart plugin can be installed from:
           https://plugins.jetbrains.com/plugin/6351-dart
        • Java version OpenJDK Runtime Environment (build 11.0.11+9-b60-7590822)
    
    [√] Connected device (3 available)
        • Windows (desktop) • windows • windows-x64    • Microsoft Windows [Version 10.0.22000.588]
        • Chrome (web)      • chrome  • web-javascript • Google Chrome 99.0.4844.74
        • Edge (web)        • edge    • web-javascript • Microsoft Edge 97.0.1072.69
    
    [√] HTTP Host Availability
        • All required HTTP hosts are available
    
    
    opened by xeinebiu 10
  • iOS Simulator FaceID never popups

    iOS Simulator FaceID never popups

    FaceID is enrolled in Simulator settings

    Code

    final storage = await BiometricStorage().getStorage('test');
    
    try {
      await storage.write('value');
    } catch (e) {
      return console.error('biometric error: $e');
    }
    

    Error PlatformException(SecurityError, Error while writing data: -25293: The user name or passphrase you entered is not correct., null, null)

    opened by oliverbytes 9
  • Minimum supported Gradle version is 6.5

    Minimum supported Gradle version is 6.5

    Hi there,

    Thanks for your library! Lately I upgraded my project flutter and Android, and when building for release I'm getting this error:

    `Build file '/.pub-cache/hosted/pub.dartlang.org/biometric_storage-3.0.0-rc.2/android/build.gradle' line: 24

    What went wrong: A problem occurred evaluating root project 'biometric_storage'.

    Failed to apply plugin [id 'com.android.internal.version-check'] Minimum supported Gradle version is 6.5. Current version is 5.4.1. If using the gradle wrapper, try editing the distributionUrl in /.pub-cache/hosted/pub.dartlang.org/biometric_storage-3.0.0-rc.2/android/gradle/wrapper/gradle-wrapper.properties to gradle-6.5-all.zip`

    opened by aelahmar 8
  • [web]: Use SecureLS for an encrypted storage for web

    [web]: Use SecureLS for an encrypted storage for web

    Here: https://www.npmjs.com/package/secure-ls

    I already integrated that in the very first stage of Flutter web and you just have to import the module in your index.html.

    opened by Ahmadre 8
  • Question: How to use

    Question: How to use "authenticationValidityDurationSeconds"?

    Hi,

    Thank you for making this package.

    StorageFileInitOptions( authenticationValidityDurationSeconds: 30, ),

    As far as I understand, when I set authenticationValidityDurationSeconds to 30, the storage file should not require authentication for 30 seconds for any read or write actions.

    But my working sample with Samsung Galaxy Note 10 asks authentication per every actions (read and write). (no matter how long I set the validity duration).

    Thank for your help!

    Wonmo

    opened by croquies 8
  • Enable setInvalidatedByBiometricEnrollment

    Enable setInvalidatedByBiometricEnrollment

    Hello, I have a question, it is possible to enable setInvalidatedByBiometricEnrollment?

    I need to use setInvalidatedByBiometricEnrollment(true) while generating key and the key gets invalidated on any new biometric enrollment. An exception is thrown when you try to use the same key. In this situation, you can reset the biometric app settings inside your app and start the process of enabling biometrics again.

    opened by EdinsonNM 8
  • Update DartPluginFile usage for windows

    Update DartPluginFile usage for windows

    Description

    • With the release of Flutter 2.8.0 to the stable channel, there are some changes with how dart only plugin implementations get registered.
    • Flutter generates a generated_main.dart file under the .dart-tool/flutter_build directory which for the example app for this plugin looks like this
    export 'package:biometric_storage_example/main.dart';
    
    import 'package:biometric_storage_example/main.dart' as entrypoint;
    import 'dart:io'; // flutter_ignore: dart_io_import.
    import 'package:biometric_storage/biometric_storage.dart';
    
    @pragma('vm:entry-point')
    class _PluginRegistrant {
    
      @pragma('vm:entry-point')
      static void register() {
        if (Platform.isAndroid) {
        } else if (Platform.isIOS) {
        } else if (Platform.isLinux) {
        } else if (Platform.isMacOS) {
        } else if (Platform.isWindows) {
          try {
            Win32BiometricStoragePlugin.register();
          } catch (err) {
            print(
              '`biometric_storage` threw an error: $err. '
              'The app may not function as expected until you remove this plugin from pubspec.yaml'
            );
            rethrow;
          }
    
        }
      }
    
    }
    
    typedef _UnaryFunction = dynamic Function(List<String> args);
    typedef _NullaryFunction = dynamic Function();
    
    void main(List<String> args) {
      if (entrypoint.main is _UnaryFunction) {
        (entrypoint.main as _UnaryFunction)(args);
      } else {
        (entrypoint.main as _NullaryFunction)();
      }
    }
    

    which will cause the following error when building the application

    Error: Undefined name 'Win32BiometricStoragePlugin'.
    .dart_tool/flutter_build/generated_main.dart:38
                Win32BiometricStoragePlugin.registerWith();
    
    • The flutter tooling is expecting
      • The Win32BiometricStoragePlugin class to be importable from package:biometric_storage/biometric_storage.dart'
      • The Win32BiometricStoragePlugin to define a static function registerWith()

    Changes

    • Removed the noop win32 file/implementation
    • Changed the default BiometricStorage.instance to be MethodChannelBiometricStorage
    • Exported the Win32BiometricStoragePlugin from lib/biometric_storage.dart
    • Defined Win32BiometricStoragePlugin.registerWith static method that registers an instance of Win32BiometricStoragePlugin as the instance provided by BiometricStorage.instance
    • Updated some various iOS project files based on Flutter tooling changes
    • Update the example to include biometric_storage as a normal dependency and not a dev dependency
    • Bumped the version to 4.0.0 because this is most likely a breaking change
    • Bumped the min Flutter SDK to 2.8.0 because I believe prior to this stable version the issue described above does not reproduce.

    Important Notes

    • If you try to reproduce this issue with the current release's example app and Flutter 2.8.0 it will NOT reproduce. The dependency on biometric_storage is a dev dependency instead of a normal dependency. It seems the the generated_main.dart file is not generated if a dev_dependency provides a Dart only plugin implementation. I have updated the example to provide biometric_storage as a normal dependency in this PR.

    Testing

    • I have verified this fixes the build issue on iOS and Android but cannot verify that the Linux and Windows implementations of this plugin are still working as expected because I do not have the proper hardware.
    opened by brianblanchard-wf 7
  • FaceId is not considered in Android Platform

    FaceId is not considered in Android Platform

    Hi, I am using latest version of biometric_storage in my app. In ios i am able to use FaceId but in android When FaceId is setup, biometricStorage.canAuthenticate() returns CanAuthenticateResponse.errorNoBiometricEnrolled.

    In Android with Fingerprint everything is fine, facing issue with FaceId alone. I followed all the instructions given in Getting started section.

    Is FaceId in Android not supported by biometric_storage or do we have to follow any additional steps for that?

    opened by hema-k83 0
  • The given test case from biometric_storage/test/biometric_storage_test.dart failed

    The given test case from biometric_storage/test/biometric_storage_test.dart failed

    I am trying mock the method channel "biometric_storage", but the mock response does not invoke while executing the test case.

    I tried to run the given test case and it failed.

    import 'package:biometric_storage/src/biometric_storage.dart';
    import 'package:flutter/services.dart';
    import 'package:flutter_test/flutter_test.dart';
    
    void main() {
      const channel = MethodChannel('biometric_storage');
    
      TestWidgetsFlutterBinding.ensureInitialized();
    
      setUp(() {
        channel.setMockMethodCallHandler((MethodCall methodCall) async {
          if (methodCall.method == 'canAuthenticate') {
            return 'ErrorUnknown';
          }
          throw PlatformException(code: 'NotImplemented');
        });
      });
    
      tearDown(() {
        channel.setMockMethodCallHandler(null);
      });
    
      test('canAuthenticate', () async {
        final result = await BiometricStorage().canAuthenticate();
        expect(result, CanAuthenticateResponse.unsupported);
      });
    }
    
    

    Here, BiometricStorage().canAuthenticate() return "errorHwUnavailable" despite mocking the response.

    can anyone help me out?

    opened by smeetbhatt1 0
  • Add method to check if storage file already exists

    Add method to check if storage file already exists

    Hello

    I use biometric storage to store a secret (generated EC key pair) at the first launch of my app. I have to check if the secret was already generated on subsequent launches without showing the authentication prompt if the secret already exists.

    Can you add a method to storageFile which checks if the file already exists?

    opened by UlrichRaab 0
  • Add possibility to invalidate storage after biometric changes

    Add possibility to invalidate storage after biometric changes

    Hi folks,

    Is it any chance to handle biometric changes in the package?

    There are methods on platforms: IOS: evaluatedPolicyDomainState Android: setInvalidatedByBiometricEnrollment

    thank you, hope the things are possible

    opened by vscmaster 0
  • Duplicate class

    Duplicate class

    [✓] Flutter (Channel stable, 3.3.6, on macOS 13.0 22A380 darwin-arm, locale zh-Hans-CN) [✓] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1) [✓] Xcode - develop for iOS and macOS (Xcode 14.0.1) [✓] Chrome - develop for the web [✓] Android Studio (version 2021.2) [✓] IntelliJ IDEA Ultimate Edition (version 2021.3) [✓] IntelliJ IDEA Community Edition (version 2022.1) [✓] VS Code (version 1.72.2) [✓] Connected device (3 available) [✓] HTTP Host Availability

    打包时遇到下面的异常 Duplicate class androidx.lifecycle.ViewModelLazy found in modules jetified-lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1) and lifecycle-viewmodel-2.5.1-runtime (androidx.lifecycle:lifecycle-viewmodel:2.5.1) Duplicate class androidx.lifecycle.ViewTreeViewModelKt found in modules jetified-lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1) and lifecycle-viewmodel-2.5.1-runtime (androidx.lifecycle:lifecycle-viewmodel:2.5.1)

    删除 android/build.gradle api "androidx.core:core-ktx:1.8.0" api "androidx.fragment:fragment-ktx:1.5.0"

    解决

    opened by liuguangmao 0
  • windows doesn't work with biometric_storage: ^4.1.3 when it's a transitive dependency

    windows doesn't work with biometric_storage: ^4.1.3 when it's a transitive dependency

    We are using biometric_storage in at_client_mobile. When we add at_client_mobile as dependency, biometric_storage throws following exception in Windows platform.

    flutter: #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:294:7)
    <asynchronous suspension>
    #1      MethodChannelBiometricStorage.getStorage (package:biometric_storage/src/biometric_storage.dart:318:22)
    <asynchronous suspension>
    #2      KeyChainManager.readAtClientData (package:at_client_mobile/src/keychain_manager.dart:35:21)
    <asynchronous suspension>
    #3      KeyChainManager.disableUsingSharedStorage (package:at_client_mobile/src/keychain_manager.dart:84:18)
    <asynchronous suspension>
    #4      KeyChainManager.initialSetup (package:at_client_mobile/src/keychain_manager.dart:78:7)
    <asynchronous suspension>
    #5      OnboardingService.initialSetup (package:at_onboarding_flutter/services/onboarding_service.dart:87:5)
    <asynchronous suspension>
    #6      _AtOnboardingStartScreenState._init (package:at_onboarding_flutter/screen/at_onboarding_start_screen.dart:37:5)
    <asynchronous suspension>
    

    Looks like some method channel functions are not getting invoked.

    If we add biometric_storage under the dependencies section directly, the issue does not come. This only seems to happen when biometric_storage is a transitive depedency.

    opened by sachins-geekyants 0
Releases(v4.1.2)
Owner
AuthPass
AuthPass – Password Manager
AuthPass
A simple flutter application that demonstrates authentication with pin or OTP sent via sms and also Fingerprint.

flutter_authentication A simple flutter application that demonstrates authentication with pin or OTP sent via sms and also Fingerprint. Getting Starte

OLUWATOMISIN ESAN 4 Apr 10, 2022
The Device Fingerprint tool collects thorough insight about the devices associated to a user.

The Device Fingerprint tool collects thorough insight about the devices associated to a user. Account takeovers and multiple account signups, payments can easily be avoided by applying the Device Fingerprinting module.

Shahin Sefidgaran 6 Nov 28, 2022
Encrypted peer-to-peer system for data security. Own data, own privacy

ESSE (Encrypted Symmetrical Session Engine) An open source encrypted peer-to-pee

CympleTech 455 Dec 26, 2022
Flutter Car Store App Concept

?? ?? Car Store App Flow ?? ?? ?? ⭐️ ⭐️ ??‍?? Car store app flow based on a design on Dribbble ?? . Complete flutter projects are available on my Code

Olayemii Garuba 38 Dec 12, 2022
This Flutter project recreates an electronics store home screen mockup.

E-Store Mobile App Home Screen This Flutter project recreates an electronics store home screen mockup. The mockup was created by @nasyiya.design on in

Azarro 34 Jul 2, 2022
This is the repository to store the course content and assignments pertaining to Flutter Summer Group hosted by CRUx in 2021 Summer

Flutter Summer Group 2021 This is the official repository for Flutter Summer Group hosted by cruX, and all the course content along with assignments w

Sai Ankit 47 Dec 4, 2022
A complete grocery store developed with Flutter, .Net Core, Firebase, One Signal and SQL Server as backend

# Grocery-Store developed in Flutter,DotNet Core, Firebase, One-Signal, SQL-Server, Stripe, Razorpay, Paypal A complete grocery store developed with F

Sunil Vijayan 31 Jan 1, 2023
Shoes Store UI Built With Flutter

shoes_store shoes store ui - flutter instagram : https://www.instagram.com/deverflu/ screens: menu : Getting Started This project is a starting point

Hamza ayach 5 Jul 12, 2022
A flutter app to store personal information about accesses, usernames and passwords

pass_reminder My very first Flutter project. An app to store personal information about accesses, usernames and passwords. Personal use only. Images A

Igor Ribeiro Silva 0 Oct 24, 2021
A complete Flutter E-Commerce Book Store application built using firebase as backend

ecommerce A complete Flutter E-Commerce Book Store application built using firebase as backend. Features Add or remove item in cart Search products Ad

aakanksha 2 Sep 24, 2022
A Book Store App Built Using Flutter

Book Store App Preview video: https://www.youtube.com/watch?v=ZPu-udyRgG0 My Linkedin My Upwork My Twitter My Instagram My Email: sangvaleap.vanny@gma

SANGVALEAP VANNY 32 Dec 24, 2022
Google Play Store one page design with flutter

playstore A new Flutter project. Getting Started Google Play Store one page desi

Ozan Takır 0 Dec 23, 2021
Recipe bank - Recipe Bank - Flutter frontend web app to store recipes

recipe_bank A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if t

Khalid Ali 0 Jan 2, 2022
Easy way to store http response.

Starlight Http Cached The easiest way to store data such as http response,String,int,double,bool,map,list. Features ☑️ Set Cached ☑️ Get Cached ☑️ Del

Ye Myo Aung 3 Jan 9, 2023
Dart grocery store / cashier line simulation implementation

Grocery Store Cashier Line Simulation Quick Read Dart implementation of a grocery store cashier line simulation. $ dart bin/grocerysimulator.dart inpu

Danilo 0 Jan 13, 2022
Plugin to checker data connection network.

ci_connectivity OBS: For now we don't have IOS support Getting Started Flutter plugin for checking network connection. It is not just checking if you

Lucas Firmino 0 Nov 23, 2021
Email and Password Authentication In Flutter & Firebase in Flutter 2.2

Email and Password Authentication In Flutter & Firebase in Flutter 2.2

BackSlash Flutter 43 Nov 23, 2022
A Flutter package to simplify firebase authentication.

firebase_authentication A Flutter package to simplify firebase authentication. Development State This is in a very, very early stage. It's a draft bas

Daniele Cambi 32 Apr 24, 2022
Implementing Firebase Authentication with Riverpod following Flutter Domain Driven Development pattern

firebase_auth_flutter_ddd Firebase authentication example with Hooks Riverpod and Freezed following Flutter DDD architecture Getting Started This proj

Python Hub 42 Jan 8, 2023