【问题标题】:Flutter - best approach to create TabledToggledButtons?Flutter - 创建 TabledToggledButtons 的最佳方法?
【发布时间】:2020-06-21 12:57:57
【问题描述】:

我希望我的切换按钮布局在表格中,而不是单行。 切换按钮的数量不是静态的 - 那是在初始化时,我加载了一个资源,其中包含应该成为切换按钮的所有文本的列表。

查看了多种方法,每种方法都有其问题:

  1. 创建一个 ToggleButtons 列表和一个 bool 列表列表,以将适当的选定状态存储为数据结构,从而将切换按钮划分为多行。这种方法的问题在于 onPressed 方法的实现 - 如何获取对布尔列表列表中适当元素的引用?或者换句话说 - 如何从 onPressed 方法中获取对 ToggleButtons 对象的引用?

  2. 使用 key 属性传递当前 ToggleButtons 的索引。它不是为此目的而设计的,因此这是一种不好的做法,同样,似乎没有直接的方法可以从 onPressed 方法访问 key 属性。

  3. 扩展 ToggleButtons 类,并专门覆盖其构建方法。这通常被认为是 Flutter 中的反模式。具体来说,在这种方法中,由于我们希望所有功能保持不变,并且只更改 build 方法中的内部 Row -> Table 小部件生成,因此看起来我们必须复制此方法的所有代码,这是一个这是个坏主意,因为它可能会在此小部件的未来版本中发生变化时阻止事情

  4. 创建一个复选框/开关小部件表作为替代,它应该很容易工作,但我想要切换按钮的外观,而不是复选框或开关:)

我一定错过了一些简单的东西!

【问题讨论】:

    标签: flutter widget togglebutton


    【解决方案1】:

    发布后我有了一个新想法:) 一张平面按钮表!可能会实现与 ToggleButtons 类似的 UI。待会儿会试一试。 我仍然很想听听有关 ToggleButtons 的其他建议。

    【讨论】:

      【解决方案2】:

      尝试使用SwitchListTile

      整个列表磁贴是交互式的:点击磁贴中的任意位置可切换开关。点击并拖动 Switch 也会触发 onChanged 回调。

      为确保 onChanged 正确触发,必须正确管理传递到 value 的状态。这通常通过在 onChanged 中调用 State.setState 来切换状态值来完成。

      此小部件的 value、onChanged、activeColor、activeThumbImage 和 inactiveThumbImage 属性与 Switch 小部件上类似名称的属性相同。

      title、subtitle、isThreeLine、dense 属性与 ListTile 上的同名。

      这个小部件上的 selected 属性类似于 ListTile.selected 属性,但使用的颜色是由 activeColor 描述的,如果有的话,默认为当前主题的强调色。不努力协调选择状态和值状态;要在开关打开时显示选中列表磁贴,请将相同的值传递给两者。

      默认情况下,开关以从左到右的语言显示在右侧(即在 ListTile.trailing 插槽中),可以使用 controlAffinity 进行更改。次要小部件放置在 ListTile.leading 槽中。

      要将 SwitchListTile 显示为禁用,请将 null 作为 onChanged 回调传递。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-09
        • 2023-03-26
        • 2013-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-15
        • 1970-01-01
        相关资源
        最近更新 更多