actionButtons method

dynamic actionButtons(
  1. dynamic context,
  2. dynamic ref
)

Implementation

Widget actionButtons(BuildContext context, WidgetRef ref) {
  final membership = ref.watch(roomMembershipProvider(spaceId)).valueOrNull;
  bool canAddPin = membership?.canString('CanPostPin') == true;
  bool canPostUpdate = membership?.canString('CanPostNews') == true;
  bool canChangeSetting =
      membership?.canString('CanChangeAppSettings') == true;
  bool canAddEvent = membership?.canString('CanPostEvent') == true;
  bool canAddTask = membership?.canString('CanPostTaskList') == true;
  bool canLinkSpaces = membership?.canString('CanLinkSpaces') == true;

  final children = [
    if (canPostUpdate || canChangeSetting)
      simpleActionButton(
        context: context,
        iconData: PhosphorIcons.newspaper(),
        title: L10n.of(context).createNewUpdate,
        onPressed: () async {
          if (!canPostUpdate && canChangeSetting) {
            final result = await offerToActivateFeature(
              context: context,
              ref: ref,
              spaceId: spaceId,
              feature: SpaceFeature.updates,
            );
            if (!result) return;
          }
          if (context.mounted) {
            context.pushNamed(
              Routes.actionAddUpdate.name,
              queryParameters: {'spaceId': spaceId},
            );
          }
        },
      ),
    if (canAddPin || canChangeSetting)
      simpleActionButton(
        context: context,
        iconData: Atlas.pin,
        title: L10n.of(context).addPin,
        onPressed: () async {
          if (!canAddPin && canChangeSetting) {
            final result = await offerToActivateFeature(
              context: context,
              ref: ref,
              spaceId: spaceId,
              feature: SpaceFeature.pins,
            );
            if (!result) return;
          }
          if (context.mounted) {
            context.pushNamed(
              Routes.createPin.name,
              queryParameters: {'spaceId': spaceId},
            );
          }
        },
      ),
    if (canAddEvent || canChangeSetting)
      simpleActionButton(
        context: context,
        iconData: Atlas.calendar_dots,
        title: L10n.of(context).addEvent,
        onPressed: () async {
          if (!canAddEvent && canChangeSetting) {
            final result = await offerToActivateFeature(
              context: context,
              ref: ref,
              spaceId: spaceId,
              feature: SpaceFeature.events,
            );
            if (!result) return;
          }
          if (context.mounted) {
            context.pushNamed(
              Routes.createEvent.name,
              queryParameters: {'spaceId': spaceId},
            );
          }
        },
      ),
    if (canAddTask || canChangeSetting)
      simpleActionButton(
        context: context,
        iconData: Atlas.list,
        title: L10n.of(context).addTask,
        onPressed: () async {
          if (!canAddEvent && canChangeSetting) {
            final result = await offerToActivateFeature(
              context: context,
              ref: ref,
              spaceId: spaceId,
              feature: SpaceFeature.tasks,
            );
            if (!result) return;
          }
          if (context.mounted) {
            showCreateUpdateTaskListBottomSheet(
              context,
              initialSelectedSpace: spaceId,
            );
          }
        },
      ),
  ];

  if (canLinkSpaces) {
    children.addAll([
      simpleActionButton(
        key: createChatAction,
        context: context,
        iconData: Atlas.chats,
        title: L10n.of(context).addChat,
        onPressed: () => context.pushNamed(
          Routes.createChat.name,
          queryParameters: {'spaceId': spaceId},
          extra: 1,
        ),
      ),
      simpleActionButton(
        key: createSpaceAction,
        context: context,
        iconData: Icons.people,
        title: L10n.of(context).addSpace,
        onPressed: () => context.pushNamed(
          Routes.createSpace.name,
          queryParameters: {'parentSpaceId': spaceId},
        ),
      ),
      simpleActionButton(
        context: context,
        iconData: Icons.link,
        title: L10n.of(context).linkChat,
        onPressed: () => context.pushNamed(
          Routes.linkChat.name,
          pathParameters: {'spaceId': spaceId},
        ),
      ),
      simpleActionButton(
        context: context,
        iconData: Icons.link,
        title: L10n.of(context).linkSpace,
        onPressed: () => context.pushNamed(
          Routes.linkSubspace.name,
          pathParameters: {'spaceId': spaceId},
        ),
      ),
    ]);
  }

  return Wrap(
    crossAxisAlignment: WrapCrossAlignment.start,
    children: children,
  );
}