import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/spaces_entry.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'chat_list.dart'; class SpacesDrawer extends StatelessWidget { final ChatListController controller; const SpacesDrawer({Key? key, required this.controller}) : super(key: key); @override Widget build(BuildContext context) { final currentIndex = controller.spacesEntries.indexWhere((space) => controller.activeSpacesEntry.runtimeType == space.runtimeType && (controller.activeSpaceId == space.getSpace(context)?.id)); final Map spaceHierarchy = Map.fromEntries(controller.spacesEntries.map((e) => MapEntry(e, null))); // TODO(TheOeWithTheBraid): wait for space hierarchy https://gitlab.com/famedly/company/frontend/libraries/matrix_api_lite/-/merge_requests/58 return WillPopScope( onWillPop: () async { controller.snapBackSpacesSheet(); return false; }, child: Column( children: List.generate(spaceHierarchy.length, (index) { final space = spaceHierarchy.keys.toList()[index]; final room = space.getSpace(context); final active = currentIndex == index; return ListTile( selected: active, leading: index == 0 ? const Icon(Icons.keyboard_arrow_down) : room == null ? space.getIcon(active) : Avatar( mxContent: room.avatar, name: space.getName(context), size: 24, fontSize: 12, ), title: Text(space.getName(context)), subtitle: room?.topic.isEmpty ?? true ? null : Tooltip( message: room!.topic, child: Text( room.topic.replaceAll('\n', ' '), softWrap: false, overflow: TextOverflow.fade, ), ), onTap: () => controller.setActiveSpacesEntry( context, space, ), trailing: room != null ? IconButton( icon: const Icon(Icons.edit), tooltip: L10n.of(context)!.edit, onPressed: () => controller.editSpace(context, room.id), ) : null, ); }), ), ); } }