首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤振SqlBrite不重建流构建器列表

颤振SqlBrite不重建流构建器列表
EN

Stack Overflow用户
提问于 2021-08-27 09:50:16
回答 1查看 186关注 0票数 1

我正在试图建立一个聊天存储系统与防火墙,sqlite和sqlBrite。这样做的目的是在不需要重新构建页面的情况下流新消息。来自sqlBrite的流只是在setstate eg.when上重建,键盘被拉回。

如何使流在保存时自动更新。

数据库文档

代码语言:javascript
复制
///INSERT INTO DB
    Future<int> insertNewMessage(String id, int result, BriteDatabase briteDb,
          Map<String, dynamic> row) async {
        messageList.add(id);
    
        await ifexists(id, messageId, briteDb)
            ? print('message already In')
            : result = await briteDb.insert(messageTable, row);
        return result;
      }

////STREAM MESSAGES
    Stream<List<Map<String, dynamic>>> getMessageMapListbyId(
          {String sendId, String receiveId, database}) async* {
        try {
          BriteDatabase briteDb = await database;
        yield* briteDb.createQuery(messageTable,
                  distinct: false,
                  where:
                      ' $senderId=? $receiverId = ? ',
                  whereArgs: [
                      sendId,
                      receiverId,
                    ])});

提供程序文档

代码语言:javascript
复制
///ADD MESSAGES
    addMessageTodb(message) async {
        await ldbH
            .msg_insertMessage(
                message.id, modelFuncs.messageMaping(message, msgFuncs))
            .then((value) async {
         
          await getMessageYieldBase(message.senderId, message.receiverId);
        });}

    ///STREAM NEW DATA
getMessageYieldBase(senderId, receiverId) async* {
        yield* ldbH.msg_getAllMessagesbyId(senderId, receiverId);}

ui端

代码语言:javascript
复制
StreamBuilder(
            stream: messageStream.getMessageYieldBase(
                widget._currentUserId, widget.receiver.uid),
            builder: (context, AsyncSnapshot<dynamic> snapshot) {
              var d = snapshot.data;
              var newList = snapshot.hasData ? d.reversed.toList() : [];
              return
                 
                  ListView.builder(
                      reverse: true,
                      padding: EdgeInsets.all(10),
                      controller: widget._listScrollController,
                      itemCount: newList.length,
                      itemBuilder: (BuildContext context, int index) {
                        

                        return DisplayMessage(
                          currentUserId: widget._currentUserId,
                          receiver: widget.receiver,
                          message: newList[index],
                        );
                      });
            })

因此,只有当页面以某种方式重新构建时,新文本才会不断出现。任何提供的帮助都将受到感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-03 13:54:49

如果您正面临这个问题,请使用沼泽地库sqlbrite将无法工作,但这是一个帮助.https://resocoder.com/2019/06/26/moor-room-for-flutter-tables-queries-fluent-sqlite-database/

Matt Rešetár解释得很详细,所以很容易实现.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68951375

复制
相关文章

相似问题

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