簡體   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