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