Flutter setState 改变状态,但不重新渲染

时间:2021-06-21 14:39:29

标签: flutter

假设我有一个小部件,如下所示:

class ContactUsWidget extends StatefulWidget {
  ContactUsWidget({Key key}) : super(key: key);

  @override
  _ContactUsWidgetState createState() => _ContactUsWidgetState();
}

class _ContactUsWidgetState extends State<ContactUsWidget> {
   bool isLoading = false;

   @override
     Widget build(BuildContext context) {
   return Form(...)
   }
}

在我的表单里面,我有一个堆栈:

Stack(
  children: [
    Container(
      color: isLoading ? Colors.grey : Colors.transparent,
    ),...
  ]
);

还有一个按钮:

FFButtonWidget(
    onPressed: () async {
       this.setState(() {
          isLoading = true;
          print(isLoading);
       });
                                               
       await sleep(Duration(seconds: 2));

       this.setState(() {
          isLoading = false;
          print(isLoading);
       });
    },
)

然而;当我按下按钮时,isLoading 的值会发生变化(正如我从打印中看到的那样),但小部件不会重新呈现,因为容器的颜色保持不变

1 个答案:

答案 0 :(得分:1)

问题是由 await sleep(Duration(seconds: 2)); 引起的,详见@pskink 的回答。