build method

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

Implementation

@override
Widget build(BuildContext context, WidgetRef ref) {
  final spacesLoader =
      ref.watch(spaceRelationsOverviewProvider(spaceIdOrAlias));
  final widthCount = (MediaQuery.of(context).size.width ~/ 300).toInt();
  const int minCount = 3;
  final crossAxisCount = max(1, min(widthCount, minCount));
  final spaceName =
      ref.watch(roomDisplayNameProvider(spaceIdOrAlias)).valueOrNull;
  final membership = ref.watch(roomMembershipProvider(spaceIdOrAlias));
  bool canLinkSpace =
      membership.valueOrNull?.canString('CanLinkSpaces') == true;
  // get platform of context.
  return Scaffold(
    appBar: AppBar(
      title: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Text(L10n.of(context).spaces),
          Text(
            '($spaceName)',
            overflow: TextOverflow.ellipsis,
            style: Theme.of(context).textTheme.labelLarge,
          ),
        ],
      ),
      actions: [
        IconButton(
          icon: const Icon(Atlas.arrows_rotating_right_thin),
          iconSize: 28,
          color: Theme.of(context).colorScheme.surface,
          onPressed: () async {
            ref.invalidate(spaceRelationsProvider);
          },
        ),
        spacesLoader.when(
          data: (spaces) {
            if (canLinkSpace) {
              return _renderTools(context);
            } else {
              return const SizedBox.shrink();
            }
          },
          error: (e, s) {
            _log.severe('Failed to load the related spaces', e, s);
            return Center(
              child: Text(L10n.of(context).loadingFailed(e)),
            );
          },
          loading: () => const SizedBox.shrink(),
        ),
      ],
    ),
    body: SingleChildScrollView(
      child: Column(
        children: [
          spacesLoader.when(
            data: (spaces) {
              final subspaces = renderSubSpaces(
                context,
                ref,
                spaceIdOrAlias,
                spaces,
                crossAxisCount: crossAxisCount,
              );
              if (subspaces != null) return subspaces;
              return renderFallback(context, canLinkSpace);
            },
            error: (e, s) {
              _log.severe('Failed to load the related spaces', e, s);
              return Center(
                child: Text(L10n.of(context).loadingFailed(e)),
              );
            },
            loading: () => Center(
              child: Text(L10n.of(context).loading),
            ),
          ),
        ],
      ),
    ),
  );
}