我已经添加了一个 setState
内的方法 build
通过StreamBuilder从API响应中获取数据后,widget。但它给出了这个错误。
Unhandled Exception:
setState()
或markNeedsBuild()
构建过程中被调用。
我如何避免这种情况?
我的代码
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: StreamBuilder(
stream: bloc.getData,
builder: (context, AsyncSnapshot<Home> dataSnapshot) {
if (dataSnapshot.hasData) {
if (dataSnapshot.data.description != null) _expandHeightBy(40);
........
我的代码是:
_expandHeightBy(double increase) async {
setState(() {
_expandedHeightVal += increase;
});
}
在构建过程中不可能调用setState,这是有充分理由的。setState运行构建方法。因此,如果你能够在构建过程中调用setState,它将无限循环构建方法,因为它本质上是在调用自己。
请看这篇文章。它有一个基于StreamBuilder的条件渲染的例子。https:/medium.com@sidkyusing-streambuilder-in-flutter-dcc2d89c2eae。
删除了 setState
按照 @CodePoet 的建议,从方法调用中提取,实际上工作得很好。
_expandHeightBy(double increase) {
_expandedHeightVal += increase;
}