Flutter 颤振:Can';无法使SingleChildScrollView中的容器垂直扩展

Flutter 颤振:Can';无法使SingleChildScrollView中的容器垂直扩展,flutter,dart,Flutter,Dart,在过去的两个小时里,我尝试了我能找到的每一种方法(Expanded、IntrinsicHeight、BoxConstraints等),试图得到一个包含一列widget的容器来扩展到整个高度。该容器位于SingleChildScrollView中,因为我需要滚动功能。这可能是问题的一部分,但我似乎不知道确切的原因 这是当前的行为: 这是被通缉的行为: 这是我的原始代码: class CreateNewArtikel extends StatefulWidget { @override

在过去的两个小时里,我尝试了我能找到的每一种方法(Expanded、IntrinsicHeight、BoxConstraints等),试图得到一个包含一列widget的容器来扩展到整个高度。该容器位于SingleChildScrollView中,因为我需要滚动功能。这可能是问题的一部分,但我似乎不知道确切的原因

这是当前的行为:

这是被通缉的行为:

这是我的原始代码:

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