【发布时间】:2019-12-27 18:37:18
【问题描述】:
当我点击它时,我正在使用颤振并尝试更改图标的状态(切换图标)。如果一切都在同一个班级,这很好。但是我在重复的页面中重复了部分小部件,因此我已经将该小部件移到另一个类。现在,当我尝试通过传入一个函数来设置状态时,基于调试步骤,看起来它工作正常,但状态保持不变(图标没有改变)。我能知道我做错了什么吗?谢谢。
这是我从另一个类调用小部件并传入函数以设置状态的类。
class _MyPageState extends State<MyPage> {
IconData heartStatus = FontAwesomeIcons.heart;
void setFav(){
print('clicked');
setState(() {
if (heartStatus == FontAwesomeIcons.heart) {
heartStatus = FontAwesomeIcons.solidHeart;
} else {
heartStatus = FontAwesomeIcons.heart;
}
});
}
@override
Widget build(BuildContext context) {
Page page = new Page();
PageController controller = PageController();
return Scaffold(
backgroundColor: Colors.blue,
body: SafeArea(
child: PageView(
children: <Widget>[
// this is the external widget repeated 3 times. Each time passing in setFav which is the setState function.
page.getPageData("text 1", "", setFav),
page.getPageData("text 2", "", setFav),
page.getPageData("text 3", "", setFav),
],
),
),
);
}
}
这是通过 page.getPageData 提供小部件的类(我已经删除了许多嵌套小部件,以专注于与此设置状态问题相关的图标)。
class Page{
Widget getPageData(String question, String answer, Function setFav){
IconData heartStatus = FontAwesomeIcons.heart;
return Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
GestureDetector(
child: Icon(heartStatus),
onTap: () {
setFav();
},
),
GestureDetector(
child: Icon(FontAwesomeIcons.shareAlt),
onTap: () {
print('shared');
},
),
],
),
],
),
);
}
}
【问题讨论】: