dart 如何在flutter中解密对象`Instance of 'DocumentList'`

u59ebvdq  于 2023-09-28  发布在  Flutter
关注(0)|答案(1)|浏览(75)

在我的Flutter项目中,我使用Appwrite作为数据库(Firebase的替代)。
当我试图获取collection时,它返回Instance of 'DocumentList',但我无法将对象解密为json格式。
代码如下:

import 'package:appwrite/appwrite.dart';

void main() { // Init SDK
  Client client = Client();
  Databases databases = Databases(client);

  client
    .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
    .setProject('5df5acd0d48c2') // Your project ID
  ;
  Future result = databases.listDocuments(
    databaseId: '[DATABASE_ID]',
    collectionId: '[COLLECTION_ID]',
  );

  result
    .then((response) {
      print(response);     // Instance of 'DocumentList'
    }).catchError((error) {
      print(error.response);
  });
}

以下是DocumentList的格式:

{
    "total": 5,
    "documents": [
        {
            "$id": "5e5ea5c16897e",
            "$collectionId": "5e5ea5c15117e",
            "$databaseId": "5e5ea5c15117e",
            "$createdAt": "2020-10-15T06:38:00.000+00:00",
            "$updatedAt": "2020-10-15T06:38:00.000+00:00",
            "$permissions": [
                "read(\"any\")"
            ]
        }
    ]
}

如何处理对象和解密模型的响应?请帮帮忙。

wgeznvg7

wgeznvg71#

DocumentList的源代码是:

class DocumentList implements Model {
    /// Total number of documents documents that matched your query.
    final int total;
    /// List of documents.
    final List<Document> documents;

    DocumentList({
        required this.total,
        required this.documents,
    });

    // omitted for brevity
}

如您所见,它有一个documents属性,因此您可以像response.documents一样访问它。
Document的源代码是:

class Document implements Model {
    /// Document ID.
    final String $id;
    /// Collection ID.
    final String $collectionId;
    /// Database ID.
    final String $databaseId;
    /// Document creation date in ISO 8601 format.
    final String $createdAt;
    /// Document update date in ISO 8601 format.
    final String $updatedAt;
    /// Document permissions. [Learn more about permissions](/docs/permissions).
    final List $permissions;
    final Map<String, dynamic> data;

    Document({
        required this.$id,
        required this.$collectionId,
        required this.$databaseId,
        required this.$createdAt,
        required this.$updatedAt,
        required this.$permissions,
        required this.data,
    });

    // omitted for brevity
}

Document中,有一个data属性,它包含您添加到Collection中的自定义属性。因此,(假设response.documents至少有1个Document,并且Collection有一个Attribute,其键为myCustomAttribute),您可以执行response.documents.first.data['myCustomAttribute']
与您使用的任何软件包或语言一样,请确保:
1.使用IDE的autocomplete/intellisense获取有关您正在使用的任何内容的更多信息。您的IDE还应该能够非常容易地深入到类的源代码中
1.可以使用调试器设置断点并检查对象以查看内部内容以及如何使用它们
1.阅读文档和/或API参考
顺便说一下,你只“解密”加密的东西。通常,API会返回一个JSON字符串,您可以对其进行“解码”,将其从字符串转换为Map。

相关问题