perf: Use valuenotifier to not rebuild chatlist

krille/sembast-db
Krille 2 years ago
parent 72921505fe
commit bdcc2f6340

@ -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;
});
} }
} }

@ -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),
), ),
),
); );
} }
} }

Loading…
Cancel
Save