对 Datatable 的排序方向箭头感到困惑

Posted

技术标签:

【中文标题】对 Datatable 的排序方向箭头感到困惑【英文标题】:Confusion over Datatable's sort direction arrows 【发布时间】:2018-12-19 23:13:37 【问题描述】:

我觉得我发现 Flutter 的 DataTable 排序箭头在 Material Design 和 Flutter 的实现之间存在差异。

Material Design 的Data table spec(大部分)显示当列数据上升时箭头指向上方,当列数据下降时箭头指向下方。这在排序部分和规格部分是正确的。有一个关于工具提示的图像,它是相反的。然而,文本从未真正指定方向。

但在 Flutter 中,情况似乎正好相反。上升数据有一个向下的箭头,而下降的数据有一个向上的箭头。我发现这在我自己的实现和official Flutter DataTable demo 中都是正确的,如下图所示:

就我个人而言,上升数据的箭头指向上方更有意义,但我试图了解 Flutter 中是否存在设计错误,或者我只是误解了 Material Design 或做出了太多假设图片。

我认为我的部分困惑在 this article about sort order arrow direction 中有所描述,尤其是他们在文章末尾附近关于如何解释三角形与箭头的观点。

Flutter 的排序箭头方向是否正确?

【问题讨论】:

恕我直言,这是错误的。向下指的是下降(显然),向上指的是上升。也许这只是一个意外。这些词暗示上升是向上,反之亦然.. 如果某些列默认升序而其他列下降,则将箭头与升序与降序相关可能会造成混淆。大多数用户实际上并没有想得那么远,所以我选择了视觉上不太嘈杂的向下箭头作为默认排序顺序,向上箭头表示反向。不过,可以肯定地说材料规范取代了颤振演示。 【参考方案1】:

我在使用日期选择小部件中的 setState 时遇到了与我的应用程序类似的问题,这会导致我的数据表小部件第一列中的箭头从“向上”变为“向下”而不更改排序顺序.

我在我的项目中访问了 DataTable 源代码,并在顶部的 if 语句中添加了一个额外的条件,这修复了错误并且不影响任何其他功能:

位置

flutter/packages/flutter/lib/src/material/data_table.dart

原始代码 [从第 1142 行开始]

if ((_up != newUp) && !skipArrow) 
  if (_orientationController.status == AnimationStatus.dismissed) 
    _orientationController.forward();
   else 
    _orientationController.reverse();
  

错误修复

if ((_up != newUp) && (newUp == false || _up != null) && !skipArrow) 
  if (_orientationController.status == AnimationStatus.dismissed) 
    _orientationController.forward();
   else 
    _orientationController.reverse();
  

【讨论】:

以上是关于对 Datatable 的排序方向箭头感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

jQuery dataTable 不显示排序图标

Vector2.Normalize 函数,对对角线输出感到困惑

箭头在排序表中应该指向哪个方向? [关闭]

对 SceneKit 中相机的正交投影感到困惑

对贝宝 ipn 感到困惑和迷失方向

合并排序比插入排序更快的方式让我感到困惑