繁体   English   中英

Flutter setState()方法调用

[英]Flutter setState() method calling

由于我是Flutter的新开发人员,这让我很困惑何时应调用setState()?,如果我调用此方法,则整个应用程序都将在build()中重新加载(重绘视图)。 我想在树小部件结构中更新一个TextView小部件值

这是例子。 在fab上单击时,您仅重新创建_MyTextWidget

StreamController<int> _controller = StreamController<int>.broadcast();
int _seconds = 1;

Widget build(BuildContext context) {  
  return Scaffold(
    body: Container(
              color: Colors.cyan.withOpacity(0.3),
              width: 300.0,
              height: 200.0,
              child: _MyTextWidget(_controller.stream)),
            ),
    floatingActionButton: FloatingActionButton(
      onPressed: () {
        _controller.add(_seconds++);
      },
      child: Icon(Icons.add),
    ),
  );
}
...

class _MyTextWidget extends StatefulWidget {
  _MyTextWidget(this.stream);

  final Stream<int> stream;

  @override
  State<StatefulWidget> createState() => _MyTextWidgetState();
}

class _MyTextWidgetState extends State<_MyTextWidget> {
  int secondsToDisplay = 0;

  @override
  Widget build(BuildContext context) {
    return StreamBuilder(
        stream: widget.stream,
        builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
          return snapshot.hasData ? Text(snapshot.data.toString()) : Text('nodata');
        });
  }
}

为简单SetState() {}SetState() {}使在其中被调用的窗口小部件无效,并通过调用build()强制窗口小部件重建自身。 这意味着每个子小部件都将被重建。

与使用SetState () {}相比,还有其他方法可用于将数据传递到树上的小部件并使其自身(及其所有子类)重建。 这些确实有用,特别是如果要重建的小部件与小部件树中的部件相距甚远。

其中之一是@ andrey-turkovsky提供的示例,该示例结合使用StreamBuilderStream StreamBuidler是一个小部件,当Stream存在交互时,它会自行重建。 基于此,我们的想法是将TextView包装在StreamBuilder ,并使用流发送您希望TextView显示的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM