diff --git a/lib/controllers/rooms_controller.dart b/lib/controllers/rooms_controller.dart index 3c34fc9..7eaf49f 100644 --- a/lib/controllers/rooms_controller.dart +++ b/lib/controllers/rooms_controller.dart @@ -1,8 +1,6 @@ import "package:collection/collection.dart"; import "package:fast_immutable_collections/fast_immutable_collections.dart"; import "package:flutter_riverpod/flutter_riverpod.dart"; -import "package:nexus/controllers/client_state_controller.dart"; -import "package:nexus/helpers/extensions/mxc_to_https.dart"; import "package:nexus/models/read_receipt.dart"; import "package:nexus/models/room.dart"; @@ -15,13 +13,6 @@ class RoomsController extends Notifier> { ISet leftRooms, { bool addToNewEvents = true, }) { - final homeserver = - ref.watch( - ClientStateController.provider.select( - (value) => value?.homeserverUrl, - ), - ) ?? - ""; final merged = rooms.entries.fold(state, (acc, entry) { final roomId = entry.key; final incoming = entry.value; @@ -36,13 +27,7 @@ class RoomsController extends Notifier> { roomId, existing?.copyWith( hasMore: incoming.hasMore, - metadata: - incoming.metadata?.copyWith( - avatar: - incoming.metadata?.avatar?.mxcToHttps(homeserver) ?? - existing.metadata?.avatar, - ) ?? - existing.metadata, + metadata: incoming.metadata ?? existing.metadata, events: events!, state: incoming.state.entries.fold( existing.state, @@ -72,11 +57,7 @@ class RoomsController extends Notifier> { ), ), ) ?? - incoming.copyWith( - metadata: incoming.metadata?.copyWith( - avatar: incoming.metadata?.avatar?.mxcToHttps(homeserver), - ), - ), + incoming, ); }); @@ -84,6 +65,7 @@ class RoomsController extends Notifier> { merged, (acc, roomId) => acc.remove(roomId), ); + state = prunedList; } diff --git a/lib/controllers/user_controller.dart b/lib/controllers/user_controller.dart index d3976bd..4f0993b 100644 --- a/lib/controllers/user_controller.dart +++ b/lib/controllers/user_controller.dart @@ -21,7 +21,7 @@ class UserController extends AsyncNotifier { ), ); - if (member is MembershipContent) { + if (member?.content is MembershipContent) { return member!.content as MembershipContent; } diff --git a/lib/widgets/avatar_or_hash.dart b/lib/widgets/avatar_or_hash.dart index 28662e2..88cf7ca 100644 --- a/lib/widgets/avatar_or_hash.dart +++ b/lib/widgets/avatar_or_hash.dart @@ -2,8 +2,10 @@ import "package:color_hash/color_hash.dart"; import "package:cross_cache/cross_cache.dart"; import "package:flutter/material.dart"; import "package:flutter_riverpod/flutter_riverpod.dart"; +import "package:nexus/controllers/client_state_controller.dart"; import "package:nexus/controllers/cross_cache_controller.dart"; import "package:nexus/helpers/extensions/get_headers.dart"; +import "package:nexus/helpers/extensions/mxc_to_https.dart"; class AvatarOrHash extends ConsumerWidget { final Uri? avatar; @@ -28,6 +30,14 @@ class AvatarOrHash extends ConsumerWidget { color: ColorHash(title).color, child: Center(child: Text(title.isEmpty ? "" : title[0])), ); + final parsedAvatar = avatar?.mxcToHttps( + ref.watch( + ClientStateController.provider.select( + (value) => value?.homeserverUrl, + ), + ) ?? + "", + ); return SizedBox( width: height, height: height, @@ -42,11 +52,11 @@ class AvatarOrHash extends ConsumerWidget { child: SizedBox( width: height, height: height, - child: avatar == null + child: parsedAvatar == null ? fallback ?? box : Image( image: CachedNetworkImage( - avatar.toString(), + parsedAvatar.toString(), ref.watch(CrossCacheController.provider), headers: ref.headers, ), diff --git a/lib/widgets/chat_page/room_chat.dart b/lib/widgets/chat_page/room_chat.dart index ca7dbb7..443ac68 100644 --- a/lib/widgets/chat_page/room_chat.dart +++ b/lib/widgets/chat_page/room_chat.dart @@ -304,7 +304,7 @@ class RoomChat extends HookConsumerWidget { children: [ Positioned.fill( child: Padding( - padding: EdgeInsets.symmetric(horizontal: 8), + padding: EdgeInsets.symmetric(horizontal: 12), child: switch (ref.watch(controllerProvider)) { AsyncData(:final value) || AsyncLoading(:final value?) => CustomScrollView(