diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml
index f6609ce4f..7c5fc4ba1 100644
--- a/.github/workflows/flutter-build.yml
+++ b/.github/workflows/flutter-build.yml
@@ -82,6 +82,7 @@ jobs:
 
       - name: Install flutter rust bridge deps
         run: |
+          git config --global core.longpaths true
           cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid"
           Push-Location flutter ; flutter pub get ; Pop-Location
           ~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart
diff --git a/flutter/lib/common/hbbs/hbbs.dart b/flutter/lib/common/hbbs/hbbs.dart
index dabb3be8f..013ce8919 100644
--- a/flutter/lib/common/hbbs/hbbs.dart
+++ b/flutter/lib/common/hbbs/hbbs.dart
@@ -68,7 +68,7 @@ class PeerPayload {
 
   PeerPayload.fromJson(Map<String, dynamic> json)
       : id = json['id'] ?? '',
-        info = json['info'] ?? '',
+        info = (json['info'] is Map<String, dynamic>) ? json['info'] : {},
         status = json['status'],
         user = json['user'] ?? '',
         user_name = json['user_name'] ?? '',
diff --git a/flutter/lib/common/widgets/peers_view.dart b/flutter/lib/common/widgets/peers_view.dart
index 28bfb6690..845b10cd3 100644
--- a/flutter/lib/common/widgets/peers_view.dart
+++ b/flutter/lib/common/widgets/peers_view.dart
@@ -1,6 +1,7 @@
 import 'dart:async';
 import 'dart:collection';
 
+import 'package:dynamic_layouts/dynamic_layouts.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
@@ -177,26 +178,29 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
           if (snapshot.hasData) {
             final peers = snapshot.data!;
             gFFI.peerTabModel.setCurrentTabCachedPeers(peers);
-            final cards = <Widget>[];
-            for (final peer in peers) {
-              final visibilityChild = VisibilityDetector(
-                key: ValueKey(_cardId(peer.id)),
-                onVisibilityChanged: onVisibilityChanged,
-                child: widget.peerCardBuilder(peer),
-              );
-              cards.add(isDesktop
-                  ? Obx(
-                      () => SizedBox(
-                        width: 220,
-                        height:
-                            peerCardUiType.value == PeerUiType.grid ? 140 : 42,
-                        child: visibilityChild,
-                      ),
-                    )
-                  : SizedBox(width: mobileWidth, child: visibilityChild));
-            }
-            final child =
-                Wrap(spacing: space, runSpacing: space, children: cards);
+            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);
+              },
+            );
             if (updateEvent == UpdateEvent.load) {
               _curPeers.clear();
               _curPeers.addAll(peers.map((e) => e.id));
diff --git a/flutter/lib/desktop/pages/connection_page.dart b/flutter/lib/desktop/pages/connection_page.dart
index 6d53ecc78..5990d11bb 100644
--- a/flutter/lib/desktop/pages/connection_page.dart
+++ b/flutter/lib/desktop/pages/connection_page.dart
@@ -138,7 +138,7 @@ class _ConnectionPageState extends State<ConnectionPage>
                   Divider().paddingOnly(right: 12),
                 ])),
                 SliverFillRemaining(
-                  hasScrollBody: false,
+                  hasScrollBody: true,
                   child: PeerTabPage().paddingOnly(right: 12.0),
                 )
               ],
diff --git a/flutter/lib/models/group_model.dart b/flutter/lib/models/group_model.dart
index 2765f36c9..0b2174f9f 100644
--- a/flutter/lib/models/group_model.dart
+++ b/flutter/lib/models/group_model.dart
@@ -145,15 +145,14 @@ class GroupModel {
       final pageSize = 100;
       var total = 0;
       int current = 0;
-      var queryParameters = {
-        'current': current.toString(),
-        'pageSize': pageSize.toString(),
-        'accessible': '',
-        'status': '1',
-        'user_status': '1',
-      };
       do {
         current += 1;
+        var queryParameters = {
+          'current': current.toString(),
+          'pageSize': pageSize.toString(),
+          'accessible': '',
+          'status': '1',
+        };
         var uri = Uri(
             scheme: uri0.scheme,
             host: uri0.host,
diff --git a/flutter/pubspec.lock b/flutter/pubspec.lock
index 6c18736d1..7cd9680f0 100644
--- a/flutter/pubspec.lock
+++ b/flutter/pubspec.lock
@@ -328,7 +328,7 @@ packages:
     description:
       path: "."
       ref: HEAD
-      resolved-ref: "e51fddf7f3b46d4423b7aa79ba824a45a1ea1b7a"
+      resolved-ref: e51fddf7f3b46d4423b7aa79ba824a45a1ea1b7a
       url: "https://github.com/rustdesk-org/rustdesk_desktop_multi_window"
     source: git
     version: "0.1.0"
@@ -396,6 +396,15 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "2.0.0"
+  dynamic_layouts:
+    dependency: "direct main"
+    description:
+      path: "packages/dynamic_layouts"
+      ref: "0023d01996576e494094793a6552463f01c5627a"
+      resolved-ref: "0023d01996576e494094793a6552463f01c5627a"
+      url: "https://github.com/flutter/packages.git"
+    source: git
+    version: "0.0.1+1"
   event_bus:
     dependency: transitive
     description:
diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml
index ba90bef3c..9c06d0bbf 100644
--- a/flutter/pubspec.yaml
+++ b/flutter/pubspec.yaml
@@ -100,6 +100,11 @@ dependencies:
   uuid: ^3.0.7
   auto_size_text_field: ^2.2.1
   flex_color_picker: ^3.3.0
+  dynamic_layouts:
+    git:
+      url: https://github.com/flutter/packages.git
+      path: packages/dynamic_layouts
+      ref: 0023d01996576e494094793a6552463f01c5627a
 
 dev_dependencies:
   icons_launcher: ^2.0.4