diff --git a/flutter/lib/common/widgets/address_book.dart b/flutter/lib/common/widgets/address_book.dart index 14a510cec..902df25c9 100644 --- a/flutter/lib/common/widgets/address_book.dart +++ b/flutter/lib/common/widgets/address_book.dart @@ -157,23 +157,29 @@ class _AddressBookState extends State { } else { tags = gFFI.abModel.tags; } - return DynamicGridView.builder( - gridDelegate: SliverGridDelegateWithWrapping( - mainAxisSpacing: 0, crossAxisSpacing: 0), - itemCount: tags.length, - itemBuilder: (BuildContext context, int index) { - final e = tags[index]; - return AddressBookTag( - name: e, - tags: gFFI.abModel.selectedTags, - onTap: () { - if (gFFI.abModel.selectedTags.contains(e)) { - gFFI.abModel.selectedTags.remove(e); - } else { - gFFI.abModel.selectedTags.add(e); - } - }); - }); + tagBuilder(String e) { + return AddressBookTag( + name: e, + tags: gFFI.abModel.selectedTags, + onTap: () { + if (gFFI.abModel.selectedTags.contains(e)) { + gFFI.abModel.selectedTags.remove(e); + } else { + gFFI.abModel.selectedTags.add(e); + } + }); + } + + return isDesktop + ? DynamicGridView.builder( + gridDelegate: SliverGridDelegateWithWrapping( + mainAxisSpacing: 0, crossAxisSpacing: 0), + itemCount: tags.length, + itemBuilder: (BuildContext context, int index) { + final e = tags[index]; + return tagBuilder(e); + }) + : Wrap(children: tags.map((e) => tagBuilder(e)).toList()); }); } diff --git a/flutter/lib/common/widgets/my_group.dart b/flutter/lib/common/widgets/my_group.dart index 07de0c86a..7f5db3bae 100644 --- a/flutter/lib/common/widgets/my_group.dart +++ b/flutter/lib/common/widgets/my_group.dart @@ -157,9 +157,11 @@ class _MyGroupState extends State { } return true; }).toList(); - return ListView.builder( - itemCount: items.length, - itemBuilder: (context, index) => _buildUserItem(items[index])); + return isDesktop + ? ListView.builder( + itemCount: items.length, + itemBuilder: (context, index) => _buildUserItem(items[index])) + : Column(children: items.map((e) => _buildUserItem(e)).toList()); }); } diff --git a/flutter/lib/common/widgets/peers_view.dart b/flutter/lib/common/widgets/peers_view.dart index 845b10cd3..c4df60479 100644 --- a/flutter/lib/common/widgets/peers_view.dart +++ b/flutter/lib/common/widgets/peers_view.dart @@ -178,29 +178,41 @@ class _PeersViewState extends State<_PeersView> with WindowListener { if (snapshot.hasData) { final peers = snapshot.data!; gFFI.peerTabModel.setCurrentTabCachedPeers(peers); - final child = DynamicGridView.builder( - gridDelegate: SliverGridDelegateWithWrapping( - mainAxisSpacing: space / 2, crossAxisSpacing: space), - itemCount: peers.length, - itemBuilder: (BuildContext context, int index) { - final visibilityChild = VisibilityDetector( - key: ValueKey(_cardId(peers[index].id)), - onVisibilityChanged: onVisibilityChanged, - child: widget.peerCardBuilder(peers[index]), - ); - return isDesktop - ? Obx( - () => SizedBox( - width: 220, - height: peerCardUiType.value == PeerUiType.grid - ? 140 - : 42, - child: visibilityChild, - ), - ) - : SizedBox(width: mobileWidth, child: visibilityChild); - }, - ); + buildOnePeer(Peer peer) { + final visibilityChild = VisibilityDetector( + key: ValueKey(_cardId(peer.id)), + onVisibilityChanged: onVisibilityChanged, + child: widget.peerCardBuilder(peer), + ); + return isDesktop + ? Obx( + () => SizedBox( + width: 220, + height: + peerCardUiType.value == PeerUiType.grid ? 140 : 42, + child: visibilityChild, + ), + ) + : SizedBox(width: mobileWidth, child: visibilityChild); + } + + final Widget child; + if (isDesktop) { + child = DynamicGridView.builder( + gridDelegate: SliverGridDelegateWithWrapping( + mainAxisSpacing: space / 2, crossAxisSpacing: space), + itemCount: peers.length, + itemBuilder: (BuildContext context, int index) { + return buildOnePeer(peers[index]); + }, + ); + } else { + child = Wrap( + spacing: space, + runSpacing: space, + children: peers.map((e) => buildOnePeer(e)).toList()); + } + if (updateEvent == UpdateEvent.load) { _curPeers.clear(); _curPeers.addAll(peers.map((e) => e.id));