openBuilder从OpenContainer(动画包)构建两次



当我使用

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请求,在这种情况下,它使多个不需要的请求。

编辑:当我删除所有断点时,会发生以下情况:

使用相同的x行

这取决于您的datalengthListView.builder根据其itemCount属性重复构建。如果您只想构建一次SolvedQuizDetailsPage,要么从ListView中删除它,要么将itemCount更改为1

最新更新