Flutter SqlBrite not rebuilding streambuilder list
131
If you are facing this problem use the moor library sqlbrite won't work but this is a link to help.... https://resocoder.com/2019/06/26/moor-room-for-flutter-tables-queries-fluent-sqlite-database/
Matt Rešetár explains in detail so it will be easy to implement...
Author by
Admin
Updated on December 01, 2022Comments
-
Admin 12 months
I am trying to build a chat storage system with firebase, sqlite and sqlBrite. The aim of this is to stream the newmessages without having to rebuild the page. The stream from sqlBrite is only rebuilding on setstate eg.when the keyboard is drawn back.
How can i get the stream to automatically update on save.
The db document
///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, ])});
provider document
///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);}
The ui side
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], ); }); })
So the new texts keep coming only when the page rebuilds in some sort of way. Any help rendered is appreciated.