build method
dynamic
build( - dynamic context,
- dynamic ref
)
Implementation
@override
Widget build(BuildContext context, WidgetRef ref) {
final membersLoader = ref.watch(membersIdsProvider(spaceIdOrAlias));
final membership =
ref.watch(roomMembershipProvider(spaceIdOrAlias)).valueOrNull;
final invited =
ref.watch(spaceInvitedMembersProvider(spaceIdOrAlias)).valueOrNull ??
[];
final showInviteBtn = membership?.canString('CanInvite') == true;
return CustomScrollView(
slivers: [
SliverAppBar(
actions: [
showInviteBtn && invited.length <= 100
? OutlinedButton(
style: OutlinedButton.styleFrom(
padding: const EdgeInsets.symmetric(
horizontal: 12,
vertical: 6,
),
),
onPressed: () => context.pushNamed(
Routes.spaceInvite.name,
pathParameters: {'spaceId': spaceIdOrAlias},
),
child: Text(L10n.of(context).invite),
)
: const SizedBox.shrink(),
],
),
membersLoader.when(
data: (members) {
final widthCount =
(MediaQuery.of(context).size.width ~/ 300).toInt();
const int minCount = 4;
if (members.isEmpty) {
return SliverToBoxAdapter(
child: Center(
child: Text(L10n.of(context).noMembersFound),
),
);
}
return SliverGrid.builder(
itemCount: members.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: max(1, min(widthCount, minCount)),
childAspectRatio: 5.0,
),
itemBuilder: (context, index) => MemberListEntry(
memberId: members[index],
roomId: spaceIdOrAlias,
),
);
},
error: (e, s) {
_log.severe('Failed to load space members', e, s);
return SliverToBoxAdapter(
child: Center(
child: Text(L10n.of(context).loadingFailed(e)),
),
);
},
loading: () => SliverToBoxAdapter(
child: Center(
child: Text(L10n.of(context).loading),
),
),
),
],
);
}