From efacc7362adc4dd7a4f6466aa4e7ba1e7b3fcde3 Mon Sep 17 00:00:00 2001 From: csf Date: Mon, 10 Oct 2022 21:10:31 +0900 Subject: [PATCH] fix hit tag empty space bug --- flutter/lib/common.dart | 17 --------- flutter/lib/common/widgets/peers_view.dart | 44 ++++++++++++++++++---- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index ce341d160..c4615c336 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -936,23 +936,6 @@ Future matchPeer(String searchText, Peer peer) async { return alias.toLowerCase().contains(searchText); } -Future>? matchPeers(String searchText, List peers) async { - searchText = searchText.trim(); - if (searchText.isEmpty) { - return peers; - } - searchText = searchText.toLowerCase(); - final matches = - await Future.wait(peers.map((peer) => matchPeer(searchText, peer))); - final filteredList = List.empty(growable: true); - for (var i = 0; i < peers.length; i++) { - if (matches[i]) { - filteredList.add(peers[i]); - } - } - return filteredList; -} - /// Get the image for the current [platform]. Widget getPlatformImage(String platform, {double size = 50}) { platform = platform.toLowerCase(); diff --git a/flutter/lib/common/widgets/peers_view.dart b/flutter/lib/common/widgets/peers_view.dart index 03a2436f2..6e52bfeb8 100644 --- a/flutter/lib/common/widgets/peers_view.dart +++ b/flutter/lib/common/widgets/peers_view.dart @@ -13,6 +13,7 @@ import '../../models/peer_model.dart'; import '../../models/platform_model.dart'; import 'peer_card.dart'; +typedef PeerFilter = bool Function(Peer peer); typedef PeerCardBuilder = Widget Function(Peer peer); /// for peer search text, global obs value @@ -22,10 +23,14 @@ final peerSearchTextController = class _PeersView extends StatefulWidget { final Peers peers; + final PeerFilter? peerFilter; final PeerCardBuilder peerCardBuilder; const _PeersView( - {required this.peers, required this.peerCardBuilder, Key? key}) + {required this.peers, + required this.peerCardBuilder, + this.peerFilter, + Key? key}) : super(key: key); @override @@ -173,11 +178,33 @@ class _PeersViewState extends State<_PeersView> with WindowListener { } }(); } + + Future>? matchPeers(String searchText, List peers) async { + if (widget.peerFilter != null) { + peers = peers.where((peer) => widget.peerFilter!(peer)).toList(); + } + + searchText = searchText.trim(); + if (searchText.isEmpty) { + return peers; + } + searchText = searchText.toLowerCase(); + final matches = + await Future.wait(peers.map((peer) => matchPeer(searchText, peer))); + final filteredList = List.empty(growable: true); + for (var i = 0; i < peers.length; i++) { + if (matches[i]) { + filteredList.add(peers[i]); + } + } + return filteredList; + } } abstract class BasePeersView extends StatelessWidget { final String name; final String loadEvent; + final PeerFilter? peerFilter; final PeerCardBuilder peerCardBuilder; final List initPeers; @@ -185,6 +212,7 @@ abstract class BasePeersView extends StatelessWidget { Key? key, required this.name, required this.loadEvent, + this.peerFilter, required this.peerCardBuilder, required this.initPeers, }) : super(key: key); @@ -193,6 +221,7 @@ abstract class BasePeersView extends StatelessWidget { Widget build(BuildContext context) { return _PeersView( peers: Peers(name: name, loadEvent: loadEvent, peers: initPeers), + peerFilter: peerFilter, peerCardBuilder: peerCardBuilder); } } @@ -273,13 +302,12 @@ class AddressBookPeersView extends BasePeersView { key: key, name: 'address book peer', loadEvent: 'load_address_book_peers', - peerCardBuilder: (Peer peer) => Obx(() => Offstage( - key: ValueKey("off${peer.id}"), - offstage: !_hitTag(gFFI.abModel.selectedTags, peer.tags), - child: AddressBookPeerCard( - peer: peer, - menuPadding: menuPadding, - ))), + peerFilter: (Peer peer) => + _hitTag(gFFI.abModel.selectedTags, peer.tags), + peerCardBuilder: (Peer peer) => AddressBookPeerCard( + peer: peer, + menuPadding: menuPadding, + ), initPeers: initPeers, );