TL;DR;
ガイド通りに設定したのにNo builder registered for SecureStorageInterface
ってエラーが出てよくわかりませんでした。
Authのplugin追加時にストレージのオプションを設定して解決できました。
AmplifyAuthCognito authPlugin = AmplifyAuthCognito(
secureStorageFactory: AmplifySecureStorage.factoryFrom(
webOptions: WebSecureStorageOptions(
persistenceOption: WebPersistenceOption.inMemory,
),
),
);
await Amplify.addPlugins([
authPlugin,
]);
iOSとAndroidだけのプロジェクトであっても、storageFactoryの指定が必要なので、必要ないwebのオプションだけ指定して追加する必要がある。
はまったこと
Amplifyのガイドには「iOSはxxx, Androidはxxxが利用されます。カスタマイズしたい人はオプションでオーバーライドしてね。」というな書き方がされているので、それに従ってプラグインの追加だけの実装をしたら以下のエラーが発生しました。
CredentialStoreStateMachine | Emitted error: Bad state: No builder registered for SecureStorageInterface
SecureStorageの保存先が定義されていないというような内容
解決した内容
flutterのamplify_auth_cognitoの実装サンプルに丁寧にコメントされてました。
今回のプロダクトはiOSとAndroidだけのビルドだけで、Flutterのデフォルトの実装(ios=keychain, android=EncryptedSharedPreferences)で問題ないので個別の設定は不要なのですが、SecureStorageのファクトリーをなにかしら指定しないと落ちるので、適当にダミーで一番手っ取り早いwebのオプションを指定して回避できました。
AmplifyAuthCognito authPlugin = AmplifyAuthCognito(
secureStorageFactory: AmplifySecureStorage.factoryFrom(
webOptions: WebSecureStorageOptions(
persistenceOption: WebPersistenceOption.inMemory,
),
),
);
await Amplify.addPlugins([
authPlugin,
]);
Flutterに関してはAmplifyに関することであってもFlutterのドキュメントの方がよく書かれている印象です。
困ったらFlutterのドキュメントを漁りましょう。