[英]flutter_pagewise library does not preserve page (scroll) state on tabbing away
我正在使用flutter_pagewise
库,并根据库的文档实现了分页网格(按照他们在https://pub.dev/packages/flutter_pagewise/example的示例),它通过网络获取占位符图像和文本。
在我的应用程序中,我有 2 个页面(一个称为PaginatedGrid
,另一个称为SearchPage
),我可以通过 BottomNavigationBar 切换到它们。 但是,当我切换到SearchPage
,然后切换回 PaginatedGrid 时, PaginatedGrid
网格滚动 state 不会保留。 分页从头开始,屏幕滚动回顶部。
import 'package:myproject/my_events/my_events_page.dart';
import 'package:myproject/search/search_page.dart';
import 'package:myproject/widget/paginated_grid.dart';
import 'package:flutter/material.dart';
class PageWrapper extends StatefulWidget {
@override
_PageWrapperState createState() => _PageWrapperState();
}
class _PageWrapperState extends State<PageWrapper> {
ScrollController _scrollController = ScrollController();
int _curIndex = 0;
List<Widget> _pages;
final bucket = PageStorageBucket();
final Key searchPageKey = PageStorageKey('searchKey');
final Key paginatedGridKey = PageStorageKey('paginatedGrid');
@override
void initState() {
_pages = [
PaginatedGrid(key: paginatedGridKey),
SearchPage(key: searchPageKey)
];
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: PageStorage(
bucket: bucket,
child: CustomScrollView(
key: PageStorageKey(_pages[_curIndex].runtimeType.toString()),
controller: _scrollController,
slivers: <Widget>[SliverAppBar(), _pages[_curIndex]],
),
),
bottomNavigationBar: BottomNavigationBar(
onTap: (int i) {
setState(() {
_curIndex = i;
});
},
currentIndex: _curIndex,
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Browse',
),
BottomNavigationBarItem(
icon: Icon(Icons.search),
label: 'Search',
)
],
),
);
}
}
Any help would be appreciated.
使用 indexedStack 是一种有效的解决方案。 分页的 state 在从底部导航栏导航到另一个选项卡时保留。
不要使用 PageStorage 小部件,而是使用 IndexedStack 小部件。
@override
Widget build(BuildContext context) {
return Scaffold(
body: IndexedStack(
index: currentTab,
children: pages,
),
bottomNavigationBar: BottomNavigationBar(
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.