当前位置: 首页 > 知识库问答 >
问题:

Flutter Dart-class没有实例getter。FutureBuilder回报

宫亦
2023-03-14

你能帮我解决这个问题吗?我试图从存储在sqflite中的数据返回一个FutureBuilder,返回它并用它构建一个小部件列表,但我遇到了一个小问题,我不知道如何以正确的方式返回列表:

我得到的错误是:

下面是我的消息类:

import "dart:convert";

List<Message> messageFromJson(String str) =>
    List<Message>.from(json.decode(str).map((x) => Message.fromJson(x)));

String messageToJson(List<Message> data) =>
    json.encode(List<dynamic>.from(data.map((x) => x.toJson())));

class Message {
  String message;
  String sender;
  String date;
  String contactID;
  Message({this.sender, this.message, this.date, this.contactID});

  factory Message.fromJson(Map<String, dynamic> json) => Message(
      message: json['message'],
      sender: json['sender'],
      date: json['date'],
      contactID: json['contactID'],
  );

  Map<String, dynamic> toJson() => {
    "message": message,
    "sender" : sender,
    "date" : date,
    "contactID" : contactID
  }; 
}

我是这样称呼它的。我的问题在于我调用并试图使用快照数据的地方。然后我实例化BeautifulBubble类,我认为这是可以的。

body: new FutureBuilder(
    future: dbHelper.getMessages(0),
    builder: (context, snapshot) {
      if (!snapshot.hasData) {
        return Center(
          child: CircularProgressIndicator(
            backgroundColor: Colors.lightBlueAccent,
          ),
        );
      }
    //Todo: Figure out how to call this:
      final messages = snapshot.data.messageToJson;
      List<BeautifulChatBubble> messageBubs = [];
      for (var message in messages.toJson().values) {
        final senderText = message.data['sender'];
        final messageText = message.data['message'];
        final dateText = message.data['date'];
        final contactIDText = message.data['contactID'];

        final messagebubble = BeautifulChatBubble(
          sender: senderText,
          text: messageText,
          date: dateText,
          isMe: false,
        );
        messageBubs.add(messagebubble);
      }
      return Expanded(
        child: ListView(
          reverse: true,
          padding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 20.0),
          children: messageBubs,
        ),
      );
    }

  )

同时添加dbhelper.getmessages

  Future<List<Message>> getMessages(int chatid) async {
    final db = await database;
    final res = await db.query(messagetable, where: '$columnChatID = ?', whereArgs: [chatid]);
    List<Message> messagelist =
        res.isNotEmpty? res.map((c) => Message.fromJson(c)).toList() : [] ;

    return messagelist;
  }

共有1个答案

颛孙和颂
2023-03-14

getMessages()方法返回实体列表,而不是单个实体。在您的案例中,数据库将数据解析到Message类,您应该将FutureBuilder中的数据操作为Message类实例。

dart prettyprint-override">final messages = snapshot.data;
List<BeautifulChatBubble> messageBubs = [];
for (var message in messages) {
  final senderText = message.sender;
  final messageText = message.message;
  final dateText = message.date;
  final contactIDText = message.contactID;

  final messagebubble = BeautifulChatBubble(
    sender: senderText,
    text: messageText,
    date: dateText,
    isMe: false,
  );
  messageBubs.add(messagebubble);
}
 类似资料:
  • 我是从火神那里收取数据的,我有这个,我是火神的新手,我知道的不多,所以你能帮我吗? 错误是这样的:类'AsyncSnapshot'没有实例getter'docs'。接收器:'AsyncSnapshot'的实例尝试调用:docs

  • 我的代码中有两个流,第一个是从朋友列表中获取用户ID,第二个流是使用ID列表在Firebase中搜索用户ID的文档。 这是火力恢复代码。 我不知道为什么会发生这种情况,因为我可以显示id列表。我曾尝试将更改为,但也会产生相同的错误。 编辑:

  • 我有一个应用程序,我想从Firestore数据库中检索uid文档中表示的消息,如下所述,这些消息存储如下:聊天室- 但我收到以下错误: 生成StreamBuilder时引发了以下NoSuchMethodError(脏,状态:\u StreamBuilderBaseState 导致错误的相关小部件是:StreamBuilderfile:///Users/ahmedhussain/Downloads/

  • 我正在遵循一个教程,试图创建一个水平的SingleChildScrollView,它包含带有产品描述的对象和带有两个小数的货币+价格标签。实现NumberFormat.Currency方法返回一个错误:NosuchMethodeRorr类“String”没有实例getter“is negal” 有人能帮助理解为什么它不拉“价格”价值吗?如果我对其进行硬编码,并为最终的双倍价格赋值=IE:29.90

  • 我想显示某个区域内的用户,但使用地理查询我得到一个错误 “类别”列表 接收器:实例(长度:1)的'_GrowableList' 尝试调用:文档

  • 我最近开始使用Firebase fiRecovery,这是一个我似乎找不到答案的错误,我在查看类似问题的答案后尝试将snapshot.data.documents编写为文档、文档和文档,但它仍然抛出相同的错误。我该怎么办?我正在使用的fiRecovery版本是cloud_firestore:^1.0.7 它引发的异常