build method
dynamic
build( - dynamic context,
- 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),
),
),
],
),
),
);
}