From cc35328f28d5f309c50df57ab171af17bf57e413 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Thu, 26 Oct 2023 04:02:34 +0530 Subject: [PATCH] add dropdown for peer view types Signed-off-by: Sahil Yeole --- flutter/lib/common/widgets/peer_tab_page.dart | 104 +++++++++++++----- 1 file changed, 76 insertions(+), 28 deletions(-) diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index 6a2a5347a..fb7ef39b2 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -215,34 +215,7 @@ class _PeerTabPageState extends State } Widget _createPeerViewTypeSwitch(BuildContext context) { - final textColor = Theme.of(context).textTheme.titleLarge?.color; - final types = [PeerUiType.grid, PeerUiType.tile, PeerUiType.list]; - - return Obx(() => _hoverAction( - context: context, - onTap: () async { - final currentIndex = types.indexOf(peerCardUiType.value); - final newIndex = (currentIndex + 1) % types.length; // cycle through types - final type = types[newIndex]; - await bind.setLocalFlutterOption( - k: 'peer-card-ui-type', v: type.index.toString()); - peerCardUiType.value = type; - }, - child: Tooltip( - message: peerCardUiType.value == PeerUiType.grid - ? translate('Small Tiles') - : peerCardUiType.value == PeerUiType.tile - ? translate('List') - : translate('Big Tiles'), - child: Icon( - peerCardUiType.value == PeerUiType.grid - ? Icons.view_list_rounded - : peerCardUiType.value == PeerUiType.tile - ? Icons.view_agenda_rounded - : Icons.grid_view_rounded, - size: 18, - color: textColor, - )))); + return PeerViewDropdown(); } Widget _createMultiSelection() { @@ -782,6 +755,81 @@ class _PeerSearchBarState extends State { } } +class PeerViewDropdown extends StatefulWidget { + const PeerViewDropdown({super.key}); + + @override + State createState() => _PeerViewDropdownState(); +} + +class _PeerViewDropdownState extends State { + @override + Widget build(BuildContext context) { + final List types = [PeerUiType.grid, PeerUiType.tile, PeerUiType.list]; + final style = TextStyle( + color: Theme.of(context).textTheme.titleLarge?.color, + fontSize: MenuConfig.fontSize, + fontWeight: FontWeight.normal); + List items = List.empty(growable: true); + items.add(PopupMenuItem( + height: 36, + enabled: false, + child: Text(translate("Change View"), style: style))); + for (var e in PeerUiType.values) { + items.add(PopupMenuItem( + height: 36, + child: Obx(() => Center( + child: SizedBox( + height: 36, + child: getRadio( + Text(translate( + types.indexOf(e) == 0 ? 'Big Tiles' : types.indexOf(e) == 1 ? 'Small Tiles' : 'List' + ), style: style), + e, + peerCardUiType.value, + dense: true, + (PeerUiType? v) async { + if (v != null) { + peerCardUiType.value = v; + await bind.setLocalFlutterOption( + k: "peer-card-ui-type", + v: peerCardUiType.value.index.toString(), + ); + }} + ), + ), + )))); + } + + var menuPos = RelativeRect.fromLTRB(0, 0, 0, 0); + return _hoverAction( + context: context, + child: Tooltip( + message: translate('Change View'), + child: Icon( + peerCardUiType.value == PeerUiType.grid + ? Icons.grid_view_rounded + : peerCardUiType.value == PeerUiType.tile + ? Icons.view_list_rounded + : Icons.view_agenda_rounded, + size: 18, + )), + onTapDown: (details) { + final x = details.globalPosition.dx; + final y = details.globalPosition.dy; + menuPos = RelativeRect.fromLTRB(x, y, x, y); + }, + onTap: () => showMenu( + context: context, + position: menuPos, + items: items, + elevation: 8, + ), + ); + } +} + + class PeerSortDropdown extends StatefulWidget { const PeerSortDropdown({super.key});