Flutter 颤振:Can';无法使SingleChildScrollView中的容器垂直扩展
在过去的两个小时里,我尝试了我能找到的每一种方法(Expanded、IntrinsicHeight、BoxConstraints等),试图得到一个包含一列widget的容器来扩展到整个高度。该容器位于SingleChildScrollView中,因为我需要滚动功能。这可能是问题的一部分,但我似乎不知道确切的原因 这是当前的行为: 这是被通缉的行为: 这是我的原始代码:Flutter 颤振:Can';无法使SingleChildScrollView中的容器垂直扩展,flutter,dart,Flutter,Dart,在过去的两个小时里,我尝试了我能找到的每一种方法(Expanded、IntrinsicHeight、BoxConstraints等),试图得到一个包含一列widget的容器来扩展到整个高度。该容器位于SingleChildScrollView中,因为我需要滚动功能。这可能是问题的一部分,但我似乎不知道确切的原因 这是当前的行为: 这是被通缉的行为: 这是我的原始代码: class CreateNewArtikel extends StatefulWidget { @override
class CreateNewArtikel extends StatefulWidget {
@override
_CreateNewArtikelState createState() => _CreateNewArtikelState();
}
class _CreateNewArtikelState extends State<CreateNewArtikel> {
final titleController = TextEditingController();
final subtitleController = TextEditingController();
final tagsController = TextEditingController();
final authorController = TextEditingController();
final textController = TextEditingController();
File imageFile;
@override
Widget build(BuildContext context) {
final isAdmin = Provider.of<bool>(context);
if (isAdmin == true) {
return GlobalScaffold(
body: SingleChildScrollView(
child: Container(
color: Colors.yellow,
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 15),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
GradientHeading(
large: true,
text: "Skapa ny artikel",
),
SizedBox(height: 15),
CustomTextFormField(
labelText: "Rubrik",
controller: titleController,
),
CustomTextFormField(
labelText: "Underrubrik",
controller: subtitleController,
),
CustomTextFormField(
labelText: "Tags",
controller: tagsController,
),
CustomTextFormField(
labelText: "Skriven av",
controller: authorController,
),
CustomTextFormField(
labelText: "Text",
controller: textController,
multiline: true,
),
imageFile != null
? NormalButton(
text: "Ta bort bild",
shouldOverideColor: true,
overriddenColor: redWarningColor,
onPressed: () {
imageFile = null;
setState(() {});
},
)
: NormalButton(
text: "Ladda upp bild",
outlined: true,
outlinedBgColor: primaryColor,
onPressed: () async {
imageFile = await ChooseImage()
.chooseImageFromGallery();
setState(() {});
},
),
imageFile != null
? Image(
image: FileImage(imageFile),
)
: Container(),
SizedBox(height: 40),
],
),
),
NormalButton(
text: "Skapa artikel",
onPressed: () async {
DatabaseService().createNewArtikel(
titleController.text,
subtitleController.text,
tagsController.text,
authorController.text,
textController.text,
imageFile,
);
Navigator.pop(context);
},
),
],
),
),
),
);
} else {
return GlobalScaffold(
body: Text("You don't have access to this page"),
);
}
}
}
class CreateNewArtikel扩展StatefulWidget{
@凌驾
_CreateNewArtikelState createState()=>\u CreateNewArtikelState();
}
类_CreateNewArtikelState扩展状态{
最终标题控制器=文本编辑控制器();
最终字幕控制器=TextEditingController();
final tagsController=TextEditingController();
最终authorController=TextEditingController();
final textController=TextEditingController();
文件图像文件;
@凌驾
小部件构建(构建上下文){
final isAdmin=Provider.of(上下文);
如果(isAdmin==true){
返回全局折叠(
正文:SingleChildScrollView(
子:容器(
颜色:颜色,黄色,
填充:边缘组。对称(水平:20,垂直:15),
子:列(
mainAxisAlignment:mainAxisAlignment.start,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
容器(
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
梯度阅读(
大:是的,
文字:“Skapa ny artikel”,
),
尺寸箱(高度:15),
CustomTextFormField(
标签文字:“Rubrik”,
控制器:标题控制器,
),
CustomTextFormField(
标签文字:“Underrubrik”,
控制器:控制器,
),
CustomTextFormField(
标签文本:“标签”,
控制器:标记控制器,
),
CustomTextFormField(
labelText:“Skriven av”,
控制器:authorController,
),
CustomTextFormField(
labelText:“文本”,
控制器:textController,
多行:对,
),
imageFile!=null
?正常按钮(
文字:“Ta bort bild”,
真的,
OverridedColor:redWarningColor,
已按下:(){
imageFile=null;
setState((){});
},
)
:正常按钮(
文字:“拉达乌普图片”,
是的,
outlinedBgColor:primaryColor,
onPressed:()异步{
imageFile=等待选择图像()
.选择图像库();
setState((){});
},
),
imageFile!=null
?形象(
图像:文件图像(图像文件),
)
:Container(),
尺寸箱(高度:40),
],
),
),
正常按钮(
文字:“斯卡帕·阿蒂克尔”,
onPressed:()异步{
DatabaseService().createNewArtikel(
titleController.text,
subtitleController.text,
tagsController.text,
authorController.text,
textController.text,
图像文件,
);
Navigator.pop(上下文);
},
),
],
),
),
),
);
}否则{
返回全局折叠(
正文:文本(“您无权访问此页面”),
);
}
}
}
尝试以下方法:
LayoutBuilder(
builder: (context, constraint) {
return SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints(minHeight: constraint.maxHeight),
child: IntrinsicHeight(
child: Column(
children: <Widget>[
Text("Header"),
Expanded(
child: Container(
color: Colors.red,
),
),
Text("Footer"),
],
),
),
),
);
},
)
LayoutBuilder(
生成器:(上下文,约束){
返回SingleChildScrollView(
子:约束框(
约束:BoxConstraints(最小高度:constraint.maxHeight),
孩子:内在的(
子:列(
儿童:[
文本(“标题”),
扩大(
子:容器(
颜色:颜色,红色,
),
),
文本(“页脚”),
],
),
),
),
);
},
)
有关此问题的更多信息,请参阅以下讨论:
将以下内容添加到
build()
(24是Android中状态栏的高度)
并将以下内容添加到您的
容器()
哇,非常感谢!只需几个小部件就可以很好地工作。祝你今天愉快:)
final double hsize = MediaQuery.of(context).size.height;
final double pageHeight = hsize - kToolbarHeight -24;
height: pageHeight