build method

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

Implementation

@override
Widget build(BuildContext context, WidgetRef ref) {
  final features = ref.watch(featuresProvider);
  bool isActive(f) => features.isActive(f);

  final canPostNewsLoader = ref.watch(
    hasSpaceWithPermissionProvider('CanPostNews'),
  );
  final canPostNews = canPostNewsLoader.valueOrNull ?? false;

  final canPostPinLoader = ref.watch(
    hasSpaceWithPermissionProvider('CanPostPin'),
  );
  final canPostPin = canPostPinLoader.valueOrNull ?? false;

  final canPostEventLoader = ref.watch(
    hasSpaceWithPermissionProvider('CanPostEvent'),
  );
  final canPostEvent = canPostEventLoader.valueOrNull ?? false;

  final canPostTasklistLoader = ref.watch(
    hasSpaceWithPermissionProvider('CanPostTaskList'),
  );
  final canPostTasklist = canPostTasklistLoader.valueOrNull ?? false;

  return Wrap(
    alignment: WrapAlignment.spaceEvenly,
    spacing: 8,
    runSpacing: 10,
    children: List.from(
      [
        if (canPostNews)
          OutlinedButton.icon(
            key: QuickJumpKeys.createUpdateAction,
            onPressed: () => routeTo(context, Routes.actionAddUpdate),
            icon: const Icon(
              Atlas.plus_circle_thin,
              size: 18,
            ),
            label: Text(
              L10n.of(context).update,
              style: Theme.of(context).textTheme.labelMedium,
            ),
          ),
        if (canPostPin)
          OutlinedButton.icon(
            key: QuickJumpKeys.createPinAction,
            onPressed: () => routeTo(context, Routes.createPin),
            icon: const Icon(
              Atlas.plus_circle_thin,
              size: 18,
            ),
            label: Text(
              L10n.of(context).pin,
              style: Theme.of(context).textTheme.labelMedium,
            ),
          ),
        if (canPostEvent)
          OutlinedButton.icon(
            key: QuickJumpKeys.createEventAction,
            onPressed: () => routeTo(context, Routes.createEvent),
            icon: const Icon(Atlas.plus_circle_thin, size: 18),
            label: Text(
              L10n.of(context).event,
              style: Theme.of(context).textTheme.labelMedium,
            ),
          ),
        if (canPostTasklist)
          OutlinedButton.icon(
            key: QuickJumpKeys.createTaskListAction,
            onPressed: () => showCreateUpdateTaskListBottomSheet(context),
            icon: const Icon(Atlas.plus_circle_thin, size: 18),
            label: Text(
              L10n.of(context).taskList,
              style: Theme.of(context).textTheme.labelMedium,
            ),
          ),
        if (isActive(LabsFeature.polls))
          OutlinedButton.icon(
            onPressed: () {
              _log.info('poll pressed');
            },
            icon: const Icon(Atlas.plus_circle_thin, size: 18),
            label: Text(
              L10n.of(context).poll,
              style: Theme.of(context).textTheme.labelMedium,
            ),
          ),
        if (isActive(LabsFeature.discussions))
          OutlinedButton.icon(
            onPressed: () {
              _log.info('Discussion pressed');
            },
            icon: const Icon(
              Atlas.plus_circle_thin,
              size: 18,
            ),
            label: Text(
              L10n.of(context).discussion,
              style: Theme.of(context).textTheme.labelMedium,
            ),
          ),
        OutlinedButton.icon(
          icon: const Icon(Atlas.connection),
          key: SpacesKeys.actionCreate,
          onPressed: () => routeTo(context, Routes.createSpace),
          label: Text(L10n.of(context).createSpace),
        ),
        if (isBugReportingEnabled)
          OutlinedButton.icon(
            key: QuickJumpKeys.bugReport,
            style: OutlinedButton.styleFrom(
              foregroundColor: Theme.of(context).colorScheme.textHighlight,
              side: BorderSide(
                width: 1,
                color: Theme.of(context).colorScheme.textHighlight,
              ),
            ),
            icon: const Icon(Atlas.bug_clipboard_thin, size: 18),
            label: Text(
              L10n.of(context).reportBug,
              style: Theme.of(context).textTheme.labelMedium,
            ),
            onPressed: () async {
              if (popBeforeRoute) {
                Navigator.pop(context);
              }
              await openBugReport(context);
            },
          ),
      ],
    ),
  );
}