flutter - 如何防止在颤振中重建有状态的小部件
问题描述
我正在从 api(屏幕 1)加载数据,并在单击项目时打开一个带有新状态小部件的新屏幕(屏幕 2)。但是现在当我从屏幕 2 按返回箭头时,我可以看到屏幕 1,但它再次调用 api。当我们从屏幕 2 回到屏幕 1 时,我不想那样做。
屏幕 1 代码:
class Screen1 extends StatefulWidget {
@override
_Screen1State createState() => _Screen1State();
}
class _Screen1 State
extends State<Screen1> with AutomaticKeepAliveClientMixin<Screen1>
{
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: getdata(), //api calling
builder: (BuildContext context, AsyncSnapshot snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
// TODO: Handle this case.
case ConnectionState.waiting:
//my code
case ConnectionState.active:
// TODO: Handle this case.
case ConnectionState.done:
if (snapshot.connectionState == ConnectionState.done) {
return showdata(snapshot.data);
}
}
});
}
Widget showdata(Response data) {
return ListView.builder(
itemCount: 1,
itemBuilder: (BuildContext context, int index) {
return Container(
decoration: BoxDecoration(color: Colors.white),
child: ListTile(
onTap: () {
Navigator.push(context,
MaterialPageRoute(builder: (_) => Screen2()));
},
)
);
});
@override
// TODO: implement wantKeepAlive
bool get wantKeepAlive => true;
}
屏幕 2:
class Screen2 extends StatefulWidget {
@override
_Screen2State createState() => _Screen2State();
}
class _Screen2State extends State<Screen2> {
@override
Widget build(BuildContext context) {
return Container();
}
}
当我从屏幕 2 返回时,如何防止再次重建屏幕 1?
解决方案
推荐阅读
- unity3d - Unity 中的 Blender 对象上的材质无法正确显示
- powershell - Powershell WMI Win32_LogicalDisk - 在 FreeSpace 上进行过滤
- spring-boot - 对等 io.netty.channel.unix.Errors$NativeIoException 重置连接
- javascript - 如何使用导入语句传递凭据?
- php - 在将视频上传到 PHP mysql 之前重命名视频
- boost - 为什么我不能使用 Boost ASIO 多次接收 UDP 数据包?
- apache-spark - Spark - Kudu 谓词下推
- ruby-on-rails - 第一个 Ruby On Rails 应用程序的问题
- html - 系统声音作为输入(Web 音频 API)
- r - 收到错误说明“错误:`x` 必须是公式”