build method

  1. @override
dynamic build(
  1. dynamic context,
  2. dynamic ref
)

Implementation

@override
Widget build(BuildContext context, WidgetRef ref) {
  final membership = ref.watch(roomMembershipProvider(spaceId)).valueOrNull;
  final isBookmarked =
      ref.watch(spaceIsBookmarkedProvider(spaceId)).valueOrNull ?? false;
  final invited =
      ref.watch(spaceInvitedMembersProvider(spaceId)).valueOrNull ?? [];
  final showInviteBtn = membership?.canString('CanInvite') == true;
  final List<PopupMenuEntry> submenu = [];
  if (membership?.canString('CanSetName') == true) {
    submenu.add(
      PopupMenuItem(
        onTap: () {
          showEditSpaceNameBottomSheet(
            context: context,
            ref: ref,
            spaceId: spaceId,
          );
        },
        child: Text(L10n.of(context).editTitle),
      ),
    );
  }
  if (membership?.canString('CanSetTopic') == true) {
    submenu.add(
      PopupMenuItem(
        onTap: () {
          showEditDescriptionBottomSheet(
            context: context,
            ref: ref,
            spaceId: spaceId,
          );
        },
        child: Text(L10n.of(context).editDescription),
      ),
    );
  }

  submenu.addAll([
    PopupMenuItem(
      key: settingsMenu,
      onTap: () => context.pushNamed(
        Routes.spaceSettings.name,
        pathParameters: {'spaceId': spaceId},
      ),
      child: Text(L10n.of(context).settings),
    ),
    const PopupMenuDivider(),
    PopupMenuItem(
      key: leaveMenu,
      onTap: () => showLeaveSpaceDialog(context, ref, spaceId),
      child: Text(
        L10n.of(context).leaveSpace,
        style: TextStyle(
          color: Theme.of(context).colorScheme.error,
        ),
      ),
    ),
    if (membership?.canString('CanKick') == true &&
        membership?.canString('CanUpdateJoinRule') == true)
      PopupMenuItem(
        onTap: () => openCloseRoomDialog(context: context, roomId: spaceId),
        child: Text(
          L10n.of(context).closeSpace,
          style: TextStyle(
            color: Theme.of(context).colorScheme.error,
          ),
        ),
      ),
  ]);

  return AppBar(
    backgroundColor: Colors.transparent,
    title: spaceTitle,
    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': spaceId},
              ),
              child: Text(L10n.of(context).invite),
            )
          : const SizedBox.shrink(),
      IconButton(
        icon: Icon(isBookmarked ? Icons.bookmark : Icons.bookmark_border),
        onPressed: () async {
          final bookmarked =
              ref.read(spaceIsBookmarkedProvider(spaceId)).valueOrNull ??
                  false;
          final space = await ref.read(spaceProvider(spaceId).future);
          await space.setBookmarked(!bookmarked);
        },
      ),
      PopupMenuButton(
        icon: const Icon(
          Icons.more_vert,
          key: optionsMenu,
        ),
        iconSize: 28,
        color: Theme.of(context).colorScheme.surface,
        itemBuilder: (BuildContext context) => submenu,
      ),
    ],
  );
}