前提
Sharedpreferencesを使って値が保存されているかどうかの分岐を作りましたが、
nullの値が返ってくるのにもかかわらず、
null分岐のほうに流れてくれません。
nullじゃなかったらnullじゃない場合の変数を用いてfirebaseから値を持ってきたいのですが
nullなのにnullじゃないほうに流れてエラーになります。
実現したいこと
nullの場合は、if(sharedprefs == null)以下に、
nullじゃない場合はif(sharedprefs != null)以下に流れてほしい。
発生している問題・エラーメッセージ
例外が発生しました
StateError (Bad state: cannot get a field on a DocumentSnapshotPlatform which does not exist)
該当のソースコード
SharedPrefs
1class SharedPrefs { 2 static SharedPreferences? _preferences; 3 4 static Future<void> setPrefsInstance() async { 5 //インスタンス生成 6 _preferences ??= await SharedPreferences.getInstance(); 7 } 8 9 //端末に書き込む 10 static Future<void> setUid(String uid) async { 11 await _preferences!.setString("uid", uid); 12 } 13 14 //読み込む 15 static fetchUid() { 16 return _preferences!.getString("uid") ?? null; 17 } 18 19 static revomeUid() { 20 return _preferences?.remove("uid"); 21 } 22} 23
provider.model
1class Provider extends ChangeNotifier { 2Future checkRole() async { 3 4 String? role; 5 6 final SharedUid = SharedPrefs.fetchUid(); 7 8 print("firebaseのuidは"); 9 print(uid); 10 print(uid.runtimeType); 11 12 print("shredprefeceのuidは"); 13 print(SharedUid); 14 print(SharedUid.runtimeType); 15 16 if (SharedUid != null || SharedUid != "" || SharedUid != "null") { 17 final DocumentSnapshot? sharedprefdocumentSnapshot = 18 await FirebaseFirestore.instance 19 .collection("users") 20 .doc(SharedUid) 21 .get(); 22 23 print("このユーザーのfirebaseの値のroleは"); 24 print(role); 25 26 role = sharedprefdocumentSnapshot?["role"]; 27 //ここでビルドが止まり、記載のエラー文が出ます。 28 29 30 } else if (SharedUid == null || 31 SharedUid == "" || 32 SharedUid == null.toString()) { 33 34 print("uidはセットしました"); 35 SharedPrefs.setUid(uid.toString()); 36 print(uid); 37 38 } 39 } 40} 41
試したこと
if分岐の際、型がStringなのでnullと読み込まない原因かと考えて、変換しましたが
しっかり分岐してくれません。
補足情報(FW/ツールのバージョンなど)
Flutter 3.0.5
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。