From 35d4415b14c05095ee6d77335aae8fa35e3e2368 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 22 Aug 2025 09:14:09 +0000 Subject: [PATCH 01/14] Initial plan From 0c74b3861a5d82b665d709c52d00f6822aed1d80 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 22 Aug 2025 09:20:45 +0000 Subject: [PATCH 02/14] Add configurable FlutterSecureStorage support to FlutterSecureCredentialsStorage Co-authored-by: PiotrRogulski <18120733+PiotrRogulski@users.noreply.github.com> --- .../flutter_secure_credentials_storage.dart | 18 +++-- packages/login_client_flutter/pubspec.yaml | 2 + ...utter_secure_credentials_storage_test.dart | 72 +++++++++++++++++++ 3 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 packages/login_client_flutter/test/flutter_secure_credentials_storage_test.dart diff --git a/packages/login_client_flutter/lib/src/flutter_secure_credentials_storage.dart b/packages/login_client_flutter/lib/src/flutter_secure_credentials_storage.dart index f6d5b1ef..fa679980 100644 --- a/packages/login_client_flutter/lib/src/flutter_secure_credentials_storage.dart +++ b/packages/login_client_flutter/lib/src/flutter_secure_credentials_storage.dart @@ -18,14 +18,22 @@ import 'package:login_client/login_client.dart'; /// A `flutter_secure_storage` implementation of the [CredentialsStorage]. class FlutterSecureCredentialsStorage implements CredentialsStorage { /// Creates the [CredentialsStorage]. - const FlutterSecureCredentialsStorage(); + /// + /// The optional [storage] parameter allows you to provide a custom + /// [FlutterSecureStorage] instance with specific configuration options. + /// If not provided, a default instance will be used. + const FlutterSecureCredentialsStorage({FlutterSecureStorage? storage}) + : _storage = storage; static const _key = 'login_client_flutter_credentials'; - FlutterSecureStorage get _storage => const FlutterSecureStorage(); + final FlutterSecureStorage? _storage; + + FlutterSecureStorage get _secureStorage => + _storage ?? const FlutterSecureStorage(); @override Future read() async { - final json = await _storage.read(key: _key); + final json = await _secureStorage.read(key: _key); if (json == null) { return null; } @@ -39,11 +47,11 @@ class FlutterSecureCredentialsStorage implements CredentialsStorage { @override Future save(Credentials credentials) { - return _storage.write(key: _key, value: credentials.toJson()); + return _secureStorage.write(key: _key, value: credentials.toJson()); } @override Future clear() { - return _storage.delete(key: _key); + return _secureStorage.delete(key: _key); } } diff --git a/packages/login_client_flutter/pubspec.yaml b/packages/login_client_flutter/pubspec.yaml index 6df696f2..de7c6771 100644 --- a/packages/login_client_flutter/pubspec.yaml +++ b/packages/login_client_flutter/pubspec.yaml @@ -17,5 +17,7 @@ dependencies: login_client: ^3.0.0 dev_dependencies: + flutter_test: + sdk: flutter custom_lint: ^0.6.4 leancode_lint: ^12.0.0 diff --git a/packages/login_client_flutter/test/flutter_secure_credentials_storage_test.dart b/packages/login_client_flutter/test/flutter_secure_credentials_storage_test.dart new file mode 100644 index 00000000..932c7ff6 --- /dev/null +++ b/packages/login_client_flutter/test/flutter_secure_credentials_storage_test.dart @@ -0,0 +1,72 @@ +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:login_client_flutter/login_client_flutter.dart'; +import 'package:oauth2/oauth2.dart'; + +// Mock FlutterSecureStorage for testing +class MockFlutterSecureStorage extends FlutterSecureStorage { + final Map _storage = {}; + + const MockFlutterSecureStorage() : super(); + + @override + Future read({required String key}) async { + return _storage[key]; + } + + @override + Future write({required String key, required String value}) async { + _storage[key] = value; + } + + @override + Future delete({required String key}) async { + _storage.remove(key); + } +} + +void main() { + group('FlutterSecureCredentialsStorage', () { + test('uses default storage when none provided', () { + const storage = FlutterSecureCredentialsStorage(); + + // This test ensures the constructor works with no parameters + expect(storage, isA()); + }); + + test('accepts custom storage instance', () { + const customStorage = MockFlutterSecureStorage(); + const storage = FlutterSecureCredentialsStorage(storage: customStorage); + + // This test ensures the constructor works with custom storage + expect(storage, isA()); + }); + + test('works with custom storage - read/write/clear operations', () async { + const customStorage = MockFlutterSecureStorage(); + const storage = FlutterSecureCredentialsStorage(storage: customStorage); + + // Test initial read returns null + expect(await storage.read(), null); + + // Test saving and reading credentials + final credentials = Credentials('test_token'); + await storage.save(credentials); + + final readCredentials = await storage.read(); + expect(readCredentials?.accessToken, equals('test_token')); + + // Test clearing + await storage.clear(); + expect(await storage.read(), null); + }); + + test('maintains backward compatibility with default constructor', () async { + // This test verifies that existing code continues to work + const storage = FlutterSecureCredentialsStorage(); + + // Should be able to perform operations without error + expect(storage.read(), completes); + }); + }); +} \ No newline at end of file From a6a2031221ec477ed103a13867c44e8f92900201 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 22 Aug 2025 09:21:56 +0000 Subject: [PATCH 03/14] Update README with custom FlutterSecureStorage configuration examples Co-authored-by: PiotrRogulski <18120733+PiotrRogulski@users.noreply.github.com> --- packages/login_client_flutter/README.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/login_client_flutter/README.md b/packages/login_client_flutter/README.md index a0ac735c..bcb1aab7 100644 --- a/packages/login_client_flutter/README.md +++ b/packages/login_client_flutter/README.md @@ -8,12 +8,33 @@ ## Usage ```dart +// Default usage final loginClient = LoginClient( credentialsStorage: const FlutterSecureCredentialsStorage(), // ... ); ``` +### Custom Configuration + +You can provide a custom `FlutterSecureStorage` instance to configure platform-specific options: + +```dart +final loginClient = LoginClient( + credentialsStorage: const FlutterSecureCredentialsStorage( + storage: FlutterSecureStorage( + aOptions: AndroidOptions( + encryptedSharedPreferences: true, + ), + iOptions: IOSOptions( + accessibility: KeychainAccessibility.first_unlock_this_device, + ), + ), + ), + // ... +); +``` + ## Android `javax.crypto.BadPaddingException` Exclude Flutter Secure Storage from Android full backup. From a48315ed524e6356814c9ad8189a54e270c4255c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 22 Aug 2025 09:30:19 +0000 Subject: [PATCH 04/14] Remove redundant _secureStorage getter, move default to constructor Co-authored-by: PiotrRogulski <18120733+PiotrRogulski@users.noreply.github.com> --- .../lib/src/flutter_secure_credentials_storage.dart | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/login_client_flutter/lib/src/flutter_secure_credentials_storage.dart b/packages/login_client_flutter/lib/src/flutter_secure_credentials_storage.dart index fa679980..a3156938 100644 --- a/packages/login_client_flutter/lib/src/flutter_secure_credentials_storage.dart +++ b/packages/login_client_flutter/lib/src/flutter_secure_credentials_storage.dart @@ -23,17 +23,14 @@ class FlutterSecureCredentialsStorage implements CredentialsStorage { /// [FlutterSecureStorage] instance with specific configuration options. /// If not provided, a default instance will be used. const FlutterSecureCredentialsStorage({FlutterSecureStorage? storage}) - : _storage = storage; + : _storage = storage ?? const FlutterSecureStorage(); static const _key = 'login_client_flutter_credentials'; - final FlutterSecureStorage? _storage; - - FlutterSecureStorage get _secureStorage => - _storage ?? const FlutterSecureStorage(); + final FlutterSecureStorage _storage; @override Future read() async { - final json = await _secureStorage.read(key: _key); + final json = await _storage.read(key: _key); if (json == null) { return null; } @@ -47,11 +44,11 @@ class FlutterSecureCredentialsStorage implements CredentialsStorage { @override Future save(Credentials credentials) { - return _secureStorage.write(key: _key, value: credentials.toJson()); + return _storage.write(key: _key, value: credentials.toJson()); } @override Future clear() { - return _secureStorage.delete(key: _key); + return _storage.delete(key: _key); } } From e0e260af7b723e0192fa1de3cb0fad4d35bf7f10 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 22 Aug 2025 09:35:47 +0000 Subject: [PATCH 05/14] Use parameter default value instead of ?? operator in constructor Co-authored-by: PiotrRogulski <18120733+PiotrRogulski@users.noreply.github.com> --- .../lib/src/flutter_secure_credentials_storage.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/login_client_flutter/lib/src/flutter_secure_credentials_storage.dart b/packages/login_client_flutter/lib/src/flutter_secure_credentials_storage.dart index a3156938..f1761de5 100644 --- a/packages/login_client_flutter/lib/src/flutter_secure_credentials_storage.dart +++ b/packages/login_client_flutter/lib/src/flutter_secure_credentials_storage.dart @@ -22,8 +22,9 @@ class FlutterSecureCredentialsStorage implements CredentialsStorage { /// The optional [storage] parameter allows you to provide a custom /// [FlutterSecureStorage] instance with specific configuration options. /// If not provided, a default instance will be used. - const FlutterSecureCredentialsStorage({FlutterSecureStorage? storage}) - : _storage = storage ?? const FlutterSecureStorage(); + const FlutterSecureCredentialsStorage({ + FlutterSecureStorage storage = const FlutterSecureStorage(), + }) : _storage = storage; static const _key = 'login_client_flutter_credentials'; final FlutterSecureStorage _storage; From 51ae3fcdbe5b7e834dac110f74775e0b16a583cc Mon Sep 17 00:00:00 2001 From: Piotr Rogulski Date: Fri, 22 Aug 2025 11:57:16 +0200 Subject: [PATCH 06/14] Fix tests --- ...utter_secure_credentials_storage_test.dart | 75 +++++++++++-------- 1 file changed, 45 insertions(+), 30 deletions(-) diff --git a/packages/login_client_flutter/test/flutter_secure_credentials_storage_test.dart b/packages/login_client_flutter/test/flutter_secure_credentials_storage_test.dart index 932c7ff6..1ca2f57e 100644 --- a/packages/login_client_flutter/test/flutter_secure_credentials_storage_test.dart +++ b/packages/login_client_flutter/test/flutter_secure_credentials_storage_test.dart @@ -1,26 +1,54 @@ import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:login_client_flutter/login_client_flutter.dart'; +// ignore: depend_on_referenced_packages - for testing credentials import 'package:oauth2/oauth2.dart'; // Mock FlutterSecureStorage for testing class MockFlutterSecureStorage extends FlutterSecureStorage { final Map _storage = {}; - const MockFlutterSecureStorage() : super(); - @override - Future read({required String key}) async { + Future read({ + required String key, + IOSOptions? iOptions, + AndroidOptions? aOptions, + LinuxOptions? lOptions, + WebOptions? webOptions, + MacOsOptions? mOptions, + WindowsOptions? wOptions, + }) async { return _storage[key]; } @override - Future write({required String key, required String value}) async { - _storage[key] = value; + Future write({ + required String key, + required String? value, + IOSOptions? iOptions, + AndroidOptions? aOptions, + LinuxOptions? lOptions, + WebOptions? webOptions, + MacOsOptions? mOptions, + WindowsOptions? wOptions, + }) async { + if (value == null) { + _storage.remove(key); + } else { + _storage[key] = value; + } } @override - Future delete({required String key}) async { + Future delete({ + required String key, + IOSOptions? iOptions, + AndroidOptions? aOptions, + LinuxOptions? lOptions, + WebOptions? webOptions, + MacOsOptions? mOptions, + WindowsOptions? wOptions, + }) async { _storage.remove(key); } } @@ -29,44 +57,31 @@ void main() { group('FlutterSecureCredentialsStorage', () { test('uses default storage when none provided', () { const storage = FlutterSecureCredentialsStorage(); - - // This test ensures the constructor works with no parameters + expect(storage, isA()); }); test('accepts custom storage instance', () { - const customStorage = MockFlutterSecureStorage(); - const storage = FlutterSecureCredentialsStorage(storage: customStorage); - - // This test ensures the constructor works with custom storage + final customStorage = MockFlutterSecureStorage(); + final storage = FlutterSecureCredentialsStorage(storage: customStorage); + expect(storage, isA()); }); test('works with custom storage - read/write/clear operations', () async { - const customStorage = MockFlutterSecureStorage(); - const storage = FlutterSecureCredentialsStorage(storage: customStorage); - - // Test initial read returns null + final customStorage = MockFlutterSecureStorage(); + final storage = FlutterSecureCredentialsStorage(storage: customStorage); + expect(await storage.read(), null); - - // Test saving and reading credentials + final credentials = Credentials('test_token'); await storage.save(credentials); - + final readCredentials = await storage.read(); expect(readCredentials?.accessToken, equals('test_token')); - - // Test clearing + await storage.clear(); expect(await storage.read(), null); }); - - test('maintains backward compatibility with default constructor', () async { - // This test verifies that existing code continues to work - const storage = FlutterSecureCredentialsStorage(); - - // Should be able to perform operations without error - expect(storage.read(), completes); - }); }); -} \ No newline at end of file +} From e49bf6611ca2e5ea612bb0f0bf1f8c93f612de78 Mon Sep 17 00:00:00 2001 From: Piotr Rogulski Date: Fri, 22 Aug 2025 12:00:03 +0200 Subject: [PATCH 07/14] Update comment --- .../test/flutter_secure_credentials_storage_test.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/login_client_flutter/test/flutter_secure_credentials_storage_test.dart b/packages/login_client_flutter/test/flutter_secure_credentials_storage_test.dart index 1ca2f57e..e5779a2b 100644 --- a/packages/login_client_flutter/test/flutter_secure_credentials_storage_test.dart +++ b/packages/login_client_flutter/test/flutter_secure_credentials_storage_test.dart @@ -1,7 +1,8 @@ import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:login_client_flutter/login_client_flutter.dart'; -// ignore: depend_on_referenced_packages - for testing credentials +// for testing credentials +// ignore: depend_on_referenced_packages import 'package:oauth2/oauth2.dart'; // Mock FlutterSecureStorage for testing From 7a3e6b1b308ccc5e7362668705f939704c3c572c Mon Sep 17 00:00:00 2001 From: Piotr Rogulski Date: Fri, 22 Aug 2025 12:06:09 +0200 Subject: [PATCH 08/14] Fix analysis issues --- packages/login_client_flutter/lib/login_client_flutter.dart | 2 +- packages/login_client_flutter/pubspec.yaml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/login_client_flutter/lib/login_client_flutter.dart b/packages/login_client_flutter/lib/login_client_flutter.dart index b38ab37d..5e72c652 100644 --- a/packages/login_client_flutter/lib/login_client_flutter.dart +++ b/packages/login_client_flutter/lib/login_client_flutter.dart @@ -16,6 +16,6 @@ /// /// See also: /// - https://github.com/mogol/flutter_secure_storage -library login_client_flutter; +library; export 'src/flutter_secure_credentials_storage.dart'; diff --git a/packages/login_client_flutter/pubspec.yaml b/packages/login_client_flutter/pubspec.yaml index de7c6771..5e4ba4cd 100644 --- a/packages/login_client_flutter/pubspec.yaml +++ b/packages/login_client_flutter/pubspec.yaml @@ -19,5 +19,4 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - custom_lint: ^0.6.4 - leancode_lint: ^12.0.0 + leancode_lint: ^16.0.0 From 1be10e1782b20bd180dbebd19ba4b88078c6ba5a Mon Sep 17 00:00:00 2001 From: Piotr Rogulski Date: Fri, 22 Aug 2025 12:12:06 +0200 Subject: [PATCH 09/14] Update workflows & SDK bounds --- .github/workflows/login_client_flutter-publish.yml | 4 ++-- .github/workflows/login_client_flutter-test.yml | 2 +- packages/login_client_flutter/pubspec.yaml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/login_client_flutter-publish.yml b/.github/workflows/login_client_flutter-publish.yml index e3c61b4a..c64fa6cf 100644 --- a/.github/workflows/login_client_flutter-publish.yml +++ b/.github/workflows/login_client_flutter-publish.yml @@ -24,12 +24,12 @@ jobs: - name: Set up Dart uses: dart-lang/setup-dart@v1 with: - sdk: 3.3 + sdk: 3.7 - name: Setup Flutter uses: subosito/flutter-action@v2 with: - flutter-version: '3.19.x' + flutter-version: '3.29.x' cache: true - name: Publish diff --git a/.github/workflows/login_client_flutter-test.yml b/.github/workflows/login_client_flutter-test.yml index 67c4c74f..909724fb 100644 --- a/.github/workflows/login_client_flutter-test.yml +++ b/.github/workflows/login_client_flutter-test.yml @@ -20,7 +20,7 @@ jobs: fail-fast: false matrix: include: - - version: '3.19.x' + - version: '3.29.x' defaults: run: diff --git a/packages/login_client_flutter/pubspec.yaml b/packages/login_client_flutter/pubspec.yaml index 5e4ba4cd..cfefcbed 100644 --- a/packages/login_client_flutter/pubspec.yaml +++ b/packages/login_client_flutter/pubspec.yaml @@ -7,8 +7,8 @@ description: >- for the login_client package. environment: - sdk: '>=3.0.0 <4.0.0' - flutter: '>=3.10.0' + sdk: '>=3.7.0 <4.0.0' + flutter: '>=3.29.0' dependencies: flutter: From 784bcd9ddec7781c7762eaad1e9af4af6ec2db82 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 22 Aug 2025 10:18:30 +0000 Subject: [PATCH 10/14] Update package version to 3.1.0 and add changelog entry for configurable FlutterSecureStorage feature Co-authored-by: PiotrRogulski <18120733+PiotrRogulski@users.noreply.github.com> --- packages/login_client_flutter/CHANGELOG.md | 3 +++ packages/login_client_flutter/pubspec.yaml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/login_client_flutter/CHANGELOG.md b/packages/login_client_flutter/CHANGELOG.md index 2937af25..db34a5ec 100644 --- a/packages/login_client_flutter/CHANGELOG.md +++ b/packages/login_client_flutter/CHANGELOG.md @@ -1,5 +1,8 @@ # Unreleased +# 3.1.0 + +- Add configurable `FlutterSecureStorage` support to `FlutterSecureCredentialsStorage`. The constructor now accepts an optional `storage` parameter, allowing users to provide a custom `FlutterSecureStorage` instance with platform-specific configuration options (e.g., iOS KeyChain accessibility settings). - Bump `leancode_lint` dev dependency to `12.0.0`. - Bump `custom_lint` dev dependency to `0.6.4`. diff --git a/packages/login_client_flutter/pubspec.yaml b/packages/login_client_flutter/pubspec.yaml index cfefcbed..d9f87072 100644 --- a/packages/login_client_flutter/pubspec.yaml +++ b/packages/login_client_flutter/pubspec.yaml @@ -1,5 +1,5 @@ name: login_client_flutter -version: 3.0.0 +version: 3.1.0 homepage: https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/login_client_flutter repository: https://github.com/leancodepl/flutter_corelibrary description: >- From 2f72c8a0013991f33a74a818c5e658d33b70420b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 22 Aug 2025 10:24:24 +0000 Subject: [PATCH 11/14] Update changelog to reflect actual dependency versions and SDK bounds Co-authored-by: PiotrRogulski <18120733+PiotrRogulski@users.noreply.github.com> --- packages/login_client_flutter/CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/login_client_flutter/CHANGELOG.md b/packages/login_client_flutter/CHANGELOG.md index db34a5ec..815615a6 100644 --- a/packages/login_client_flutter/CHANGELOG.md +++ b/packages/login_client_flutter/CHANGELOG.md @@ -3,8 +3,9 @@ # 3.1.0 - Add configurable `FlutterSecureStorage` support to `FlutterSecureCredentialsStorage`. The constructor now accepts an optional `storage` parameter, allowing users to provide a custom `FlutterSecureStorage` instance with platform-specific configuration options (e.g., iOS KeyChain accessibility settings). -- Bump `leancode_lint` dev dependency to `12.0.0`. -- Bump `custom_lint` dev dependency to `0.6.4`. +- Bump minimum Dart SDK version to `3.7.0`. +- Bump minimum Flutter version to `3.29.0`. +- Bump `leancode_lint` dev dependency to `16.0.0`. # 3.0.0 From 7f8af6b959dd7c489dcef4f0f10feca1053e18f9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 22 Aug 2025 10:35:15 +0000 Subject: [PATCH 12/14] Remove empty Unreleased section from changelog Co-authored-by: PiotrRogulski <18120733+PiotrRogulski@users.noreply.github.com> --- packages/login_client_flutter/CHANGELOG.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/login_client_flutter/CHANGELOG.md b/packages/login_client_flutter/CHANGELOG.md index 815615a6..8ac7ab91 100644 --- a/packages/login_client_flutter/CHANGELOG.md +++ b/packages/login_client_flutter/CHANGELOG.md @@ -1,5 +1,3 @@ -# Unreleased - # 3.1.0 - Add configurable `FlutterSecureStorage` support to `FlutterSecureCredentialsStorage`. The constructor now accepts an optional `storage` parameter, allowing users to provide a custom `FlutterSecureStorage` instance with platform-specific configuration options (e.g., iOS KeyChain accessibility settings). From 7da94881976e7062257f2348fb44e34d0693bc16 Mon Sep 17 00:00:00 2001 From: Piotr Rogulski Date: Fri, 22 Aug 2025 12:38:47 +0200 Subject: [PATCH 13/14] Export secure storage package --- .../lib/src/flutter_secure_credentials_storage.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/login_client_flutter/lib/src/flutter_secure_credentials_storage.dart b/packages/login_client_flutter/lib/src/flutter_secure_credentials_storage.dart index f1761de5..8372ded2 100644 --- a/packages/login_client_flutter/lib/src/flutter_secure_credentials_storage.dart +++ b/packages/login_client_flutter/lib/src/flutter_secure_credentials_storage.dart @@ -15,6 +15,8 @@ import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:login_client/login_client.dart'; +export 'package:flutter_secure_storage/flutter_secure_storage.dart'; + /// A `flutter_secure_storage` implementation of the [CredentialsStorage]. class FlutterSecureCredentialsStorage implements CredentialsStorage { /// Creates the [CredentialsStorage]. From c54640233bc55bcafd17a9b6a54fa15d1a0a2ec5 Mon Sep 17 00:00:00 2001 From: Piotr Rogulski Date: Fri, 22 Aug 2025 12:48:41 +0200 Subject: [PATCH 14/14] Remove import --- .../test/flutter_secure_credentials_storage_test.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/login_client_flutter/test/flutter_secure_credentials_storage_test.dart b/packages/login_client_flutter/test/flutter_secure_credentials_storage_test.dart index e5779a2b..6b62a21c 100644 --- a/packages/login_client_flutter/test/flutter_secure_credentials_storage_test.dart +++ b/packages/login_client_flutter/test/flutter_secure_credentials_storage_test.dart @@ -1,4 +1,3 @@ -import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:login_client_flutter/login_client_flutter.dart'; // for testing credentials