flutter - OpenContainer(动画包)中的 openBuilder 构建两次
问题描述
当我使用
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => SolvedQuizDetailsPage(),
),
);
SolvedQuizDetailsPage
(它是一个 StatelessWidget)只调用@override build
一次(这是预期的行为)。但是当我使用 OpenContainer 时:
return FutureBuilder(
future: SolvedQuiz.index(),
builder: (context, AsyncSnapshot<List<SolvedQuiz>> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, i) => OpenContainer(
openBuilder: (context, _) {
return SolvedQuizDetailsPage();
},
closedBuilder: (context, open) => ListTile(
title: Text(snapshot.data[i].quiz.title),
subtitle: Text(snapshot.data[i].quiz.description),
leading: CircleAvatar(
child: DeliverableIcon(status: snapshot.data[i].status),
),
// onTap: open,
),
),
);
} else {
return Center(child: CircularProgressIndicator());
}
},
);
小部件构建了两次
这个 print() 在@override build 的第一行
这还不是全部,例如,当我 使用此按钮返回时
我只需要构建一次小部件,因为每次构建它都必须发出一个 http 请求,在这种情况下它会发出多个不需要的请求。
编辑:当我删除所有断点时,会发生这种情况:
解决方案
这取决于length
您的data
. ListView.builder
根据其itemCount
属性重复构建。如果您只想构建SolvedQuizDetailsPage
一次,请将其从 中删除ListView
或更改itemCount
为 1
推荐阅读
- javascript - 如何使用clientWidth获取元素的宽度值?
- python - 保存到/打开 h5 文件时数组更改值
- filter - 在 Tableau 度量上创建简单的“大于”过滤器
- python - 如何使用正则表达式(TextFSM模板)单独匹配单行CLI输出(LLDP)的三个单独部分
- batch-file - 批处理文件读取特定属性的值并将其用作变量
- python - 如何使用外部字段序列化查询集?
- windows - TLS 1.0 客户端连接到我的 ASP .Net Core 服务时出错
- r - R:基于多个条件的两个数据帧的子集
- maps - 如何在 folium 的特定缩放级别之外隐藏标记和标记簇?
- arm - uint32_t 在 CMSIS 数学文件中似乎是未知的?