Flutter - 如何在加载UI前动态添加容器的高度值?

问题描述 投票:0回答:1

我已经添加了一个 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;
    });
  }
flutter dart flutter-layout
1个回答
1
投票

在构建过程中不可能调用setState,这是有充分理由的。setState运行构建方法。因此,如果你能够在构建过程中调用setState,它将无限循环构建方法,因为它本质上是在调用自己。

请看这篇文章。它有一个基于StreamBuilder的条件渲染的例子。https:/medium.com@sidkyusing-streambuilder-in-flutter-dcc2d89c2eae。


0
投票

删除了 setState 按照 @CodePoet 的建议,从方法调用中提取,实际上工作得很好。

     _expandHeightBy(double increase) {
       _expandedHeightVal += increase;
     }
© www.soinside.com 2019 - 2024. All rights reserved.