【问题标题】:Flutter - best approach to create TabledToggledButtons?Flutter - 创建 TabledToggledButtons 的最佳方法?
【发布时间】:2020-06-21 12:57:57
【问题描述】:
我希望我的切换按钮布局在表格中,而不是单行。
切换按钮的数量不是静态的 -
那是在初始化时,我加载了一个资源,其中包含应该成为切换按钮的所有文本的列表。
查看了多种方法,每种方法都有其问题:
创建一个 ToggleButtons 列表和一个 bool 列表列表,以将适当的选定状态存储为数据结构,从而将切换按钮划分为多行。这种方法的问题在于 onPressed 方法的实现 - 如何获取对布尔列表列表中适当元素的引用?或者换句话说 - 如何从 onPressed 方法中获取对 ToggleButtons 对象的引用?
使用 key 属性传递当前 ToggleButtons 的索引。它不是为此目的而设计的,因此这是一种不好的做法,同样,似乎没有直接的方法可以从 onPressed 方法访问 key 属性。
扩展 ToggleButtons 类,并专门覆盖其构建方法。这通常被认为是 Flutter 中的反模式。具体来说,在这种方法中,由于我们希望所有功能保持不变,并且只更改 build 方法中的内部 Row -> Table 小部件生成,因此看起来我们必须复制此方法的所有代码,这是一个这是个坏主意,因为它可能会在此小部件的未来版本中发生变化时阻止事情
创建一个复选框/开关小部件表作为替代,它应该很容易工作,但我想要切换按钮的外观,而不是复选框或开关:)
我一定错过了一些简单的东西!
【问题讨论】:
标签:
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 回调传递。