Flutter TextView底部溢出报错,使用Expanded、SingleChildScrollView仍未解决怎么办?
错误原因
你的像素溢出问题根源于Column的布局逻辑:Column默认不会裁剪或滚动超出父容器高度的子元素,你给外层Container固定了屏幕高度的85%作为总高度,当问题文本和答案文本的总高度超过这个上限时,就会触发底部溢出报错。
你之前给Text套垂直方向SingleChildScrollView不生效,是因为SingleChildScrollView在无明确高度约束的父组件中会尝试无限延伸高度,无法触发滚动逻辑,反而会继续撑高父容器触发溢出。
修复方案
把Column中放置答案的容器替换为Expanded组件,自动占用Column除问题文本外的所有剩余高度,再在Expanded内部套垂直滚动的SingleChildScrollView承载答案文本即可。
修正后的核心代码如下:
Container( color: Colors.amber, width: double.infinity, height: MediaQuery.of(context).size.height * 0.85, child: PageView( //physics: NeverScrollableScrollPhysics(), //to get list as pages using pageview children: List.generate(4, (index) { //creating indivadiuals pages for pageview inside a list map_of_answers['q $index'] = idea['q $index']; return Column( children: [ Container( //this is our question textview widget width: double.infinity, margin: const EdgeInsets.all(20), child: Text(list_of_questions[index], textAlign: TextAlign.center, style: GoogleFonts.openSans( fontWeight: FontWeight.w500, fontSize: 25)), ), // 这里替换为Expanded + SingleChildScrollView结构 Expanded( child: SingleChildScrollView( physics: const AlwaysScrollableScrollPhysics(), scrollDirection: Axis.vertical, padding: const EdgeInsets.all(20.0), child: Text( idea['q $index'], style: GoogleFonts.openSans(fontSize: 15), ), ), ), ], ); }), controller: controller, onPageChanged: (value) { setState(() { activeIndex = value; }); }));
内容的提问来源于stack exchange,提问作者mannerlessman
相关产品推荐
相关产品推荐

