flutter_secure_storage icon indicating copy to clipboard operation
flutter_secure_storage copied to clipboard

Delete All Not working in Version 9.2.4 in iOS simulator 18.2

Open 2kjm opened this issue 10 months ago • 8 comments

I'm encountering an issue with Flutter Secure Storage 9.2.4. When I use the deleteAll function, it doesn't delete any data and doesn't show any error messages. This was working perfectly in version 9.0.0.

I'm testing this on an iPhone 16 Plus simulator. iOS version 18.2. No issues were noticed on my real device iPhone 11 running iOS 18.1.1.

Has anyone else experienced this or have any suggestions on how to fix it?

This is my code

class SecureStorageService {
  late FlutterSecureStorage storage;

  SecureStorageService() {
    storage = const FlutterSecureStorage();
  }

  Future<bool> _write(String key, String value) async {
    try {
      await storage.write(key: key, value: value);
      return true;
    } catch (e, st) {
      LoggingHelper.error(
          errorMessage: 'Error in writing $key', error: e, stackTrace: st);
      return false;
    }
  }

  Future<String?> _read(String key) async {
    try {
      return await storage.read(key: key);
    } catch (e, st) {
      LoggingHelper.error(
          errorMessage: 'Error in reading $key', error: e, stackTrace: st);
      return null;
    }
  }

  // ignore: unused_element
  Future<bool> _delete(String key) async {
    try {
      await storage.delete(key: key);
      return true;
    } catch (e, st) {
      LoggingHelper.error(
          errorMessage: 'Error in deleting $key', error: e, stackTrace: st);
      return false;
    }
  }

  Future<bool> deleteAll() async {
    try {
      await storage.deleteAll();
      return true;
    } catch (e, st) {
      LoggingHelper.error(
          errorMessage: 'Error in deleting all', error: e, stackTrace: st);
      return false;
    }
  }
}

2kjm avatar Jan 20 '25 03:01 2kjm

Hi, i have tried your code, but i can't reproduce the behavior. Do you have any aditional steps i can take in order to reproduce this?

I have tried it with the example app, pinning the version to 9.0.0 and then adding items, then pinning the version to 9.2.4 and delete all works just fine.

juliansteenbakker avatar Jan 26 '25 16:01 juliansteenbakker

I changed the default iOS options somewhere in between and reverted back as below

 storage = const FlutterSecureStorage(iOptions: IOSOptions(accessibility: KeychainAccessibility.first_unlock,synchronizable:true )

Going back to 9.0.0 fixes this issue.

2kjm avatar Jan 27 '25 07:01 2kjm

So you saved some items in 9.0.0, then added storage = const FlutterSecureStorage(iOptions: IOSOptions(accessibility: KeychainAccessibility.first_unlock,synchronizable:true ) and upgraded to 9.2.4, and then deleteAll isn't working?

juliansteenbakker avatar Jan 27 '25 07:01 juliansteenbakker

yes.

2kjm avatar Jan 27 '25 08:01 2kjm

Same here on physical IOS device. I originally had: secureStorage = const FlutterSecureStorage(); And I saved my access tokens to key "access_token"

Then I realized I needed to add iOptions for my app to work properly, So I changed the code to

final secureStorage = const FlutterSecureStorage(
    iOptions: IOSOptions(
      accessibility: KeychainAccessibility.first_unlock_this_device,
      synchronizable: true
    )
  );

Now I can't delete the data stored with key "access_token" I tried both

await secureStorage.deleteAll();
await secureStorage.delete(key: "heyring_access_token");

I also tried re-initializing secureStorage = const FlutterSecureStorage(); Then tried deleteAll() and delete(...), but still no luck!

youngjun625 avatar Mar 17 '25 11:03 youngjun625

I'm facing a similar issue.

I have two instances of FlutterSecureStorage:

secureStorage1 = const FlutterSecureStorage();
secureStorage2 = const FlutterSecureStorage(
  iOptions: IOSOptions(
    accessibility: KeychainAccessibility.first_unlock_this_device,
  ),
);

There are some keys that were written using secureStorage1, but they are not being deleted when I call secureStorage2.deleteAll(). If I write and delete keys using the same instance, or if I make the constructors identical, it works as expected. Is this expected behaviour?

We recently upgraded the package from v8.1.0 to v9.2.4, and that's when we started noticing this behaviour.

I'm thinking of writing a migration script to handle this, or downgrade the version as suggested in other similar issues in this repository. However, it would be best to know if we can expect a fix for this from the maintainer.

Update: Works fine after downgrading to v9.0.0

ashilkn avatar Apr 04 '25 03:04 ashilkn

⚠️ This issue has been marked as stale because it has been open for 60 days with no activity.

If this issue is still relevant, please comment to keep it active. Otherwise, it will be closed in 60 days.

github-actions[bot] avatar Jun 04 '25 03:06 github-actions[bot]

Any updates?

2kjm avatar Jun 04 '25 03:06 2kjm

⚠️ This issue has been marked as stale because it has been open for 60 days with no activity.

If this issue is still relevant, please comment to keep it active. Otherwise, it will be closed in 60 days.

github-actions[bot] avatar Aug 04 '25 03:08 github-actions[bot]

I got rid of this and other typical issues by switching to flutter_secure_storage and flutter_secure_storage_darwin develop branches. There are many pr fixes that not available on pub dev

equescodebelike avatar Sep 09 '25 12:09 equescodebelike