前言
今天在开发中遇到这样一个问题,我在一级菜单中设置的某个字段值,在二级菜单中会有修改,但是二级菜单修改后无法实时进行更新状态,经过我的反复测试,特地写下该文章
分析
在我查阅相关搜索引擎和测试后,发现 Navigator.push 返回Future 对象
Future对象大家在开发中很熟悉了,就是异步返回的数据
那这样,我们可以使用 Future.then(val)方法 来实现二级菜单修改一级菜单数据更新状态
代码示例
一级菜单
...widget
/**
* 设置弹出菜单Items
*/
List<PopupMenuItem> settingPopupMenuItem(){
List<PopupMenuItem> settingList = [];
settingList.add(PopupMenuItem(child: TextButton(onPressed: () {
Future future = Navigator.of(context).push(MaterialPageRoute(builder: (_){
return SettingPaperless();
}));
//异步返回调用setState更新状态即可!
future.then((value){
setState(() {
});
});
},
child: Text("设置",style: TextStyle(color: Colors.black))
)));
settingList.add(PopupMenuItem(child: Text("版本更新",style: TextStyle(color: Colors.black))));
return settingList;
}
二级菜单
...widget
Container(
margin: EdgeInsets.fromLTRB(0, 0, 0, 100),
child: Container(
width: 150,
height: 40,
decoration: BoxDecoration(
color: Color.fromRGBO(43, 135, 222, 1),
borderRadius: BorderRadius.circular(5)
),
child: TextButton(onPressed: () {
MeetingRoomController.changeCurrentMeetingTopicFontSize(double.parse(currentFontSizeController.text));
MeetingRoomController.changeOtherMeetingTopicFontSize(double.parse(otherFontSizeController.text));
BotToast.showText(text: "保存成功");
},child: Text("保存",style: TextStyle(color: Colors.white,fontSize: 20,letterSpacing: 10)),
),
),
),
至此,教程结束!