![](/img/trans.png)
[英]Flutter: SnackBar not displayed after calling setState() method
[英]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提供的示例,該示例結合使用StreamBuilder
和Stream
。 StreamBuidler
是一個小部件,當Stream
存在交互時,它會自行重建。 基於此,我們的想法是將TextView
包裝在StreamBuilder
,並使用流發送您希望TextView
顯示的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.