flutter - 按下后退按钮时,颤动的 PageView 页面索引不会持续存在
问题描述
我的home.dart
文件中有一个 PageView,并且希望每当用户home.dart
从另一个页面导航回文件时,选择的索引保持不变。目前,首页索引为ImageFeedPage
. 如果有人要转到ChatPage
,打开其中一个对话,然后按后退按钮,他们将被带回第一个索引,即ImageFeedPage
,而不是ChatPage
。
关于如何更正此问题以使所选索引在导航回时仍处于选中状态的任何想法?
主页.dart
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
PageController pageController;
int pageIndex = 0;
@override
void initState() {
super.initState();
pageController = PageController();
}
@override
void dispose() {
pageController.dispose();
super.dispose();
}
onPageChanged(int pageIndex) {
if (pageIndex != 1 && pageIndex != 2) {
setState(() {
this.pageIndex = pageIndex;
});
}
}
onTap(int pageIndex, User user) {
if (pageIndex == 1) {
SearchPage.show(context);
} else if (pageIndex == 2) {
AddProductPage.show(context);
} else {
pageController.jumpToPage(pageIndex);
}
}
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
return Scaffold(
body: PageView(
children: <Widget>[
ImageFeedPage(),
new Container(),
new Container(),
ClosetPage(),
ChatPage(),
],
controller: pageController,
onPageChanged: onPageChanged,
physics: NeverScrollableScrollPhysics(),
),
bottomNavigationBar: CupertinoTabBar(
backgroundColor: Colors.white,
currentIndex: pageIndex,
onTap: (pageIndex) => onTap(pageIndex, user),
activeColor: Theme.of(context).primaryColor,
items: _buildMenuItems(),
),
);
}
聊天页面.dart
class ChatPage extends StatefulWidget {
@override
_ChatPageState createState() => _ChatPageState();
}
class _ChatPageState extends State<ChatPage> {
final Widget pageTitle = Text('Active Chats');
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 2,
child: Scaffold(
// Need to use CustomAppBar
appBar: new AppBar(
backgroundColor: new Color(0xfff8faf8),
centerTitle: true,
elevation: 1.0,
title: pageTitle,
bottom: new CustomTabBar(
tabs: <Tab>[
new Tab(text: 'As Buyer'),
new Tab(text: 'As Seller'),
],
),
),
drawer: Sidebar(),
body: _buildTabView(context),
),
);
}
Widget _buildTabView(context) {
return new TabBarView(
children: <Widget>[
new ListTile(
title: new Text(
'John',
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
onTap: () {
return MessagesPage.show(context); <--- Goes to the message page, but pressing back (once opened) takes you to the first index of the PageView, not the ChatPage
},
),
ChatList(
messageType: 'seller',
),
],
);
}
}
解决方案
推荐阅读
- mysql - Mysql 在多边形中查找点。
- javascript - 将 javascript $.get 响应推送到变量中
- jquery - 动画或过渡在溢出属性中不起作用
- php - 如何使用表格 + 按钮将数据发送到 php 页面
- git - 使用新分支使未初始化的 git 项目成为新的主分支?
- javascript - ng-repeat 标签不会刷新模型中的数据
- python - Firefox 的自定义代理配置
- android - AlertDialog.Builder 不会显示在当前片段中
- google-chrome - 网站图片变灰
- javascript - Javascript智能过滤对象数组