Room.hasNewMessages invoke some heavy CPU function like FromJson (noticed from flutter run -d android --profile, CPU profiler), so using FutureBuilder to wrap it, and the room.isDirectChat will query all rooms which is slow too but it won't change at one render frame so make it as a temporary variable which may help.
ChatListItem still will cost 80ms sometime, hope it will be solve latter.
Room.hasNewMessages invoke some heavy CPU function like FromJson (noticed from flutter run -d android --profile, CPU profiler), so using FutureBuilder to wrap it, and the room.isDirectChat will query all rooms which is slow too but it won't change at one render frame so make it as a temporary variable which may help.