Flutter:点击Cancel按钮关闭弹窗时如何不返回指定数据?
解决方案
你可以直接在Cancel按钮的Navigator.pop调用中不传递第二个参数,这样弹窗关闭后,调用方的Future会返回null,无需再用虚拟数据做判断。具体修改如下:
1. 修改Cancel按钮的代码
把原来传递newEntry的代码改成只传context:
// Cancel button const SizedBox(height: 30), CupertinoButton( onPressed: () { Navigator.pop(context); // 不再传递newEntry参数 }, child: const Text('Cancel'), ),
2. 调整调用方的类型判断
因为现在可能返回null,需要把EntryData改成可空类型EntryData?,之后通过判断是否为null来区分用户是取消还是提交了有效数据:
Future<void> _addEvent(BuildContext context) async { // 将EntryData改为可空类型EntryData?,允许接收null值 EntryData? result = await Navigator.of(context).push( CupertinoPageRoute( fullscreenDialog: true, builder: (context) { return const DataEntryView(); }, ), ); // 后续逻辑区分处理 if (result != null) { // 用户提交了有效数据,进行对应处理 } else { // 用户点击了Cancel,无需处理数据 } }
这样就完全避免了虚拟数据的判断,逻辑更清晰,也符合Flutter导航返回值的常规用法。
内容的提问来源于stack exchange,提问作者TM Lynch
相关产品推荐
相关产品推荐

