flutter - Flutter 使用 PageController 从另一个类更改 PageView
问题描述
帮助我是一个颤振的新手,我已经构建了一个具有 OnTap TapGestureRecognizer 函数的文件,我试图在第二页中管理 pageView。我尝试了一些不同的选项,但我无法弄清楚如何让 pageController 更改第二页上的页面视图。
根类
class RootApp extends StatefulWidget {
@override
RootAppState createState() => RootAppState();
}
class RootAppState extends State<RootApp> {
bool isFavorite = false;
int pageIndex = 0;
PageController _pgController = PageController();
void pgCont(pg){
_pgController.animateToPage(pg, duration: Duration(milliseconds: 250), curve: Curves.bounceInOut);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: PageView(controller: _pgController,
children: <Widget>[
getBody1() ,
getBody2(),
]),
bottomNavigationBar: getFooter(),
);
}
标题首页类
class HeaderHomePage extends StatelessWidget {
HeaderHomePage({
Key ?key
}) : super(key: key);
RootAppState rooting = RootAppState();
}
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text.rich(
TextSpan(
text: "Body1",
recognizer: TapGestureRecognizer()
..onTap = (){
print('He Clicked Body1');
rooting.pgCont(1);
},
SizedBox(
width: 8,
),
Text.rich(
TextSpan(
text: "Body2",
recognizer: TapGestureRecognizer()
..onTap = (){
print('She clicked Body2');
rooting.pgCont(2);
},),
style: TextStyle(
color: white, fontSize: 17, fontWeight: FontWeight.w500),
)
],
);
请帮助我被困在看起来很简单的事情上,我在这里错过了什么或做错了什么?
解决方案
在RootAppState
课堂上
void pgCont(pg){
if(_pgController.hasClients) {
_pgController.animateToPage(pg, duration: Duration(milliseconds: 250), curve: Curves.bounceInOut);
}
}
在HeaderHome
课堂上
onTap = (){
print('She clicked Body2');
rooting.pgCont(0); // index starts from 0
},
从另一个小部件调用另一个小部件的状态是不明智的。您应该使用回调来处理来自其他 State 类的代码。
https://www.geeksforgeeks.org/flutter-working-with-callback-functions/
推荐阅读
- excel - 转到具有另一个单元格中的地址的特定单元格
- java - 我想通过蓝牙getRemoteDevice函数或其他函数知道设备的存在
- javascript - 如何在 FullCalendar.js 中仅显示事件出现的行
- flutter - 对话框在颤动中同时打开多次
- java - Java 12 无法访问 org.openqa.selenium.chrome.ChromeDriver 类型
- node.js - http请求仅在实际部署在服务器上时才花费太多时间
- android - 如何将谷歌助手集成到android中以进行原生应用程序?
- terminal - 如何在 ubunut 的 Kdevelop 中添加内部控制台/终端?
- regex - 如何使用正则表达式 grep 特定的 IP 地址?
- php - 为数组中的不同值创建不同的时间戳:PHP