【发布时间】:2021-01-05 23:08:57
【问题描述】:
我有一个IndexedStack 有 4 个孩子,作为可以更改的 4 个选项卡。所有其他 3 个简单的都运行良好,但是如果切换到第 4 个孩子正在重建。如何预防?
孩子是一个自定义的StatefulWidget(我们称之为A),它构建了一个FutureBuilder。如果成功从网上获取数据,则返回另一个自定义的StatfulWidget(我们称之为B)。 B 也有一个 FutureBuilder,最终返回的内容基本上是 Scaffold 中的 NestedScrollView,并且有自己的标签视图。
我希望它的滚动位置在选项卡之间切换时保持在原来的位置。可能的原因是什么?顺便说一句,我尝试将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();
},
);
}
【问题讨论】:
-
你能把你第四个孩子的代码贴出来吗?
-
是
initState()每次切换到第4个孩子时调用? -
@Henok 整个孩子太复杂而无法简化,它几乎占我应用程序代码的 30%。很难简化它。因此,我在问题中描述了我的结构,试图找出可能来自比我更有经验的专业人士的任何潜在原因。
-
我只是想看看你是如何在 FutureBuilder 中存储你的未来的,如果可以的话在这里评论一下
-
@pskink 孩子本身的
initState()不会每次都被调用。但是内在小孩(B)的initState()被一遍又一遍地调用。