Merge pull request #5808 from 21pages/mobile
mobile scrollable peers view
This commit is contained in:
		
						commit
						28b28cfef6
					
				| @ -1,3 +1,5 @@ | |||||||
|  | import 'dart:math'; | ||||||
|  | 
 | ||||||
| import 'package:dynamic_layouts/dynamic_layouts.dart'; | import 'package:dynamic_layouts/dynamic_layouts.dart'; | ||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
| import 'package:flutter_hbb/common/formatter/id_formatter.dart'; | import 'package:flutter_hbb/common/formatter/id_formatter.dart'; | ||||||
| @ -170,16 +172,18 @@ class _AddressBookState extends State<AddressBook> { | |||||||
|             }); |             }); | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       return isDesktop |       final gridView = DynamicGridView.builder( | ||||||
|           ? DynamicGridView.builder( |           shrinkWrap: isMobile, | ||||||
|               gridDelegate: SliverGridDelegateWithWrapping( |           gridDelegate: SliverGridDelegateWithWrapping(), | ||||||
|                   mainAxisSpacing: 0, crossAxisSpacing: 0), |  | ||||||
|           itemCount: tags.length, |           itemCount: tags.length, | ||||||
|           itemBuilder: (BuildContext context, int index) { |           itemBuilder: (BuildContext context, int index) { | ||||||
|             final e = tags[index]; |             final e = tags[index]; | ||||||
|             return tagBuilder(e); |             return tagBuilder(e); | ||||||
|               }) |           }); | ||||||
|           : Wrap(children: tags.map((e) => tagBuilder(e)).toList()); |       final maxHeight = max(MediaQuery.of(context).size.height / 6, 100.0); | ||||||
|  |       return isDesktop | ||||||
|  |           ? gridView | ||||||
|  |           : LimitedBox(maxHeight: maxHeight, child: gridView); | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,3 +1,5 @@ | |||||||
|  | import 'dart:math'; | ||||||
|  | 
 | ||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
| import 'package:flutter_hbb/common/hbbs/hbbs.dart'; | import 'package:flutter_hbb/common/hbbs/hbbs.dart'; | ||||||
| import 'package:flutter_hbb/common/widgets/login.dart'; | import 'package:flutter_hbb/common/widgets/login.dart'; | ||||||
| @ -157,11 +159,14 @@ class _MyGroupState extends State<MyGroup> { | |||||||
|         } |         } | ||||||
|         return true; |         return true; | ||||||
|       }).toList(); |       }).toList(); | ||||||
|       return isDesktop |       final listView = ListView.builder( | ||||||
|           ? ListView.builder( |           shrinkWrap: isMobile, | ||||||
|           itemCount: items.length, |           itemCount: items.length, | ||||||
|               itemBuilder: (context, index) => _buildUserItem(items[index])) |           itemBuilder: (context, index) => _buildUserItem(items[index])); | ||||||
|           : Column(children: items.map((e) => _buildUserItem(e)).toList()); |       var maxHeight = max(MediaQuery.of(context).size.height / 6, 100.0); | ||||||
|  |       return isDesktop | ||||||
|  |           ? listView | ||||||
|  |           : LimitedBox(maxHeight: maxHeight, child: listView); | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -176,7 +176,8 @@ class _PeersViewState extends State<_PeersView> with WindowListener { | |||||||
|       return FutureBuilder<List<Peer>>( |       return FutureBuilder<List<Peer>>( | ||||||
|         builder: (context, snapshot) { |         builder: (context, snapshot) { | ||||||
|           if (snapshot.hasData) { |           if (snapshot.hasData) { | ||||||
|             final peers = snapshot.data!; |             var peers = snapshot.data!; | ||||||
|  |             if (peers.length > 1000) peers = peers.sublist(0, 1000); | ||||||
|             gFFI.peerTabModel.setCurrentTabCachedPeers(peers); |             gFFI.peerTabModel.setCurrentTabCachedPeers(peers); | ||||||
|             buildOnePeer(Peer peer) { |             buildOnePeer(Peer peer) { | ||||||
|               final visibilityChild = VisibilityDetector( |               final visibilityChild = VisibilityDetector( | ||||||
| @ -196,9 +197,7 @@ class _PeersViewState extends State<_PeersView> with WindowListener { | |||||||
|                   : SizedBox(width: mobileWidth, child: visibilityChild); |                   : SizedBox(width: mobileWidth, child: visibilityChild); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             final Widget child; |             final child = DynamicGridView.builder( | ||||||
|             if (isDesktop) { |  | ||||||
|               child = DynamicGridView.builder( |  | ||||||
|               gridDelegate: SliverGridDelegateWithWrapping( |               gridDelegate: SliverGridDelegateWithWrapping( | ||||||
|                   mainAxisSpacing: space / 2, crossAxisSpacing: space), |                   mainAxisSpacing: space / 2, crossAxisSpacing: space), | ||||||
|               itemCount: peers.length, |               itemCount: peers.length, | ||||||
| @ -206,13 +205,6 @@ class _PeersViewState extends State<_PeersView> with WindowListener { | |||||||
|                 return buildOnePeer(peers[index]); |                 return buildOnePeer(peers[index]); | ||||||
|               }, |               }, | ||||||
|             ); |             ); | ||||||
|             } else { |  | ||||||
|               child = Wrap( |  | ||||||
|                   spacing: space, |  | ||||||
|                   runSpacing: space, |  | ||||||
|                   children: peers.map((e) => buildOnePeer(e)).toList()); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             if (updateEvent == UpdateEvent.load) { |             if (updateEvent == UpdateEvent.load) { | ||||||
|               _curPeers.clear(); |               _curPeers.clear(); | ||||||
|               _curPeers.addAll(peers.map((e) => e.id)); |               _curPeers.addAll(peers.map((e) => e.id)); | ||||||
|  | |||||||
| @ -125,8 +125,7 @@ void runMainApp(bool startService) async { | |||||||
|     bind.pluginSyncUi(syncTo: kAppTypeMain); |     bind.pluginSyncUi(syncTo: kAppTypeMain); | ||||||
|     bind.pluginListReload(); |     bind.pluginListReload(); | ||||||
|   } |   } | ||||||
|   gFFI.abModel.loadCache(); |   await Future.wait([gFFI.abModel.loadCache(), gFFI.groupModel.loadCache()]); | ||||||
|   gFFI.groupModel.loadCache(); |  | ||||||
|   gFFI.userModel.refreshCurrentUser(); |   gFFI.userModel.refreshCurrentUser(); | ||||||
|   runApp(App()); |   runApp(App()); | ||||||
|   // Set window option. |   // Set window option. | ||||||
| @ -154,8 +153,7 @@ void runMobileApp() async { | |||||||
|   await initEnv(kAppTypeMain); |   await initEnv(kAppTypeMain); | ||||||
|   if (isAndroid) androidChannelInit(); |   if (isAndroid) androidChannelInit(); | ||||||
|   platformFFI.syncAndroidServiceAppDirConfigPath(); |   platformFFI.syncAndroidServiceAppDirConfigPath(); | ||||||
|   gFFI.abModel.loadCache(); |   await Future.wait([gFFI.abModel.loadCache(), gFFI.groupModel.loadCache()]); | ||||||
|   gFFI.groupModel.loadCache(); |  | ||||||
|   gFFI.userModel.refreshCurrentUser(); |   gFFI.userModel.refreshCurrentUser(); | ||||||
|   runApp(App()); |   runApp(App()); | ||||||
| } | } | ||||||
|  | |||||||
| @ -80,7 +80,7 @@ class _ConnectionPageState extends State<ConnectionPage> { | |||||||
|           _buildRemoteIDTextField(), |           _buildRemoteIDTextField(), | ||||||
|         ])), |         ])), | ||||||
|         SliverFillRemaining( |         SliverFillRemaining( | ||||||
|           hasScrollBody: false, |           hasScrollBody: true, | ||||||
|           child: PeerTabPage(), |           child: PeerTabPage(), | ||||||
|         ) |         ) | ||||||
|       ], |       ], | ||||||
|  | |||||||
| @ -478,7 +478,7 @@ class AbModel { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   loadCache() async { |   Future<void> loadCache() async { | ||||||
|     try { |     try { | ||||||
|       if (_cacheLoadOnceFlag || abLoading.value || initialized) return; |       if (_cacheLoadOnceFlag || abLoading.value || initialized) return; | ||||||
|       _cacheLoadOnceFlag = true; |       _cacheLoadOnceFlag = true; | ||||||
|  | |||||||
| @ -173,9 +173,6 @@ class GroupModel { | |||||||
|         } |         } | ||||||
|         if (json.containsKey('total')) { |         if (json.containsKey('total')) { | ||||||
|           if (total == 0) total = json['total']; |           if (total == 0) total = json['total']; | ||||||
|           if (total > 1000) { |  | ||||||
|             total = 1000; |  | ||||||
|           } |  | ||||||
|           if (json.containsKey('data')) { |           if (json.containsKey('data')) { | ||||||
|             final data = json['data']; |             final data = json['data']; | ||||||
|             if (data is List) { |             if (data is List) { | ||||||
| @ -188,9 +185,6 @@ class GroupModel { | |||||||
|                 } else { |                 } else { | ||||||
|                   tmpPeers[index] = peer; |                   tmpPeers[index] = peer; | ||||||
|                 } |                 } | ||||||
|                 if (tmpPeers.length >= 1000) { |  | ||||||
|                   break; |  | ||||||
|                 } |  | ||||||
|               } |               } | ||||||
|             } |             } | ||||||
|           } |           } | ||||||
| @ -231,7 +225,7 @@ class GroupModel { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   loadCache() async { |   Future<void> loadCache() async { | ||||||
|     try { |     try { | ||||||
|       if (_cacheLoadOnceFlag || groupLoading.value || initialized) return; |       if (_cacheLoadOnceFlag || groupLoading.value || initialized) return; | ||||||
|       _cacheLoadOnceFlag = true; |       _cacheLoadOnceFlag = true; | ||||||
|  | |||||||
| @ -400,11 +400,11 @@ packages: | |||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       path: "packages/dynamic_layouts" |       path: "packages/dynamic_layouts" | ||||||
|       ref: "0023d01996576e494094793a6552463f01c5627a" |       ref: "74cc4b495dcf3a4cb8df38d9ecc89f53f074a2c6" | ||||||
|       resolved-ref: "0023d01996576e494094793a6552463f01c5627a" |       resolved-ref: "74cc4b495dcf3a4cb8df38d9ecc89f53f074a2c6" | ||||||
|       url: "https://github.com/flutter/packages.git" |       url: "https://github.com/21pages/packages.git" | ||||||
|     source: git |     source: git | ||||||
|     version: "0.0.1+1" |     version: "0.0.1+2" | ||||||
|   event_bus: |   event_bus: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|  | |||||||
| @ -102,9 +102,9 @@ dependencies: | |||||||
|   flex_color_picker: ^3.3.0 |   flex_color_picker: ^3.3.0 | ||||||
|   dynamic_layouts: |   dynamic_layouts: | ||||||
|     git: |     git: | ||||||
|       url: https://github.com/flutter/packages.git |       url: https://github.com/21pages/packages.git | ||||||
|       path: packages/dynamic_layouts |       path: packages/dynamic_layouts | ||||||
|       ref: 0023d01996576e494094793a6552463f01c5627a |       ref: 74cc4b495dcf3a4cb8df38d9ecc89f53f074a2c6 | ||||||
| 
 | 
 | ||||||
| dev_dependencies: | dev_dependencies: | ||||||
|   icons_launcher: ^2.0.4 |   icons_launcher: ^2.0.4 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user