refactor: global scroll

This commit is contained in:
Kingtous
2022-09-28 11:20:57 +08:00
parent 215f0575a7
commit 1412d9c3ba
6 changed files with 78 additions and 72 deletions

View File

@@ -18,7 +18,6 @@ class PeerTabPage extends StatefulWidget {
class _PeerTabPageState extends State<PeerTabPage>
with SingleTickerProviderStateMixin {
late final PageController _pageController = PageController();
final RxInt _tabIndex = 0.obs;
@override
@@ -28,7 +27,6 @@ class _PeerTabPageState extends State<PeerTabPage>
if (value == '') return;
final tab = int.parse(value);
_tabIndex.value = tab;
_pageController.jumpToPage(tab);
});
await bind.mainGetLocalOption(key: 'peer-card-ui-type').then((value) {
if (value == '') return;
@@ -45,7 +43,6 @@ class _PeerTabPageState extends State<PeerTabPage>
_tabIndex.value = index;
await bind.mainSetLocalOption(
key: 'peer-tab-index', value: index.toString());
_pageController.jumpToPage(index);
switch (index) {
case 0:
bind.mainLoadRecentPeers();
@@ -64,7 +61,6 @@ class _PeerTabPageState extends State<PeerTabPage>
@override
void dispose() {
_pageController.dispose();
super.dispose();
}
@@ -82,7 +78,7 @@ class _PeerTabPageState extends State<PeerTabPage>
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(child: _createTabBar(context)),
Expanded(child: _createSwitchBar(context)),
const SizedBox(width: 10),
const PeerSearchBar(),
Offstage(
@@ -92,12 +88,12 @@ class _PeerTabPageState extends State<PeerTabPage>
],
)),
),
_createTabBarView(),
_createPeersView(),
],
);
}
Widget _createTabBar(BuildContext context) {
Widget _createSwitchBar(BuildContext context) {
final textColor = Theme.of(context).textTheme.titleLarge?.color;
return ListView(
scrollDirection: Axis.horizontal,
@@ -131,17 +127,13 @@ class _PeerTabPageState extends State<PeerTabPage>
}).toList());
}
Widget _createTabBarView() {
Widget _createPeersView() {
final verticalMargin = isDesktop ? 12.0 : 6.0;
return Expanded(
child: PageView(
physics: isDesktop
? NeverScrollableScrollPhysics()
: BouncingScrollPhysics(),
controller: _pageController,
children: super.widget.children,
onPageChanged: (to) => _tabIndex.value = to)
.marginSymmetric(vertical: verticalMargin));
child: Obx(() => widget
.children[_tabIndex.value]) //: (to) => _tabIndex.value = to)
.marginSymmetric(vertical: verticalMargin),
);
}
Widget _createPeerViewTypeSwitch(BuildContext context) {

View File

@@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hbb/consts.dart';
import 'package:flutter_hbb/desktop/widgets/scroll_wrapper.dart';
import 'package:get/get.dart';
import 'package:provider/provider.dart';
@@ -25,12 +26,14 @@ class _PeersView extends StatefulWidget {
final Peers peers;
final OffstageFunc offstageFunc;
final PeerCardBuilder peerCardBuilder;
final ScrollController? scrollController;
const _PeersView(
{required this.peers,
required this.offstageFunc,
required this.peerCardBuilder,
Key? key})
Key? key,
this.scrollController})
: super(key: key);
@override
@@ -42,7 +45,6 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
static const int _maxQueryCount = 3;
final space = isDesktop ? 12.0 : 8.0;
final _curPeers = <String>{};
final _scrollController = ScrollController();
var _lastChangeTime = DateTime.now();
var _lastQueryPeers = <String>{};
var _lastQueryTime = DateTime.now().subtract(const Duration(hours: 1));
@@ -93,9 +95,10 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
create: (context) => widget.peers,
child: Consumer<Peers>(
builder: (context, peers, child) => peers.peers.isEmpty
? Center(
child: Text(translate("Empty")),
)
? Container(
margin: EdgeInsets.only(top: kEmptyMarginTop),
alignment: Alignment.topCenter,
child: Text(translate("Empty")))
: _buildPeersView(peers)),
);
}
@@ -147,21 +150,7 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
);
}, peerSearchText);
if (isDesktop) {
return DesktopScrollWrapper(
scrollController: _scrollController,
child: SingleChildScrollView(
physics: NeverScrollableScrollPhysics(),
controller: _scrollController,
child: body),
);
} else {
return SingleChildScrollView(
physics: BouncingScrollPhysics(),
controller: _scrollController,
child: body,
);
}
return body;
}
// ignore: todo
@@ -224,7 +213,8 @@ abstract class BasePeersView extends StatelessWidget {
}
class RecentPeersView extends BasePeersView {
RecentPeersView({Key? key, EdgeInsets? menuPadding})
RecentPeersView(
{Key? key, EdgeInsets? menuPadding, ScrollController? scrollController})
: super(
key: key,
name: 'recent peer',
@@ -246,7 +236,8 @@ class RecentPeersView extends BasePeersView {
}
class FavoritePeersView extends BasePeersView {
FavoritePeersView({Key? key, EdgeInsets? menuPadding})
FavoritePeersView(
{Key? key, EdgeInsets? menuPadding, ScrollController? scrollController})
: super(
key: key,
name: 'favorite peer',
@@ -268,7 +259,8 @@ class FavoritePeersView extends BasePeersView {
}
class DiscoveredPeersView extends BasePeersView {
DiscoveredPeersView({Key? key, EdgeInsets? menuPadding})
DiscoveredPeersView(
{Key? key, EdgeInsets? menuPadding, ScrollController? scrollController})
: super(
key: key,
name: 'discovered peer',
@@ -290,7 +282,8 @@ class DiscoveredPeersView extends BasePeersView {
}
class AddressBookPeersView extends BasePeersView {
AddressBookPeersView({Key? key, EdgeInsets? menuPadding})
AddressBookPeersView(
{Key? key, EdgeInsets? menuPadding, ScrollController? scrollController})
: super(
key: key,
name: 'address book peer',