【问题标题】:Flutter dont close bottomSheet on BottomNavigationBar tapFlutter不要在BottomNavigationBar点击上关闭bottomSheet
【发布时间】:2021-11-26 08:47:53
【问题描述】:

我遇到了底部导航栏的问题。我的应用程序有两个屏幕,其中一个有一个底页,当我点击第二个屏幕的图标时,它不会在处理第一个屏幕时隐藏。 BottomNavigationBar 工作正常并且屏幕切换,但是当显示第二个屏幕时如何隐藏第一个屏幕的底部工作表我不知道。你能帮我解决这个问题吗?

调用:

void _showForm(int id) async {
        showBottomSheet(
            context: context,
            elevation: 5,
            builder: (context) => BottomSheetSwitch(_refreshJournals, id));
      } 

关闭(底部表内):

Navigator.of(context).pop();

附:我无法解决这个问题,所以我将 showBottomSheet 更改为 showModalBottomSheet,就像在:how to set showModalBottomSheet to full height?

【问题讨论】:

  • 您能否包括 some-sn-p 您如何调用和关闭底部表格,并且 sn-p 将重现您当前面临的相同问题
  • 你能添加你的代码sn-p
  • 请分享你的代码sn-p

标签: flutter dart


【解决方案1】:

您可以尝试为 BottomSheet 的有状态小部件提供密钥。只需使用 Navigator 的 pop 方法点击或更改屏幕即可访问该键的上下文。它可能会对你有所帮助。

你可以像这样使用它

Navigator.of(key.currentContext).pop();

否则,使用该键调用您的 BottomSheet 的函数。如下所示

  1. 在您的 currentWidget 中使用状态声明 GlobalKey。

GloabalKey<BottomSheetWidgetState> closeKey = GloabalKey();

  1. 在底部小部件状态下声明一个函数 closeBottomSheet。

void closeBottomSheet(){ Navigator.of(conext).pop(); }

  1. 使用键调用函数。

closeKey.currentState.closeBottomSheet();

完成了。

【讨论】:

  • 我正在考虑这个问题(试图在 dispose 上设置状态并更改显示的 bool 值)。但认为可能有更好的方法。
  • 你可以像 Navigator.of(key.currentContext).pop(); 一样使用它
  • 我在写到这里之前试过了。它抛出异常((
  • 请尝试更新答案
  • Dhalloo,谢谢你的帮助,但不,这对我不起作用(你有多难过:1)我添加:GlobalKey<State<BottomSheetSwitch>> closeKey= GlobalKey(); 2)我声明了函数 3)在closeKey.currentState 我没有方法closeBottomSheet() 还有closeKey.currentState 总是为空并抛出异常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 2020-12-18
  • 2015-04-03
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
相关资源
最近更新 更多