mirror of
https://gitlab.com/famedly/fluffychat.git
synced 2025-01-11 18:22:49 +01:00
perf: Use valuenotifier to not rebuild chatlist
This commit is contained in:
parent
623c3bfc2e
commit
b0a58d8524
@ -253,7 +253,7 @@ class ChatListController extends State<ChatList>
|
||||
BoxConstraints? snappingSheetContainerSize;
|
||||
|
||||
final ScrollController scrollController = ScrollController();
|
||||
bool scrolledToTop = true;
|
||||
final ValueNotifier<bool> scrolledToTop = ValueNotifier(true);
|
||||
|
||||
final StreamController<Client> _clientStream = StreamController.broadcast();
|
||||
|
||||
@ -263,10 +263,8 @@ class ChatListController extends State<ChatList>
|
||||
|
||||
void _onScroll() {
|
||||
final newScrolledToTop = scrollController.position.pixels <= 0;
|
||||
if (newScrolledToTop != scrolledToTop) {
|
||||
setState(() {
|
||||
scrolledToTop = newScrolledToTop;
|
||||
});
|
||||
if (newScrolledToTop != scrolledToTop.value) {
|
||||
scrolledToTop.value = newScrolledToTop;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@ import 'chat_list.dart';
|
||||
|
||||
class StartChatFloatingActionButton extends StatelessWidget {
|
||||
final ActiveFilter activeFilter;
|
||||
final bool scrolledToTop;
|
||||
final ValueNotifier<bool> scrolledToTop;
|
||||
final bool roomsIsEmpty;
|
||||
|
||||
const StartChatFloatingActionButton({
|
||||
@ -61,27 +61,30 @@ class StartChatFloatingActionButton extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AnimatedContainer(
|
||||
duration: FluffyThemes.animationDuration,
|
||||
curve: FluffyThemes.animationCurve,
|
||||
width: roomsIsEmpty
|
||||
? null
|
||||
: scrolledToTop
|
||||
? 144
|
||||
: 56,
|
||||
child: scrolledToTop
|
||||
? FloatingActionButton.extended(
|
||||
onPressed: () => _onPressed(context),
|
||||
icon: Icon(icon),
|
||||
label: Text(
|
||||
getLabel(context),
|
||||
overflow: TextOverflow.fade,
|
||||
return ValueListenableBuilder<bool>(
|
||||
valueListenable: scrolledToTop,
|
||||
builder: (context, scrolledToTop, _) => AnimatedContainer(
|
||||
duration: FluffyThemes.animationDuration,
|
||||
curve: FluffyThemes.animationCurve,
|
||||
width: roomsIsEmpty
|
||||
? null
|
||||
: scrolledToTop
|
||||
? 144
|
||||
: 56,
|
||||
child: scrolledToTop
|
||||
? FloatingActionButton.extended(
|
||||
onPressed: () => _onPressed(context),
|
||||
icon: Icon(icon),
|
||||
label: Text(
|
||||
getLabel(context),
|
||||
overflow: TextOverflow.fade,
|
||||
),
|
||||
)
|
||||
: FloatingActionButton(
|
||||
onPressed: () => _onPressed(context),
|
||||
child: Icon(icon),
|
||||
),
|
||||
)
|
||||
: FloatingActionButton(
|
||||
onPressed: () => _onPressed(context),
|
||||
child: Icon(icon),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user