feat: Rate limit streams so that large accounts have a smoother UI
This commit is contained in:
parent
b225f9c2c8
commit
7e1e4e4844
4 changed files with 62 additions and 6 deletions
|
|
@ -9,6 +9,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:vrouter/vrouter.dart';
|
||||
import '../../widgets/matrix.dart';
|
||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||
import '../../utils/stream_extension.dart';
|
||||
|
||||
class ChatListView extends StatelessWidget {
|
||||
final ChatListController controller;
|
||||
|
|
@ -161,7 +162,8 @@ class ChatListView extends StatelessWidget {
|
|||
.client
|
||||
.onSync
|
||||
.stream
|
||||
.where((s) => s.hasRoomUpdate),
|
||||
.where((s) => s.hasRoomUpdate)
|
||||
.rateLimit(Duration(seconds: 1)),
|
||||
builder: (context, snapshot) {
|
||||
return FutureBuilder<void>(
|
||||
future: controller.waitForFirstSync(),
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@ import 'package:scroll_to_index/scroll_to_index.dart';
|
|||
import 'package:swipe_to_action/swipe_to_action.dart';
|
||||
import 'package:vrouter/vrouter.dart';
|
||||
|
||||
import '../../utils/stream_extension.dart';
|
||||
|
||||
class ChatView extends StatelessWidget {
|
||||
final ChatController controller;
|
||||
|
||||
|
|
@ -72,7 +74,8 @@ class ChatView extends StatelessWidget {
|
|||
titleSpacing: 0,
|
||||
title: controller.selectedEvents.isEmpty
|
||||
? StreamBuilder(
|
||||
stream: controller.room.onUpdate.stream,
|
||||
stream: controller.room.onUpdate.stream
|
||||
.rateLimit(Duration(milliseconds: 250)),
|
||||
builder: (context, snapshot) => ListTile(
|
||||
leading: Avatar(controller.room.avatar,
|
||||
controller.room.displayname),
|
||||
|
|
@ -105,7 +108,8 @@ class ChatView extends StatelessWidget {
|
|||
.stream
|
||||
.where((p) =>
|
||||
p.senderId ==
|
||||
controller.room.directChatMatrixID),
|
||||
controller.room.directChatMatrixID)
|
||||
.rateLimit(Duration(seconds: 1)),
|
||||
builder: (context, snapshot) => Text(
|
||||
controller.room
|
||||
.getLocalizedStatus(context),
|
||||
|
|
@ -283,8 +287,10 @@ class ChatView extends StatelessWidget {
|
|||
: Container()
|
||||
: i == 0
|
||||
? StreamBuilder(
|
||||
stream:
|
||||
controller.room.onUpdate.stream,
|
||||
stream: controller
|
||||
.room.onUpdate.stream
|
||||
.rateLimit(Duration(
|
||||
milliseconds: 250)),
|
||||
builder: (_, __) {
|
||||
final seenByText = controller.room
|
||||
.getLocalizedSeenByText(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue