我有一个脚手架,其中的AppBar中有一个我想像开关一样工作的IconButton:按下时它会更改其状态。
尽管易于使用bool和setState实现,但整个小部件在setState上重绘,如下所示:
actions: <Widget>[
IconButton(icon:Icon(Icons.favorite,
color: estaMarcada ? K.color_highlight : K.color_background),
onPressed: () { setState(()
{estaMarcada = not estaMarcada;});},
),
我只想重绘Icon(或AppBar),而不是整个支架。
有什么想法吗?
谢谢。
答案 0 :(得分:2)
我怀疑您的脚手架的build()方法具有副作用或进行网络调用。您应该始终将自己的build()方法构造为好像它们每秒被调用60次一样,因此它们应该快速且幂等。
答案 1 :(得分:1)
感谢@DivinePaul,我做到了:
class MyAppBar extends StatefulWidget {
MyAppBar() : super();
@override
_MyAppBarState createState() => _MyAppBarState();
}
class _MyAppBarState extends State<MyAppBar> {
@override
Widget build(BuildContext context) {
return AppBar(
title: Row(
children: <Widget> [
Icon(K.icon),
Text(K.title),
]),
actions: <Widget>[
IconButton(
icon:Icon(Icons.favorite,
color: appData.getMark() ? K.color_highlight : K.color_background),
onPressed: () {
setState(() {
appData.setMark();
});
},
),
]
);
}
}
答案 2 :(得分:0)
将您的AppBar提取到单独的 StatefulWidget 并在那里string_view