首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flutter SQFLITE turn Future List itterable

Flutter SQFLITE turn Future List itterable
EN

Stack Overflow用户
提问于 2021-01-23 20:16:08
回答 1查看 63关注 0票数 0

我正在为从DatabaseHelper和Sqflite返回数据而苦苦挣扎。

这就是我查询数据的方式:

代码语言:javascript
复制
Future<List<Message>> getMessages() async {
    final Database db = await database;
    final List<Map<String, dynamic>> maps = await db.query(table);
    
    return List.generate(maps.length, (i)  {
      return Message(
          sender: maps[i]['sender'],
          message: maps[i]['message'],
          date: maps[i]['date']
          );
    });
  }

在我的主要代码中,我希望能够迭代它,因为我调用了另一个类来格式化我的消息。

代码语言:javascript
复制
class MessageBubble extends StatelessWidget {
  MessageBubble({this.sender, this.message, this.date, this.picture, this.isMe});

  final String message;
  final String sender;
  final String date;
  final Uint8List picture;
  final bool isMe;
....
}

所以我需要能够构建我的ListView生成器,但是我不知道在这里要做什么。如何在为每个返回的行调用MessageBubble的同时遍历Future?

代码语言:javascript
复制
class ChatScreen extends StatefulWidget {
  @override
  _ChatScreenState createState() => _ChatScreenState();
}

class _ChatScreenState extends State<ChatScreen> {

  var dbhelper = DatabaseHelper.instance;

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: Scaffold(
        appBar: AppBar(
        title: Text('Chat Screen'),
      ),
      body: new Container(
        padding: new EdgeInsets.all(16.0),
        child: new FutureBuilder<List<Message>>(
          future: dbhelper.getMessages(),
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              return new ListView.builder(
                itemCount: snapshot.data.length,
                  itemBuilder: (context, index) {
                  //this is the section I dont' know how to handle
                  for (var m in snapshot.data){
                    MessageBubble(sender: m['sender']),
                  }
                    
                  );
                  });
            }
            return new Container(alignment: AlignmentDirectional.center
              ,);
          },
        ),
      )
    )
    );
  }
}
EN

回答 1

Stack Overflow用户

发布于 2021-01-23 22:48:43

我通过这样做得到了答案:

代码语言:javascript
复制
 if (snapshot.hasData) {
                    new ListView.builder(
                      itemCount: snapshot.data.length,
                      itemBuilder: (context, index) {
                        bubs.add(MessageBubble(
                               sender: snapshot.data[index].sender,
                                 message: snapshot.data[index].message,
                                 date: snapshot.data[index].date));
                        return ListView(
                          children:
                            bubs,
                        );
                      },
                    );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65859094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档