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

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

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

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

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Dart

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

Q&A

1回答

1123閲覧

Flutter Firestore 存在しないフィールドを取得するとエラーとなる回避方法

sssyyy

総合スコア1

Flutter

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

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Dart

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

0グッド

0クリップ

投稿2022/09/25 13:38

複数のドキュメントの中でフィールドが足りない場合、
リスト表示使用とすると以下のようなエラーになります。

field does not exist within the DocumentSnapshotPlatform

以下のようなデータ構造となっていることを想定しています。
ドキュメント1
-id
-name

ドキュメント2
-id
-name

ドキュメント3
-id

この場合ドキュメント3のnameが取得できずエラーとなっています。
この回避方法を知りたいです。
よろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

参考ページ
https://stackoverflow.com/questions/64949640/flutter-unhandled-exception-bad-state-field-does-not-exist-within-the-documen
一応この方法でエラーが出なくなりました。よろしければ参考にされてください。

コレクション"Japan"のデータ
ドキュメント "Chiba" フィールド"title": "千葉県"
ドキュメント "Saitama" フィールド"title": "埼玉県"
ドキュメント "Tokyo" フィールド無し

画面表示
千葉県
埼玉県
title not found

import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'package:flutter/src/foundation/key.dart'; import 'package:flutter/src/widgets/framework.dart'; import 'package:provider/provider.dart'; import 'firebase_options.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); runApp(MaterialApp(home: MyApp())); } class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( body: Nihon(), ); } } class Nihon extends StatefulWidget { @override State<Nihon> createState() => _NihonState(); } class _NihonState extends State<Nihon> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("日本"), ), body: ChangeNotifierProvider<ProductListModel>( create: (_) => ProductListModel()..getProducts(), child: Consumer<ProductListModel>( builder: (context, model, child) { final products = model.products; if(products.isEmpty){ return CircularProgressIndicator(); } return SafeArea( child: Column(children: <Widget>[ Text(products[0].title), Text(products[1].title), Text(products[2].title), ]), ); }, ), ), ); } } class ProductModel { String title; ProductModel( this.title, ); } class ProductListModel extends ChangeNotifier { List<ProductModel> products = []; Future getProducts() async { var collection = await FirebaseFirestore.instance.collection("Japan").get(); products = //↓(A)これだと'title'フィールドが無い場合(Tokyo)にエラーが出る。 //collection.docs.map((doc) => ProductModel(doc['title'])).toList(); //↓(B)これだとエラーが出ない。 collection.docs.map((doc){ return doc.data().containsKey('title') ? ProductModel(doc['title']) : ProductModel('title nof found'); }).toList(); this.products = products; notifyListeners(); } }

投稿2022/10/01 05:57

moriman

総合スコア615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問