Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter Flitter中的StackedBar小部件_Flutter_Flutter Layout - Fatal编程技术网

Flutter Flitter中的StackedBar小部件

Flutter Flitter中的StackedBar小部件,flutter,flutter-layout,Flutter,Flutter Layout,我试图在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; }

我试图在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));
  }
}
类StackedBar扩展StatefulWidget{
HashMap factors=HashMap();
StackedBar(){
系数[0]=0.1;
系数[1]=0.3;
系数[2]=0.5;
系数[3]=0.1;
}
@凌驾
_StackedBarState createState()=>new_StackedBarState();
}
类_StackedBarState扩展状态{
@凌驾
小部件构建(构建上下文){
列表小部件=[];
for(int i=0;i
结果如下所示:
因此,正如您所看到的,该条并没有覆盖整行。我认为问题在于,FractillySizedBox不是从行宽度计算它的分数,而是从窗口小部件在行内的可用空间(在我的例子中,可能是行宽度的1/4)计算它的分数。我说得对吗?如果是这样,正确的解决方案是什么?

使用扩展而不是灵活。按如下方式更改代码:

final HashMap<int, double> factors = HashMap();

  StackedBar(){
    factors[0] = 1;
    factors[1] = 3;
    factors[2] = 5;
    factors[3] = 1;
  }
final HashMap factors=HashMap();
StackedBar(){
系数[0]=1;
因子[1]=3;
因子[2]=5;
因子[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);
    }
for(int i=0;i