Flutter中IconButton点击onPressed无法弹出SimpleDialog问题求解
问题根因
- 你当前的
selectPhoto方法仅单纯返回了SimpleDialog组件实例,Flutter中所有对话框都需要通过官方提供的showDialog方法挂载到当前页面的路由栈中才会渲染显示,仅返回组件不会触发任何展示逻辑。 showDialog方法需要依赖当前页面的BuildContext参数才能正确关联页面上下文,你现有代码没有传入该必填参数。
修复方案
- 修改
selectPhoto方法,引入showDialog完成弹窗渲染逻辑,同时增加BuildContext入参:
selectPhoto(BuildContext context) { // 调用系统弹窗方法 showDialog( context: context, builder: (context) => SimpleDialog( title: const Text('Create Post'), children: <Widget>[ SimpleDialogOption(...), SimpleDialogOption(...), SimpleDialogOption(...), ], ), ); }
- 修改
IconButton的点击回调,传入当前上下文:
child: CircleAvatar( radius: 18, backgroundColor: Colors.white70, child: IconButton( icon: Icon(Icons.camera_alt_outlined), // 把当前context传入方法 onPressed: () => selectPhoto(context), ), )
补充说明
如果需要点击SimpleDialogOption后关闭弹窗再执行业务逻辑,可以在选项的onPressed回调中先调用Navigator.pop(context)关闭弹窗:
SimpleDialogOption( onPressed: () { Navigator.pop(context); // 关闭当前弹窗 // 后续业务逻辑,比如跳转拍照页、相册页 }, child: const Text('从相册选择'), )
内容的提问来源于stack exchange,提问作者Lorenzo Cutrupi
相关产品推荐
相关产品推荐

