Flutter从导航页面返回后调用setState函数不生效问题求助
问题解决:封装的setState函数未触发状态更新
你的问题出在没有实际调用封装的set函数——在.then回调里你写的是set;,这只是引用了函数本身,并没有执行它。直接写setState(() {});能生效是因为你直接调用了这个方法,而封装后的函数需要通过()来触发执行。
修改后的核心代码片段
// 原错误写法 // set; // 正确写法:加上括号调用函数 set();
完整修改后的代码
class HomeScreen extends StatefulWidget { const HomeScreen({super.key}); @override _HomeScreenState createState() => _HomeScreenState(); } class _HomeScreenState extends State<HomeScreen> { void set() { setState(() {}); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( actions: <Widget>[ Padding( padding: const EdgeInsets.only(top: 8.0), child: IconButton( color: Colors.white, iconSize: 30, icon: const Icon(Icons.notifications_active_outlined), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (_) => const NextScreen())) .then((value) { // 调用封装的状态更新函数 set(); }); }), ], ),), }
扩展:给其他页面传递状态更新函数
如果需要在NextScreen内部主动触发Home页面的状态更新,可以通过构造函数传递这个函数:
1. 改造NextScreen接收函数参数
class NextScreen extends StatelessWidget { final VoidCallback? updateHomeState; const NextScreen({super.key, this.updateHomeState}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text("Next Page")), body: Center( child: ElevatedButton( onPressed: () { // 在NextScreen内直接调用更新函数 updateHomeState?.call(); Navigator.pop(context); }, child: const Text("返回并更新Home状态"), ), ), ); } }
2. 跳转时传递函数
Navigator.push( context, MaterialPageRoute( builder: (_) => NextScreen(updateHomeState: set) ) );
内容的提问来源于stack exchange,提问作者Amabilia
相关产品推荐
相关产品推荐

