flutter - Flutter 中的 StackedBar 小部件
问题描述
我正在尝试在 Flutter 中创建自己的水平堆叠条形小部件,但遇到了一些困难。这是我拥有的代码的复制品:
class StackedBar extends StatefulWidget {
HashMap<int, double> factors = HashMap();
StackedBar(){
factors[0] = 0.1;
factors[1] = 0.3;
factors[2] = 0.5;
factors[3] = 0.1;
}
@override
_StackedBarState createState() => new _StackedBarState();
}
class _StackedBarState extends State<StackedBar> {
@override
Widget build(BuildContext context) {
List<Widget> widgets = [];
for (int i =0; i < widget.factors.length; i++) {
var w = Flexible(
child: FractionallySizedBox(
widthFactor: widget.factors[i],
child: Container(
height: 50,
color: ColorHelper.getColor(i))));
widgets.add(w);
}
return Container(
color: Colors.white,
height: 50,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: widgets));
}
}
结果如下所示: 因此,您可以看到条形图并未覆盖整行。我认为问题在于 FractionallySizedBox 不是从行宽计算它的分数,而是从小部件在行内可供他使用的空间(在我的情况下可能是行宽的 1/4)计算它的分数。我对么?如果是这样,正确的解决方案是什么?
解决方案
使用扩展而不是灵活。像这样更改您的代码:
final HashMap<int, double> factors = HashMap();
StackedBar(){
factors[0] = 1;
factors[1] = 3;
factors[2] = 5;
factors[3] = 1;
}
并在您的构建方法中:
for (int i =0; i < widget.factors.length; i++) {
var w = Expanded(
flex: widget.factors[i],
child: Container(
height: 50,
color: Colors.accents[i]));
widgets.add(w);
}
推荐阅读
- javascript - 提高大表数据集的渲染性能
- python-3.x - 'NoneType' 对象不适用于 beautifulsoup
- git - 可以为我的代码中的每一个小变化创建新的分支吗?
- android - 错误:无法解决:cardview 受影响的模块:app
- python - 嵌套 For 循环 - 美丽的汤文本
- python - 如何使用 Python2.7 使用请求将 JSON 作为文件发送而不将文件写入磁盘?
- python-3.x - 边界和海岸线干扰 Python Cartopy
- python - 创建一个刽子手游戏
- html - 为什么背景没有覆盖整个 html 页面?
- php - php格式化中的数组