gpt4 book ai didi

flutter setstate 只重建一个 child

转载 作者:行者123 更新时间:2023-12-03 03:38:55 26 4
gpt4 key购买 nike

在 flutter 中,我需要在调用 setstate 时,它​​只重建一个小部件

我将 2 个 child 放在一个堆栈中,我需要按下一个按钮时,只有第二个 child 被重建。

bool popup = false;

Scaffold(
appBar: AppBar(
title: const Text('TEST'),
actions: <Widget>[
IconButton( // + BUTTON
icon: Icon(Icons.add),
onPressed: () {
setState(() {
popup = true;
});
},
),
IconButton( // - BUTTON
icon: Icon(Icons.remove),
onPressed: () {
setState(() {
popup = false;
});
),
],
),
body: SafeArea(
child: Stack(
children: <Widget>[

Container( // FIRST WIDGET
key: ValueKey(1),
child: Text("Random - "+new Random().nextInt(20).toString())
),

popup ? Center(child: Text("abc")) : Text("") , // SECOND WIDGET

],

),
),
);

我希望当我按下“+”按钮时,只有第二个小部件会被重建,但现在它将重建堆栈的所有内容。

谢谢大家

最佳答案

来自official docs我们可以阅读:

“当在状态上调用 setState() 时,所有后代小部件都会重建。因此,将 setState() 调用定位到 UI 实际需要更改的子树部分。避免在高处调用 setState()如果更改包含在树的一小部分,则在树中。”

我的建议(我大部分时间都在使用)是将要在新的 StatefulWidget 中重建的小部件分开。这样 setState 只会重建那个小部件。

    class MyAppBar extends StatefulWidget
...
class _MyAppBarState extends State<MyAppBar> {
bool popup = false;

@override
Widget build(BuildContext context) {
return AppBar(
title: const Text('TEST'),
actions: <Widget>[
IconButton( // + BUTTON
icon: Icon(Icons.add),
onPressed: () {
setState(() {
popup = true;
});
},
),
IconButton( // - BUTTON
icon: Icon(Icons.remove),
onPressed: () {
setState(() {
popup = false;
});
),
],
),
}

然后在你的脚手架中调用它:

Scaffold(
appBar: MyAppBar(),

我建议的其他方法是使用 ValueNotifiernotifyListeners()。请阅读本页Avoid rebuilding all the widgets repetitively .解释得很好。

关于flutter setstate 只重建一个 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58692462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com