Search categories, packages and repositories

Package detailsv2.2.0

flutter_locker

Secures your secrets in keychain using biometric authentication (Fingerprint, Touch ID, Face ID...)

AndroidiOS
30-day downloads
4.1K
Likes
50
Pub points
160

Install package

flutter pub add flutter_locker

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

Flutter Locker is a secure package for storing and retrieving sensitive data using platform-specific keychains with biometric authentication (fingerprint, Touch ID, Face ID). It leverages native security features on Android and iOS to protect secrets like API keys or tokens. The package ensures that data remains encrypted and accessible only after successful biometric verification, enhancing app security without compromising user experience. Ideal for apps requiring high-security local storage.

Use cases

  • Securely store API keys
  • Protect user credentials
  • Enable biometric access to sensitive data
  • Store encryption keys locally
  • Implement secure session management

Key features

  • Biometric authentication integration
  • Platform-native keychain usage
  • Encrypted local storage
  • Simple API for secure access
  • Automatic fallback to password if biometrics fail

Suitable for

  • Apps handling sensitive user data
  • Financial or healthcare applications
  • Authentication-heavy apps
  • Apps requiring secure local storage
  • Developers prioritizing user privacy

Considerations

  • Requires biometric hardware support
  • Limited to Android and iOS platforms
  • May require additional permission handling
  • Not suitable for non-biometric environments
  • Depends on underlying OS security mechanisms

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

Flutter Locker🔒

Locker

Flutter plugin that secures your secrets in keychain using biometric authentication (Fingerprint, Touch ID, Face ID...).

It uses:

Table of contents

Migrate to 2.1.0

The models now accept named parameters instead of unnamed, e.g.:

RetrieveSecretRequest(
  key: 'key',
  androidPrompt: AndroidPrompt(title: 'title', cancelLabel: 'cancel'),
  iOsPrompt: IOsPrompt(touchIdText: 'description'),
)

Usage

FlutterLocker.supportsBiometricAuthentication();

Checks if the devices has biometric capabilities no matter if they are configured and turned on.

FlutterLocker.canAuthenticate();

Checks if the devices has biometric capabilities that are configured and turned on.

await FlutterLocker.save(SaveSecretRequest(
  key: 'key',
  secret: 'secret',
  androidPrompt: AndroidPrompt(title: 'Authenticate', cancelLabel: 'Cancel'),
));

Saves the secret. On Android prompt is shown, while on iOS there is no need for the prompt when saving.

await FlutterLocker.retrieve(RetrieveSecretRequest(
  key: key,
  androidPrompt: AndroidPrompt(title: 'Authenticate', cancelLabel: 'Cancel'),
  iOsPrompt: IOsPrompt(touchIdText: 'Authenticate'),
));

Retrieves the secret. You need to provide a prompt for Android and iOS. Prompt for iOS is used only with TouchID. FaceID uses strings from Info.plist.

await FlutterLocker.delete('key');

Deletes the secret.

Exceptions

For common exceptions, a LockerException is thrown.

Use LockerException.reason to find out what went wrong:

  • secretNotFound - Happens when you try to retrieve a secret that was never saved for that key
  • authenticationCanceled - User canceled the authentication prompt
  • authenticationFailed - User failed authentication, e.g. by too many wrong attempts

For other exception, a PlatformException is thrown. You can use PlatformException.message to get more info.

Notes

  • iOS only: app will not show authentication dialog when saving (authentication will always succeed)
  • please follow Locker and Goldfinger setup to prevent any issues

Setup

iOS

To use Locker you need to add the NSFaceIDUsageDescription to you Info.plist.

If NSFaceIDUsageDescription is not provided, the app will crash with the following error:

This app has crashed because it attempted to access privacy-sensitive data without a usage description.  The app's Info.plist must contain an NSFaceIDUsageDescription key with a string value explaining to the user how the app uses this data.
Android

Ensure MainActivity extends FlutterFragmentActivity.

class MainActivity: FlutterFragmentActivity() {
    // ...
}

When showing authentication prompt, the app might crash on some Samsung devices if you don't use an appropriate theme: https://github.com/infinum/flutter-plugins-locker/commit/fcb1f6401d89f860d24ea9a75027d62a03e87926.

Contributing

We believe that the community can help us improve and build better a product. Please refer to our contributing guide to learn about the types of contributions we accept and the process for submitting them.

To ensure that our community remains respectful and professional, we defined a code of conduct that we expect all contributors to follow.

We appreciate your interest and look forward to your contributions.

License

Copyright 2024 Infinum

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Credits

Maintained and sponsored by Infinum.

Categories

Source repository

Projects using this package