简体   繁体   English

在这种情况下,为什么我会收到 Bad state 错误?

[英]Why am I getting a Bad state error in this case?

I updated all my packages to the latest version and now I'm getting this error: Bad state: field does not exist within the DocumentSnapshotPlatform when fetching some data.我将我的所有包更新到最新版本,现在我收到此错误: Bad state: field does not exist within the DocumentSnapshotPlatform

I found some issues related to the same problem here but none solved my problem, most of them were related to changes on how DocumentSnapshot works and I probably must have missed something from the documentation that is causing this error.我在这里发现了一些与同一问题相关的问题,但都没有解决我的问题,其中大部分与 DocumentSnapshot 工作方式的更改有关,我可能一定是错过了导致此错误的文档中的某些内容。

Well, I'll put below where I think the problem is and the complete code.好吧,我会把我认为问题所在的地方和完整的代码放在下面。

I think the problem is here我认为问题出在这里

List<UserResult> searchResults = [];
 snapshot.data.docs.forEach((doc) {
  Users user = Users.fromDocument(doc);
  UserResult searchResult = UserResult(user);
  searchResults.add(searchResult);
});

Things I've tried and it didn't work我尝试过但没有用的东西

1: 1:

List<UserResult> searchResults = [];
  snapshot.data().docs.forEach((doc) {
  Users user = Users.fromDocument(doc);
  UserResult searchResult = UserResult(user);
  searchResults.add(searchResult);
 });

2: 2:

List<UserResult> searchResults = [];
  var item = snapshot.data();
   item.docs.forEach((doc) {
   Users user = Users.fromDocument(doc);
   UserResult searchResult = UserResult(user);
   searchResults.add(searchResult);
 });

For understanding为了理解

class _SearchState extends State<Search> {
  TextEditingController searchController = TextEditingController();
  Future<QuerySnapshot> searchResultsFuture;

  handleSearch(String query) {
      Future<QuerySnapshot> results =
          usersRef.where("tag", isEqualTo: query).get();

      setState(() {
        searchResultsFuture = results;
      });
  }

  buildResults() {
    return FutureBuilder(
      future: searchResultsFuture,
      builder: (context, snapshot) {
        if (snapshot.connectionState != ConnectionState.done) {
          return SizedBox(
              child: CircularProgressIndicator(),
            );
        }
        List<UserResult> searchResults = [];
        snapshot.data.docs.forEach((doc) {
          Users user = Users.fromDocument(doc);
          UserResult searchResult = UserResult(user);

          searchResults.add(searchResult);
        });
        return SingleChildScrollView(
          child: Column(
            children: searchResults,
          ),
        );
      },
    );
  }

  buildNoContent() {
    return Container();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Container(
            child: SingleChildScrollView(
              child: Column(
                children: <Widget>[
                  Center(
                    child: Text(
                        "Type something",
                      ),
                    ),
                  TextFormField(
                    enableInteractiveSelection: true,
                    controller: searchController,
                    keyboardType: TextInputType.text,
                    onFieldSubmitted: handleSearch(searchController.text),
                  ),
                  
                  searchResultsFuture == null
                      ? buildNoContent()
                      : buildResults(),
                ],
              ),
            ),
      ),
    );
  }
}

fromDocument method从文档方法

import 'package:cloud_firestore/cloud_firestore.dart';

class Users {
  String id;
  String email;
  String tag;

  Users(
      {this.id,
      this.email,
      this.tag});

  factory Users.fromDocument(DocumentSnapshot doc) {
    return Users(
        id: doc.id,
        email: doc['email'],
        tag: doc['tag']);
  }
}

Change改变

FutureBuilder(

To

FutureBuilder<QuerySnapshot>(

And in your factory method, do the this:在您的工厂方法中,执行以下操作:

factory Users.fromDocument(DocumentSnapshot doc) {
    return Users(
        id: doc.id,
        email: doc.data()['email'],
        tag: doc.data()['tag']);
  }

After trying a ton of combinations, this worked:在尝试了大量的组合之后,这奏效了:

fromDocument method从文档方法

import 'package:cloud_firestore/cloud_firestore.dart';

class Users {
  String id;
  String email;
  String tag;

  Users(
      {this.id,
      this.email,
      this.tag});

  factory Users.fromDocument(DocumentSnapshot<Map<String, dynamic>> doc) {
    return Users(
        id: doc.id,
        email: doc.data()['email'],
        tag: doc.data()['tag']);
  }
}

FutureBuilder未来建造者

class _SearchState extends State<Search> {
  TextEditingController searchController = TextEditingController();
  Future<QuerySnapshot<Map<String, dynamic>>> searchResultsFuture;

  handleSearch(String query) {
      Future<QuerySnapshot> results =
          usersRef.where("tag", isEqualTo: query).get();

      setState(() {
        searchResultsFuture = results;
      });
  }

  buildResults() {
    return FutureBuilder<QuerySnapshot<Map<String, dynamic>>>(
      future: searchResultsFuture,
      builder: (context, snapshot) {
        if (snapshot.connectionState != ConnectionState.done) {
          return SizedBox(
              child: CircularProgressIndicator(),
            );
        }
        List<UserResult> searchResults = [];
        snapshot.data.docs.forEach((doc) {
          Users user = Users.fromDocument(doc);
          UserResult searchResult = UserResult(user);

          searchResults.add(searchResult);
        });
        return SingleChildScrollView(
          child: Column(
            children: searchResults,
          ),
        );
      },
    );
  }

Basically I just added the <Map<String, dynamic>>基本上我只是添加了 <Map<String, dynamic>>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 为什么我没有从反应 redux state 获得更新的值 - Why I am not getting the updated value from react redux state 为什么我在 iOS(颤振应用程序)中收到 Firebase AppCheck 错误 - Why am I getting a Firebase AppCheck error in iOS (Flutter app) 为什么我在使用 firebase 时收到尝试导入错误? - Why am I getting the attempted import error when using firebase? 为什么我在使用 Compute Engine 时遇到错误 - Why am I getting an error using Compute Engine 为什么在 Google BigQuery 上安排查询时出现错误? - Why am I getting an error when scheduling a query on Google BigQuery? 为什么我在此代码中收到类型不匹配错误? - Why am I getting a type mismatch error in this code? 为什么我在 git 结帐时收到文件丢失的错误消息? - Why am I getting an error that file is missing on git checkout? 为什么在运行以下 SQL 代码时出现错误 - Why am I getting an error while running the following SQL code firebase.database 不是 function 为什么我在反应本机应用程序中收到此错误? - firebase.database is not a function why I am getting this error in react native app? 为什么在使用 dynamodb 和 s3 存储桶创建 lambda 函数时出现 IamRoleLambdaExecution 错误? - Why I am getting IamRoleLambdaExecution error when creating a lambda function with dynamodb and s3 bucket?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM