perf: Use valuenotifier to not rebuild chatlist

This commit is contained in:
Krille 2023-05-10 13:01:35 +02:00
parent 623c3bfc2e
commit b0a58d8524
No known key found for this signature in database
2 changed files with 27 additions and 26 deletions

View File

@ -253,7 +253,7 @@ class ChatListController extends State<ChatList>
BoxConstraints? snappingSheetContainerSize; BoxConstraints? snappingSheetContainerSize;
final ScrollController scrollController = ScrollController(); final ScrollController scrollController = ScrollController();
bool scrolledToTop = true; final ValueNotifier<bool> scrolledToTop = ValueNotifier(true);
final StreamController<Client> _clientStream = StreamController.broadcast(); final StreamController<Client> _clientStream = StreamController.broadcast();
@ -263,10 +263,8 @@ class ChatListController extends State<ChatList>
void _onScroll() { void _onScroll() {
final newScrolledToTop = scrollController.position.pixels <= 0; final newScrolledToTop = scrollController.position.pixels <= 0;
if (newScrolledToTop != scrolledToTop) { if (newScrolledToTop != scrolledToTop.value) {
setState(() { scrolledToTop.value = newScrolledToTop;
scrolledToTop = newScrolledToTop;
});
} }
} }

View File

@ -8,7 +8,7 @@ import 'chat_list.dart';
class StartChatFloatingActionButton extends StatelessWidget { class StartChatFloatingActionButton extends StatelessWidget {
final ActiveFilter activeFilter; final ActiveFilter activeFilter;
final bool scrolledToTop; final ValueNotifier<bool> scrolledToTop;
final bool roomsIsEmpty; final bool roomsIsEmpty;
const StartChatFloatingActionButton({ const StartChatFloatingActionButton({
@ -61,7 +61,9 @@ class StartChatFloatingActionButton extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AnimatedContainer( return ValueListenableBuilder<bool>(
valueListenable: scrolledToTop,
builder: (context, scrolledToTop, _) => AnimatedContainer(
duration: FluffyThemes.animationDuration, duration: FluffyThemes.animationDuration,
curve: FluffyThemes.animationCurve, curve: FluffyThemes.animationCurve,
width: roomsIsEmpty width: roomsIsEmpty
@ -82,6 +84,7 @@ class StartChatFloatingActionButton extends StatelessWidget {
onPressed: () => _onPressed(context), onPressed: () => _onPressed(context),
child: Icon(icon), child: Icon(icon),
), ),
),
); );
} }
} }