A Linux implementation of flutter_secure_storage using the XDG Desktop Secret Portal API (org.freedesktop.portal.Secret).

Usage

Use this implementation when the application should use the Secret Portal API, such as when running in a sandboxed environment (e.g., Flatpak or Snap).

import 'package:flutter_secure_storage_linux_portal/flutter_secure_storage_linux_portal.dart';

FlutterSecureStorageLinuxPortal.registerWith();

Important

FlutterSecureStorageLinuxPortal.registerWith() must be explicitly called. Simply adding the package as a dependency is not sufficient.

Example

The following example uses this implementation when running in Flatpak or Snap.

import 'dart:io';

import 'package:flutter_secure_storage_linux_portal/flutter_secure_storage_linux_portal.dart';

if (Platform.isLinux) {
  final environment = Platform.environment;

  final isFlatpak =
      environment.containsKey('FLATPAK_ID') ||
      environment['container'] == 'flatpak';
  final isSnap =
      environment.containsKey('SNAP') ||
      environment.containsKey('SNAP_NAME');
  final usePortal = isFlatpak || isSnap;

  if (usePortal) {
    FlutterSecureStorageLinuxPortal.registerWith();
  }
}

Tip

This is only an example of when to use the implementation. Applications may choose different conditions based on their environment or requirements.

Implementation Details

The Secret Portal API provides a unique master secret for a sandboxed application.

Unlike the Secret Service API, it does not provide secure storage itself. Instead, applications can use the master secret to encrypt secrets and store them in a file, for example.

File Path

The secrets are stored encrypted in a file:

$XDG_DATA_HOME/$APPLICATION_ID/secure_storage/secrets.json.

Cryptography

For security details.

Important

Disclaimer: Support for this library is given as best effort.

This library has not been reviewed or vetted by security professionals.

Not interoperable with GNOME libsecret

This implementation cannot retrieve secrets stored by flutter_secure_storage_linux or GNOME libsecret.

For more details, refer to this section.

Tip

flutter_secure_storage_linux_secret_service is interoperable and can retrieve secrets stored by flutter_secure_storage_linux.

Historical Background

This package was originally developed to be part of the flutter_secure_storage repository in #1204. The PR was not merged, and it was published in a separate repository.

See also: #1203