1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

FlutterでStateError (Bad state: field does not exist within the DocumentSnapshotPlatform)に出会った(初心者)

Posted at

はじめに

こちらはFlutter超初心者がサンプル脳死タイピングの末に数時間を無駄にしたという、
とっても怖い実体験から次なる犠牲者(未来の自分)を救済するための覚書です。
大したことは書いていません。

起こったこと

ネット上に落ちてるチュートリアル的な記事を読みながら写経(ほぼ脳死)をしていたとき、
Firestoreからデータを取ってくる処理を実行したところで

StateError (Bad state: field does not exist within the DocumentSnapshotPlatform)

って言われた。

解決策

数時間ググっても何もわからず、ふとコードとFirestoreのコンソールとを見比べてみた。
すると、、、

main.dart
  return ListView(
    children: docs.map((doc) {
      if (doc == null) {
        return const Card(
          child: Text('No posts'),
        );
      }
    
      var email = doc['email'];
      var text = doc['text']; <- ここ
    
      return Card(
        child: ListTile(
          title: Text(text),
          subtitle: Text(email),
          trailing: email == user?.email
              ? IconButton(
                  icon: const Icon(Icons.delete),
                  onPressed: () async {
                    db.doc(doc.id).delete();
                  },
                )
              : null,
        ),
      );
}).toList());

Firestoreのスクショ

スクリーンショット 2022-08-21 22.28.43.png

んんっ???message????

ということで、textなんて名前のフィールドは存在せず、それを取ってくるなんてできるはず無いわけで、、、
結論、確認はしっかりしましょうというお話でした。
その後、書き込みと読み込みの処理でフィールドの名前を統一したら何事もなかったかのように普通に動きました。

なぜこんなことが起きたのか?

実はサンプルの写経中に、「こんなことはできるのかな?」とか思いつきで追加機能を考えて、
それをまた脳死で写して、ということをしていました。
結果、単に文字列を保存する名前に「message」と「text」の2つが混在しているのに気づかず、動作させて初めてバグに気が付いたのです。
こんなしょうもないミスで数時間も無駄にした人もいるらしいので皆さんは気をつけるようにしましょう!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?