我有一个IndexedStack
,有4个孩子,可以更改4个标签。所有其他3个简单的子程序都运行良好,但是如果切换到第4个子程序,则正在对其进行重建。如何预防呢?
孩子是一个自定义的StatefulWidget
(简称为A),它构建了一个FutureBuilder
。如果从网上成功获取了数据,那么它将返回另一个自定义的StatfulWidget
(我们将其称为B)。 B也有一个FutureBuilder
,最终在NestedScrollView
中返回了一个基本上是Scaffold
的东西,并且拥有自己的标签视图。
我希望它的滚动位置保持在选项卡之间切换时的位置。可能是什么原因?顺便说一句,我尝试将AutomaticKeepAliveClientMixin
添加到自定义的StatefulWidget
中,仍然一样。
可能有用的代码: 窗口小部件A:
@override
Widget build(BuildContext context) {
return FutureBuilder<bool>(
future: MainMgr.instance.isLoggedIn(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting)
return Center(child: CircularProgressIndicator());
else if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError)
return Text(snapshot.error);
else {
if (snapshot.data)
return Stack(
children: [
UserProfile(
MainMgr.instance.selfCOUserID,
null,
showBackButton: false,
),
Positioned(
top: 60,
child: RaisedButton(
child: Text('Log out'),
color: Color.fromARGB(255, 29, 161, 242),
onPressed: () async {
await MainMgr.instance.logout();
setState(() {});
},
),
),
],
);
else
return LoginSignupPage();
}
} else
return Container();
},
);
}
答案 0 :(得分:1)
//below your class's state
Future future;
//inside your init state add
future = MainMgr.instance.isLoggedIn();
//inside your FutureBuilder
return FutureBuilder<bool>(
future: future,//here is whats important
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting)
return Center(child: Cir
//rest of the code