flutter - 是否可以简化我对飞镖的逻辑?
问题描述
我将此逻辑用于动画。是否可以简化这个逻辑?
SliverAppBar FlexibleSpaceBar
void _positionListener() {
final FlexibleSpaceBarSettings settings = context.dependOnInheritedWidgetOfExactType();
_fontSize = getFontSize(settings.minExtent.toInt(), settings.maxExtent.toInt(), settings.currentExtent.toInt());
setState(() {});
}
需要简化以下逻辑
double getFontSize(int minExtent, int maxExtent, int currentExtent){
double onePaddingExtent = (maxExtent - minExtent) / 31;
if (currentExtent >= minExtent && currentExtent <= minExtent + (1 * onePaddingExtent))
return 3.0;
else if (currentExtent > minExtent + (1 * onePaddingExtent) && currentExtent <= minExtent + (2 * onePaddingExtent))
return 2.9;
else if (currentExtent > minExtent + (2 * onePaddingExtent) && currentExtent <= minExtent + (3 * onePaddingExtent))
return 2.8;
else if (currentExtent > minExtent + (3 * onePaddingExtent) && currentExtent <= minExtent + (4 * onePaddingExtent))
return 2.7;
else if (currentExtent > minExtent + (4 * onePaddingExtent) && currentExtent <= minExtent + (5 * onePaddingExtent))
return 2.6;
else if (currentExtent > minExtent + (5 * onePaddingExtent) && currentExtent <= minExtent + (6 * onePaddingExtent))
return 2.5;
else if (currentExtent > minExtent + (6 * onePaddingExtent) && currentExtent <= minExtent + (7 * onePaddingExtent))
return 2.4;
else if (currentExtent > minExtent + (7 * onePaddingExtent) && currentExtent <= minExtent + (8 * onePaddingExtent))
return 2.3;
else if (currentExtent > minExtent + (8 * onePaddingExtent) && currentExtent <= minExtent + (9 * onePaddingExtent))
return 2.2;
else if (currentExtent > minExtent + (9 * onePaddingExtent) && currentExtent <= minExtent + (10 * onePaddingExtent))
return 2.1;
else if (currentExtent > minExtent + (10 * onePaddingExtent) && currentExtent <= minExtent + (11 * onePaddingExtent))
return 2.0;
else if (currentExtent > minExtent + (11 * onePaddingExtent) && currentExtent <= minExtent + (12 * onePaddingExtent))
return 1.9;
else if (currentExtent > minExtent + (12 * onePaddingExtent) && currentExtent <= minExtent + (13 * onePaddingExtent))
return 1.8;
else if (currentExtent > minExtent + (13 * onePaddingExtent) && currentExtent <= minExtent + (14 * onePaddingExtent))
return 1.7;
else if (currentExtent > minExtent + (14 * onePaddingExtent) && currentExtent <= minExtent + (15 * onePaddingExtent))
return 1.6;
else if (currentExtent > minExtent + (15 * onePaddingExtent) && currentExtent <= minExtent + (16 * onePaddingExtent))
return 1.5;
else if (currentExtent > minExtent + (16 * onePaddingExtent) && currentExtent <= minExtent + (17 * onePaddingExtent))
return 1.4;
else if (currentExtent > minExtent + (17 * onePaddingExtent) && currentExtent <= minExtent + (18 * onePaddingExtent))
return 1.3;
else if (currentExtent > minExtent + (18 * onePaddingExtent) && currentExtent <= minExtent + (19 * onePaddingExtent))
return 1.2;
else if (currentExtent > minExtent + (19 * onePaddingExtent) && currentExtent <= minExtent + (20 * onePaddingExtent))
return 1.0;
else if (currentExtent > minExtent + (20 * onePaddingExtent) && currentExtent <= minExtent + (21 * onePaddingExtent))
return 1;
else if (currentExtent > minExtent + (21 * onePaddingExtent) && currentExtent <= minExtent + (22 * onePaddingExtent))
return 0.9;
else if (currentExtent > minExtent + (22 * onePaddingExtent) && currentExtent <= minExtent + (23 * onePaddingExtent))
return 0.8;
else if (currentExtent > minExtent + (23 * onePaddingExtent) && currentExtent <= minExtent + (24 * onePaddingExtent))
return 0.7;
else if (currentExtent > minExtent + (24 * onePaddingExtent) && currentExtent <= minExtent + (25 * onePaddingExtent))
return 0.6;
else if (currentExtent > minExtent + (25 * onePaddingExtent) && currentExtent <= minExtent + (26 * onePaddingExtent))
return 0.5;
else if (currentExtent > minExtent + (26 * onePaddingExtent) && currentExtent <= minExtent + (27 * onePaddingExtent))
return 0.4;
else if (currentExtent > minExtent + (27 * onePaddingExtent) && currentExtent <= minExtent + (28 * onePaddingExtent))
return 0.3;
else if (currentExtent > minExtent + (28 * onePaddingExtent) && currentExtent <= minExtent + (29 * onePaddingExtent))
return 0.2;
else if (currentExtent > minExtent + (29 * onePaddingExtent) && currentExtent <= minExtent + (30 * onePaddingExtent))
return 0.1;
else if (currentExtent > minExtent + (30 * onePaddingExtent) && currentExtent <= minExtent + (31 * onePaddingExtent))
return 0;
else
return 0;
}
我试过这种方式,但没有工作
double getFontSize(int minExtent, int maxExtent, int currentExtent) {
double onePaddingExtent = (maxExtent - minExtent) / 31;
var baseValue = (currentExtent + minExtent) / onePaddingExtent ;
var upperBaseValue = baseValue.round();
var lowerBaseValue = baseValue.floor();
var result = 30 - Math.min(upperBaseValue, lowerBaseValue);
return Math.max(result, 0);
}
解决方案
也许你可以试试这个
if (currentExtent >= minExtent && currentExtent <= minExtent + (1 * onePaddingExtent)) return 3.0;
else for (int i = 1; i <= 30; ++ i) if ((currentExtent > minExtent + (i * onePaddingExtent)) && (currentExtent <= minExtent + ((i + 1) * onePaddingExtent))) return 3.0 - (i / 10);
推荐阅读
- python - 如何将变量传递给 os.chdir() 方法?
- hadoop - hadoop hdfs复制复制不足的文件一直在等待
- sql - 如何在 Sql 查询中包含周六和周日数据
- python - 如何在不使用循环的情况下对超过 3 个多维数组进行元素乘法
- python - 为冗长的操作覆盖变量名称是否不好?
- data-structures - 在 AVL 树和平衡二叉树中获取给定根下的节点数的时间复杂度是多少?
- c++ - 如何检查类型是否从模板函数中的某个可变参数模板类实例化?
- java - 在 JAVA 中使用 CA CERT 文件执行 CURL 命令
- javascript - 来自世博会的权限和位置 api 不起作用
- arrays - ReacJS - 列表中的每个孩子都应该有一个唯一的“关键”道具