- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用以下代码构建的简单屏幕。我想一直将广告横幅保持在顶部,而其下方的Container()
可以滚动。这就是我将SingleChildScrollView()
放在下部容器中的原因。
但是它仍然在屏幕上溢出,并显示以下错误:
════════ Exception caught by rendering library ═════════════════════════════════════════════════════
The following assertion was thrown during layout:
A RenderFlex overflowed by 162 pixels on the bottom.
屏幕如下所示:
body: Container(
decoration: BoxDecoration(
image: DecorationImage(
// colorFilter: ColorFilter.mode(Colors.white, BlendMode.color),
image: AssetImage("assets/feathers_bg.jpg"),
fit: BoxFit.cover,
),
),
child: Column(
children: [
AdmobBanner(
//below is test id
adUnitId: 'ca-app-pub-3940256099942544/6300978111',
adSize: AdmobBannerSize.FULL_BANNER,
),
Padding(
padding: const EdgeInsets.all(40.0),
child: SingleChildScrollView(
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(20)),
),
padding: EdgeInsets.all(10),
child: Column(
children: [
Image.network(_birdDetails.thumbnail.source),
SizedBox(height: 10,),
Container(
child: Column(
children: [
Text(
_birdName,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20,
color: Colors.teal,
fontWeight: FontWeight.bold,
),
),
Text(
_birdDetails.description,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 14,
fontStyle: FontStyle.italic,
),
),
],
),
),
SizedBox(height: 20,),
Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.grey.shade300,
borderRadius: BorderRadius.all(Radius.circular(20)),
),
child: Text(
_birdDetails.extract,
textAlign: TextAlign.justify,
style: TextStyle(
fontSize: 16
),
),
),
SizedBox(height: 10,),
],
),
),
),
),
],
),
),
最佳答案
TL; DR版本。您的SingleChildScrollView需要展开(您可以将Expanded-> Padding-> SingleChildScrollView放入)。
您可以在official documentation中阅读更长的版本,本节描述了类似的情况:
One common reason for this to happen is that the Column has beenplaced in another Column (without using Expanded or Flexible aroundthe inner nested Column). When a Column lays out its non-flex children(those that have neither Expanded or Flexible around them), it givesthem unbounded constraints so that they can determine their owndimensions (passing unbounded constraints usually signals to the childthat it should shrink-wrap its contents). The solution in this case istypically to just wrap the inner column in an Expanded to indicatethat it should take the remaining space of the outer column, ratherthan being allowed to take any amount of room it desires.
import 'package:flutter/material.dart';
import 'dart:math';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'SO Question : 64200763'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
StringBuffer birdDetails;
var rng = new Random();
@override
initState(){
super.initState();
birdDetails = new StringBuffer();
for(int i=0; i<4000; i++){
birdDetails.write(String.fromCharCode(rng.nextInt(25) + 97));
if(rng.nextBool() && rng.nextBool()) birdDetails.write(' ');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Container(
decoration: BoxDecoration(
color: Colors.green[400],
borderRadius: BorderRadius.all(Radius.circular(20)),
),
child: Column(
children: [
Container(
height: 100,
width: double.maxFinite,
color: Colors.yellow,
child: Text('Ad placeholder', textAlign: TextAlign.center)
),
Expanded(
child: Padding( // Here is your fix, place expanded above the SingleChildScrollView
padding: const EdgeInsets.all(40.0),
child: SingleChildScrollView(
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(20)),
),
padding: EdgeInsets.all(10),
child: Column(
children: [
Image.network('https://picsum.photos/id/1024/512/288'),
SizedBox(height: 10,),
Container(
child: Column(
children: [
Text(
'Bird name',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20,
color: Colors.teal,
fontWeight: FontWeight.bold,
),
),
Text(
'Bird (random) description',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 14,
fontStyle: FontStyle.italic,
),
),
],
),
),
SizedBox(height: 20,),
Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.grey.shade300,
borderRadius: BorderRadius.all(Radius.circular(20)),
),
child: Text(
birdDetails.toString(),
textAlign: TextAlign.justify,
style: TextStyle(
fontSize: 16
),
),
),
SizedBox(height: 10,),
],
),
),
),
),
),
],
),
),
);
}
}
最终结果(根据您如何组织小部件,但没有溢出):
关于flutter - SingleChildScrollView仍然导致屏幕溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64200763/
我有一个父 SCS View (SingleChildScrollView)和一个子 SCS View 。在子 SCS View 中有一个数据表,数据表从屏幕底部的四分之一处开始。 现在,当用户滚动到
你们如何解决以下 Flutter 布局? 我有一个屏幕,我必须在其中显示,如图所示:一个 Logo + 3 个 TextFormFields + 2 个按钮 + 一个容器。 问题: 我需要将所有小部件
如何滚动 SingleChildScrollView以编程方式? 在长表单上,需要自动滚动到需要的输入字段。 最佳答案 有多种解决方案: 使用 ScrollController : 分配给 contr
我正在尝试归档类似于图像的布局,其中有一个顶部固定区域(红色)和一个可滚动区域(黄色),顶部有一些文本字段(文本 1、文本 2)和一个终端元素在可滚动区域的底部 (* Bottom Text)。我试着
我有一个 SingleChildScrollView,里面有一个 Container。我想要实现的是 Container 的 高度应该是一个完整的视口(viewport)高度。 我的代码: class
我在 flutter 方面遇到问题。我的屏幕没有滚动。我有几个组件使用 Column 功能将它们放在一个下方,但简单的滚动功能不起作用。 这是我的代码 Widget buildContent() {
我试图在用 singlechildscrollview 包裹的列中使用间隔器,它给了我一个错误。 RenderFlex children have non-zero flex but incoming
我尝试使用 ReorderableListView内SingleChildScrollView ,但我收到一个错误: I/flutter ( 9049): ══╡ EXCEPTION CAUGHT B
我不知道如何在 Flutter 中进行这种布局。我想要实现的是: 我有一列,包含一个固定高度的子项(标题文本小部件)和两个扩展小部件。我正在使用扩展,因为我希望每个人共享剩余屏幕的一半。 当方向更改为
是否可以检查 SingleChildScrollView 是否适合屏幕以便不需要滚动? 我想根据这些信息实现不同的行为。 提前感谢大家。 最佳答案 我遇到了同样的问题,并找到了解决方法。以下是我的制作
在我的 flutter 应用程序中,我需要一个布局,如果所有小部件对于屏幕而言都太长,我可以在其中滚动,因此我添加了一个 SingleChildScrollView。但是,如果小部件较小并且留有很多空
在我的 flutter 应用程序中,我需要一个布局,如果所有小部件对于屏幕而言都太长,我可以在其中滚动,因此我添加了一个 SingleChildScrollView。但是,如果小部件较小并且留有很多空
我有一个由列组成的布局,其中一个元素是一行(以便它占据屏幕的整个宽度)。在该行中,我有一个换行符,其内容相当大,我想将其放入 SingleChildScrollView 中。 @override
我正在尝试创建一个其中包含一列的 SingleChildScrollView,我希望在屏幕的最底部有一个按钮。为此,我尝试使用带有 SingleChildScrollView 和 FlatButton
这是我正在开发的登录页面的屏幕: https://ibb.co/X22g4rc 当键盘出现时,它告诉我有溢出,这似乎是正常的: https://ibb.co/mzVLJ4f 在网络上进行一些研究后,我
@override Widget build(BuildContext context) { return Scaffold( backgroundColor: Color(0xff003859)
我的多行 TextField 需要一个滚动位置指示器,它被包裹在 SingleChildScrollView 中。 文本字段中的文本比可见的多,我看不出隐藏了一些文本及其隐藏位置(顶部或底部) 这是
我正在开发一个应用程序,并正在关注此 link 中的示例并遇到了一个问题,它说底部溢出 xx 像素,如下所示: 现在,我以前遇到过这个问题,通过添加 SingleChildScrollView 解决了
我正在使用 SingleChildScrollView,当点击其中的 FormTextField 时,键盘出现并且 ScrollView 向上滚动。关闭键盘后,我仍然可以手动滚动 Scrollview
每次我打开键盘时,图像都会根据键盘上方的屏幕尺寸进行缩放,而不是在设备的整个屏幕上。我的代码如下,请问如何解决?因为如果我不放置 SingleChieldScrollView,它将显示黄色像素警报横幅
我是一名优秀的程序员,十分优秀!