【问题标题】:Update button's visibility inside ModalBottomSheet from parent widget从父小部件更新 ModalBottomSheet 内按钮的可见性
【发布时间】:2021-12-13 10:30:58
【问题描述】:

我有 Widget1 可以打开 ModalBottomSheet。 ModalBottomSheet 包含 TextField(EditText) 和一个按钮。用户可以向 TextField 输入值,这些值可以根据某些验证使按钮启用/禁用。 TextField 是一些自定义组件。这整个流程是使用动态形式制作的。 我们正在使用流来传输将由 Widget1 监听的 TextField 更改(以便它可以重建 UI)。但是当我们在屏幕上有 ModalBottomSheet 时,Widget1 似乎无法听到任何变化。 如果我使用简单的小部件而不是 ModalBottomSheet,那么它可以正常工作。在大多数关于 ModalBottomSheet 中的“StatefulBuilder”的博客中,但这并不能解决这个问题,因为如果用户在 ModalBottomSheet 中进行任何直接更改(例如单击按钮等),这将很有帮助。

请提出一些解决此问题的方法。

【问题讨论】:

  • 加个码你怎么呈现ModalBottomSheet

标签: flutter flutter-layout flutter-widget flutter-showmodalbottomsheet flutter-dialog


【解决方案1】:

您是否尝试过在 showModalBottomSheet() 函数内的 StatefulBuilder 小部件中扭曲所有内容? 我这样使用它,这使我可以在 ModalBottomSheet 中设置状态。

yourFunctionToShowModalBottomSheet(BuildContext ctx, [Other args]) {
  showModalBottomSheet(
    context: context,
    builder: (context) {
      return StatefulBuilder(
        builder: (ctx, StateSetter mySetState) {
          return YOURWIDGET()
        }
      )
    })
  )
}

这将使您可以在 ModalBottomSheet 中设置状态(在此示例中为 mySetState)。

【讨论】:

  • 感谢您的回复。是的,我尝试过使用 StatefulBuilder。但这并不能解决目的。当我们在 BottomSheet 中有一些按钮或某些东西会导致状态更改时,它将很有用。在我的例子中,更新状态的事件是使用 Widget1(触发了 BottomSheet)。当 BottomSheet 处于前台时,Widget1 似乎根本没有动作。
  • 如何将 Widget1 中的函数作为参数传递给构建 ModalBottomSheet 的函数。然后在 ModalBottomSheet 上的按钮内触发此功能?
  • 这个问题类似于对父小部件的一些API调用。与此同时,用户已经打开了底页。现在如何通知底层关于 api 的结果。我也使用流控制器将结果广播到底部表。但似乎小部件没有广播结果。
猜你喜欢
  • 2020-06-12
  • 1970-01-01
  • 2013-07-19
  • 2020-06-12
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多