当我引用屏幕或在页面视图中导航回来时,我想保留当前页面 这是代码,实际上我想以编程方式显示特定的索引屏幕,而无需单击按钮。有时我的controller.hasClients 变空了。如果页面视图有 3 个屏幕,如果我在第二个屏幕上刷新第二个屏幕,则应显示第二个屏幕,而不是始终显示第一个屏幕。我使用页面控制器来显示,但无法实例化页面控制器,因为我想从页面视图的顶部小部件进行访问。请帮忙
Container(
// width: 370,
height: MediaQuery.of(context).size.height * 0.685,
child: Stack(children: <Widget>[
_pages(),
Stack(
children: <Widget>[
Align(
alignment: Alignment.bottomCenter,
child: Container(
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
for (int i = 0; i < 3; i++)
(i == currentPage
? circleBar(true)
: circleBar(false))
],
),
),
),
],
),
]),
),
Widget _pages() {
List _pagesList = [
FirstScreen(
),
SecondScreen(
),
ThirdScreen(
),
];
return PageView.builder(
controller: _pageController,
itemCount: _pagesList.length,
// restorationId: currentPage.toString(),
itemBuilder: (BuildContext context, int index) {
// _pageController=PageController(initialPage: currentPage);
return _pagesList[index];
},
onPageChanged: (int page) {
setState(() {
currentPage = page;
selected = analyticsList[currentPage].anlyticName;
isIndexChanged = true;
page;
});
},
);
}
对于命名路线,您可以使用此代码。
Navigator.pushNamed(context, '/screen2').then((_) {
// This block runs when you have returned back from screen 2.
setState(() {
// code here to refresh data
});
});
首先保存当前页面并在pages()中实例化页面控制器,这对我有用
我只是在我的代码中的pages()中实例化了页面控制器,就好像在顶部声明它不会在每次刷新时读取,所以我声明了页面视图的构建位置。
Widget _pages() {
_pageController= PageController(initialPage: currentPage, keepPage: true);
List _pagesList = [
FirstScreen(
),
SecondScreen(
),
ThirdScreen(
),
];
return PageView.builder(
controller: _pageController,
itemCount: _pagesList.length,
// restorationId: currentPage.toString(),
itemBuilder: (BuildContext context, int index) {
return _pagesList[index];
},
onPageChanged: (int page) {
setState(() {
currentPage = page;
selected = analyticsList[currentPage].anlyticName;
isIndexChanged = true;
page;
});
},
);
}
您应该尝试循环页面视图https://pub.dev/packages/loop_page_view 这是一个非常简单的插件
import 'package:flutter/material.dart';
import 'package:loop_page_view/loop_page_view.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Loop Page View Demo'),
),
body: Center(
child: LoopPageView.builder(
itemCount: 2,
itemBuilder: (_, index) {
return Card(
child: Center(
child: Text('$index'),
),
);
},
),
),
),
);
}
}