質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

解決済

【Flutter】 Sharedpreferencesの値がnullの場合の分岐が、分岐しない

my0930
my0930

総合スコア19

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

2回答

0リアクション

0クリップ

194閲覧

投稿2022/09/26 06:39

編集2022/09/26 06:42

前提

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

class SharedPrefs { static SharedPreferences? _preferences; static Future<void> setPrefsInstance() async { //インスタンス生成 _preferences ??= await SharedPreferences.getInstance(); } //端末に書き込む static Future<void> setUid(String uid) async { await _preferences!.setString("uid", uid); } //読み込む static fetchUid() { return _preferences!.getString("uid") ?? null; } static revomeUid() { return _preferences?.remove("uid"); } }

provider.model

class Provider extends ChangeNotifier { Future checkRole() async { String? role; final SharedUid = SharedPrefs.fetchUid(); print("firebaseのuidは"); print(uid); print(uid.runtimeType); print("shredprefeceのuidは"); print(SharedUid); print(SharedUid.runtimeType); if (SharedUid != null || SharedUid != "" || SharedUid != "null") { final DocumentSnapshot? sharedprefdocumentSnapshot = await FirebaseFirestore.instance .collection("users") .doc(SharedUid) .get(); print("このユーザーのfirebaseの値のroleは"); print(role); role = sharedprefdocumentSnapshot?["role"]; //ここでビルドが止まり、記載のエラー文が出ます。 } else if (SharedUid == null ||     SharedUid == "" ||     SharedUid == null.toString()) { print("uidはセットしました"); SharedPrefs.setUid(uid.toString()); print(uid); } } }

試したこと

if分岐の際、型がStringなのでnullと読み込まない原因かと考えて、変換しましたが
しっかり分岐してくれません。

補足情報(FW/ツールのバージョンなど)

Flutter 3.0.5

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。