Flutter中Navigator导航函数失效求助:点击FAB无响应
问题分析与解决方法
你的导航函数无法工作的核心原因是:函数里声明的var context;是未初始化的空变量,Navigator需要的是Widget树中有效的BuildContext,用空context自然无法触发导航逻辑。
解决方法一:将context作为参数传入函数
修改navigateToDetail函数,让它接收一个BuildContext参数:
void navigateToDetail(BuildContext context) { Navigator.push(context, MaterialPageRoute(builder: (context) { return const NoteDetail(); })); }
调用时,从FAB的onPressed回调中传入当前有效的context:
FloatingActionButton( onPressed: () => navigateToDetail(context), // 其他FAB属性配置 )
解决方法二:利用State类自带的context(如果函数在State类内)
如果这个导航函数是写在State子类里,可以直接使用类本身的context,不需要重新声明:
void navigateToDetail() { Navigator.push(context, MaterialPageRoute(builder: (context) { return const NoteDetail(); })); }
调用时直接指向函数即可:
FloatingActionButton( onPressed: navigateToDetail, // 其他FAB属性配置 )
为什么直接在FAB里写逻辑能正常工作?
因为FAB的onPressed回调是在Widget的build方法中执行的,这里能直接拿到当前Widget树中有效的BuildContext,而你自己的函数里重新声明了一个未赋值的context,导致Navigator无法获取正确的上下文来完成导航操作。
内容的提问来源于stack exchange,提问作者Moriko Suharis
相关产品推荐
相关产品推荐

