Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.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 调整父窗口小部件的大小以适应子post';转换';飘飘然_Flutter_Flutter Layout_Flutter Animation - Fatal编程技术网

Flutter 调整父窗口小部件的大小以适应子post';转换';飘飘然

Flutter 调整父窗口小部件的大小以适应子post';转换';飘飘然,flutter,flutter-layout,flutter-animation,Flutter,Flutter Layout,Flutter Animation,我在颤振中使用Transforms创建一个滚动旋转木马,用于从各种选项中进行选择 这使用了标准元素,如ListView.builder,除了转换的父窗口小部件不能按比例缩小以适应此处所示的内容之外,这些元素都可以正常工作: 下面是用于生成“卡”的代码(实际上,其中有一张卡,但我已将其剥离,以使所有内容都能正确缩放): 即使我删除了容器的“height”参数(这样所有内容都可以缩放以适应“Text”小部件),包含Transform小部件的框仍然有间隙 Flatter似乎没有任何文档来说明如果其中

我在颤振中使用
Transforms
创建一个滚动旋转木马,用于从各种选项中进行选择

这使用了标准元素,如
ListView.builder
,除了转换的父窗口小部件不能按比例缩小以适应此处所示的内容之外,这些元素都可以正常工作:

下面是用于生成“卡”的代码(实际上,其中有一张卡,但我已将其剥离,以使所有内容都能正确缩放):

即使我删除了容器的“height”参数(这样所有内容都可以缩放以适应“Text”小部件),包含
Transform
小部件的框仍然有间隙

Flatter似乎没有任何文档来说明如果其中的对象被转换,如何重新缩放父对象-这里有人知道或有任何解决方法的想法吗

EDIT:从中返回的小部件在有状态小部件中的
构建
小部件中使用。堆栈是Column>Container>ListView.builder


如果我移除转换,容器会按照我的意愿装配在一起-似乎在容器上执行透视转换会“收缩”它的内容(在本例中,颜色-检查链接的屏幕抓取),但不会重新缩放容器本身,这正是我试图实现的。

为什么要使用Align,正如我在代码中看到的那样,没有属性集或属性用于对齐任何内容。因此,请尝试删除围绕转换的Align小部件。 因为根据文档,Transform是这样一个小部件,它试图与它们的子部件大小相同。这样就可以满足你的要求了

有关更多信息,请查看此文档:


我希望有帮助

为什么要使用Align,正如我在代码中看到的,没有属性集或属性用于对齐任何东西。因此,请尝试删除围绕转换的Align小部件。 因为根据文档,Transform是这样一个小部件,它试图与它们的子部件大小相同。这样就可以满足你的要求了

有关更多信息,请查看此文档:


我希望有帮助

我有一个棘手的解决方案:addPostFrameCallback+overlay

导入“包装:颤振/材料.省道”;
进口“包装:颤振钩/颤振钩.省道”;
//忽略:必须是不可变的
类ChildSizeWidget扩展了HookWidget{
最终小部件功能(构建上下文、小部件子项、大小)生成器;
最后一个孩子;
最终全局键=全局键();
覆盖入口覆盖;
ChildSizeWidget({this.child,this.builder});
@凌驾
小部件构建(构建上下文){
最终大小=useState(空);
使用效果(){
WidgetsBinding.instance.addPostFrameCallback((时间戳){
_覆盖层=覆盖层入口(
生成器:(上下文)=>不透明度(
子:SingleChildScrollView(
子:容器(
孩子:孩子,
键:_键,
),
),
不透明度:0.0,
),
);
覆盖。of(上下文)。插入(_覆盖);
WidgetsBinding.instance.addPostFrameCallback((时间戳){
size.value=\u key.currentContext.size;
_覆盖。删除();
});
});
return()=>null;
},[儿童];
if(size==null | | size.value==null){
返回儿童;
}否则{
返回生成器(上下文、子项、大小、值);
}
}
}
用法:

导入“包装:颤振/材料.省道”;
进口“包装:颤振钩/颤振钩.省道”;
类HomeView扩展了HookWidget{
@凌驾
小部件构建(构建上下文){
最终变更=使用状态(假);
最终法线=容器(
颜色:Colors.blueAccent,
高度:200.0,
宽度:200.0,
);
最后一个大集装箱(
颜色:Colors.redAccent,
高度:300.0,
宽度:200.0,
);
返回列(
儿童:[
容器(
对齐:对齐.center,
child:ChildSizeWidget(
孩子:改变。价值?大:正常,
生成器:(上下文、子对象、大小)=>AnimatedContainer(
对齐:对齐.center,
子对象:SingleChildScrollView(子对象:子对象),
持续时间:持续时间(毫秒:250),
高度:size.height,
),
),
颜色:颜色。灰色,
),
扁平按钮(
子项:文本(“切换子项”),
按下:()=>change.value=!change.value,
颜色:颜色。绿色,
),
],
);
}
}
我有一个菜单,有几个选项,它们有不同的高度,在动画的帮助下,这很好,对我来说真的很好


我有一个棘手的解决方案:addPostFrameCallback+overlay

导入“包装:颤振/材料.省道”;
进口“包装:颤振钩/颤振钩.省道”;
//忽略:必须是不可变的
类ChildSizeWidget扩展了HookWidget{
最终小部件功能(构建上下文、小部件子项、大小)生成器;
最后一个孩子;
最终全局键=全局键();
覆盖入口覆盖;
ChildSizeWidget({this.child,this.builder});
@凌驾
小部件构建(构建上下文){
最终大小=useState(空);
使用效果(){
WidgetsBinding.instance.addPostFrameCallback((时间戳){
_覆盖层=覆盖层入口(
生成器:(上下文)=>不透明度(
子:SingleChildScrollView(
子:容器(
孩子:孩子,
键:_键,
),
),
不透明度:0.0,
),
);
覆盖。of(上下文)。插入(_覆盖);
WidgetsBinding.instance.addPostFrameCallback((时间戳){
size.value=\u key.currentContext.size;
_覆盖。删除();
});
});
return()=>null;
},[chil
    return Align(
      child: Transform(
        alignment: Alignment.center,
        transform: mat,
        child: Container(
          height: 220,
          color: color,
          width: MediaQuery.of(context).size.width * 0.7,
          child: Text(
            offset.toString(),
            style: TextStyle(color: Colors.white, fontSize: 12.0),
          ),
        ),
      ),
    );
  }