build method

  1. @override
dynamic build(
  1. dynamic context,
  2. 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),
          ),
        ),
      ),
    ],
  );
}