Flutter Stack内多文本布局时长文本换行与Positioned属性失效问题
问题原因
- 第一,
Positioned组件只能作为Stack的直接子节点使用,你给Positioned外层套了Expanded,而Expanded是仅可在Row、Column这类Flex布局组件中使用的组件,这就导致Positioned需要的StackParentData和Expanded提供的FlexParentData类型不匹配,触发了对应异常。 - 第二,最初Text无法自动换行的原因是:
Stack的默认子节点没有宽度约束,Text不知道最大可用宽度,就会按照自身内容长度单行展示,超出容器部分直接截断。你尝试加Expanded的思路是想给Text加宽度约束,但放错了容器环境,反而导致Positioned的定位属性失效。
解决方案
直接移除Expanded包裹,给Positioned同时设置left和right参数,这样Positioned会自动适配父Stack的可用宽度,内部的Text拿到宽度约束后就会自动换行,同时top定位属性也能正常生效。
修改后的代码示例:
Container( height: 140, padding: EdgeInsets.only(left: 8, right: 8), child: Stack( children: [ TextFormField( //....原有其他配置 hintText: "hinttext1", ), // 移除Expanded,给Positioned加right属性 Positioned( top: 50, left: 0, right: 0, // 加上这行,限制最大宽度为父Stack的宽度 child: Text( "longhinttext2222222222222222222222222222222222222222", style: TextStyle( color: Colors.grey, ), ), ), ], ), )
内容的提问来源于stack exchange,提问作者dontknowhy
相关产品推荐
相关产品推荐

