我目前创建了一个编辑器,它允许在二维平面的某些位置插入新项目。
编辑器将项目放置在屏幕上,并将其 Package 在GestureDetector()或DragTarget()中,以允许放入新的编辑器项目。
因此,如果用户单击"Expanded()小部件"区域,则经常会出现类似下面的结构,以在属性检查器小部件中显示可编辑的项:
Column(
children: [
DragTarget(
builder: (context, candidateData, rejectedData) {
return Expanded(
child: Text( 'X' ),
);
},
)
],
)
这与GestureDetector()一样,会生成以下渲染错误:
ParentDataWidget使用不当。
ParentDataWidget Expanded(flex: 1)希望将FlexParentData类型的ParentData应用于RenderObject,该RenderObject已被设置为接受不兼容类型ParentData的ParentData。
通常,这意味着Expanded小部件有错误的祖先RenderObjectWidget。通常,Expanded小部件被直接放置在Flex小部件中。有问题的Expanded小部件当前被放置在MetaData小部件中。
如果我移除DragTarget(),树会呈现得很好:
Column(
children: [
Expanded(
child: Text( 'X' ),
)
],
)
- Q如何使Expanded()成为DragTarget()或GestureDetector()子对象?**
不用说,任何编译目标都会出现这个问题。
由于编辑器允许像列,卡等小部件下降,我需要一个通用的解决方案。
1条答案
按热度按时间jucafojl1#
正如文档所述:
使用Expanded小部件可使Row、Column或Flex的子级沿着主轴展开以填充可用空间(例如,对于Row,水平展开;对于Column,垂直展开)。
这意味着
Expanded
小部件只能作为Row
、Column
或Flex
的直接子部件使用,这也是代码段不使用DragTarget
的原因,因为在这种情况下,Expanded
是Column
的直接子部件。要解决您的问题,您可以这样做:
你也可以把你的
DragTarget
打包成一个Expanded
widget,没有更多的信息很难帮到你,但是这两种方法至少不会返回错误。