Flutter 颤振-在两个固定容器之间插入列表视图
此特定屏幕由一个大容器(屏幕高度)组成:此容器由三部分组成:页眉(固定容器:屏幕大小的10%)、页脚(固定容器:屏幕大小的10%)和中间部分:容器:屏幕大小的80%。 我希望中间的容器是可滚动的:所以我插入了一个LISTVIEW作为这个容器的子容器。。。但它一直告诉我我的RenderFlex溢出了。。。。为什么中间容器的内容不在页眉和页脚之间滚动 代码如下:Flutter 颤振-在两个固定容器之间插入列表视图,flutter,listview,scroll,containers,Flutter,Listview,Scroll,Containers,此特定屏幕由一个大容器(屏幕高度)组成:此容器由三部分组成:页眉(固定容器:屏幕大小的10%)、页脚(固定容器:屏幕大小的10%)和中间部分:容器:屏幕大小的80%。 我希望中间的容器是可滚动的:所以我插入了一个LISTVIEW作为这个容器的子容器。。。但它一直告诉我我的RenderFlex溢出了。。。。为什么中间容器的内容不在页眉和页脚之间滚动 代码如下: Scaffold( backgroundColor: Colors.indigo[900], appBar: Ap
Scaffold(
backgroundColor: Colors.indigo[900],
appBar: AppBar(
backgroundColor: Colors.white,
elevation: 0,
automaticallyImplyLeading: false,
leading: IconButton(
icon: Icon(Icons.arrow_back_ios_rounded,
color: Colors.red[400], size: 25.0),
onPressed: () {
uD.clearSearchList();
Navigator.pushReplacementNamed(context, StudentHomeScreen.id);
}),
title: Text(
'ETAPE 1 - Découverte',
style: TextStyle(color: Colors.indigo[900], fontSize: 22),
),
actions: [
Container(
margin: const EdgeInsets.only(right: 10),
child: Icon(Icons.memory, size: 45, color: Colors.red[900]),
),
],
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Container(
height: MediaQuery.of(context).size.height,
decoration: BoxDecoration(
color: Colors.orange[50],
borderRadius: BorderRadius.circular(10.0),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
height: (MediaQuery.of(context).size.height) * 0.12,
padding: const EdgeInsets.fromLTRB(12, 12, 12, 0),
decoration: BoxDecoration(
color: Colors.orange[100],
borderRadius: BorderRadius.only(
topLeft: Radius.circular(10),
topRight: Radius.circular(10),
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Activité 1',
style: TextStyle(
color: Colors.red[900],
fontSize: 30,
fontWeight: FontWeight.bold),
),
Text(
'Mot n°1/24',
style: TextStyle(
color: Colors.indigo[900],
fontSize: 17.0,
),
),
],
),
SleekCircularSlider(
appearance: CircularSliderAppearance(
infoProperties: InfoProperties(
modifier: (reussite) {
return '${reussite.toInt()} / 5';
},
bottomLabelText: 'Réussite',
bottomLabelStyle:
TextStyle(fontSize: 12, color: Colors.red[900]),
),
size: 90,
customColors: CustomSliderColors(
progressBarColor: Colors.green[900]),
customWidths:
CustomSliderWidths(progressBarWidth: 8)),
min: 0,
max: 5,
initialValue: reussite <= 5 ? reussite : 5,
)
],
),
),
Container(
height: (MediaQuery.of(context).size.height) * 0.8,
child: ListView(
shrinkWrap: true,
children: [
Container(
padding: EdgeInsets.all(12.0),
margin: const EdgeInsets.only(top: 8),
child: Text(
'Ecoute et répète 5 fois le mot en anglais.',
style:
TextStyle(color: Colors.indigo[700], fontSize: 17),
),
),
Container(
margin: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: Colors.white,
border: Border.all(
width: 1.0,
),
borderRadius: BorderRadius.circular(10.0),
),
padding: const EdgeInsets.only(top: 16),
child: Row(
children: [
Container(
height: 200,
child: Image.asset(
'images/avatar_teacher.jpeg',
),
),
Padding(
padding: const EdgeInsets.all(24.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
child: Text(
'An adult',
style: TextStyle(
color: Colors.red[900],
fontSize: 23,
),
),
),
Container(
margin: const EdgeInsets.only(bottom: 60),
child: Text(
'Un adulte',
style: TextStyle(
color: Colors.indigo[900],
fontSize: 15,
),
),
),
GestureDetector(
child: Container(
height: 45,
margin:
EdgeInsets.fromLTRB(0, 5.0, 0, 15.0),
alignment: Alignment.topRight,
child: Icon(
Icons.volume_up,
color: Colors.indigo[500],
size: 55.0,
),
),
onTap: () {
Tts.speak(
phrase: 'little',
langue: Language.english);
},
),
Container(
alignment: Alignment.topRight,
child: Text('/adult/'),
),
],
),
),
],
),
),
Container(
height: 80,
margin: const EdgeInsets.symmetric(vertical: 20),
alignment: Alignment.center,
child: IconButton(
icon: Icon(
Icons.mic,
color: Colors.red[900],
size: 50,
),
onPressed: () async {
uD.checkSpokenWords('adult', reussite);
}),
),
Container(
alignment: Alignment.center,
child: Text(
'Clique sur le micro et répète le mot',
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.black45,
fontSize: 15.0,
),
),
),
SizedBox(
height: 50.0,
),
Container(
width: double.infinity,
alignment: Alignment.centerLeft,
margin: const EdgeInsets.only(top: 12),
decoration: BoxDecoration(
color: Colors.white,
border: Border.all(
width: 1.0,
),
borderRadius: BorderRadius.circular(10.0),
),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
children: [
Text('Voici ce que j\'ai compris : '),
Text(uD.spokenWords),
],
),
),
),
],
),
),
Container(
height: (MediaQuery.of(context).size.height) * 0.08,
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: Colors.orange[100],
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(10),
bottomRight: Radius.circular(10),
),
),
margin: const EdgeInsets.only(top: 8),
child: RoundedProgressBar(
milliseconds: 1000,
childLeft: Text(
'Réussite de l\'activité : ',
style: TextStyle(color: Colors.indigo[900]),
),
childRight: Text("$reussite%",
style: TextStyle(color: Colors.red[900])),
percent: reussite,
theme: RoundedProgressBarTheme.blue),
),
],
),
),
),
);
脚手架(
背景颜色:颜色。靛蓝[900],
appBar:appBar(
背景颜色:Colors.white,
海拔:0,
自动嵌入:false,
领先:IconButton(
图标:图标(Icons.arrow\u back\u ios\u圆角,
颜色:颜色。红色[400],尺寸:25.0),
已按下:(){
uD.clearSearchList();
Navigator.pushReplacementNamed(上下文,StudentHomeScreen.id);
}),
标题:正文(
“ETAPE 1-Découvert”,
样式:TextStyle(颜色:Colors.indigo[900],字体大小:22),
),
行动:[
容器(
边距:仅限常量边集(右:10),
子:图标(Icons.memory,大小:45,颜色:Colors.red[900]),
),
],
),
主体:填充物(
填充:常数边集全部(16.0),
子:容器(
高度:MediaQuery.of(context).size.height,
装饰:盒子装饰(
颜色:颜色。橙色[50],
边界半径:边界半径。圆形(10.0),
),
子:列(
crossAxisAlignment:crossAxisAlignment.start,
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
容器(
高度:(MediaQuery.of(context.size.height)*0.12,
填充:从LTRB(12,12,12,0)开始的常数边集,
装饰:盒子装饰(
颜色:颜色。橙色[100],
borderRadius:仅限borderRadius(
左上:半径。圆形(10),
右上角:半径。圆形(10),
),
),
孩子:排(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
纵队(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
“活动1”,
样式:TextStyle(
颜色:颜色。红色[900],
尺寸:30,
fontWeight:fontWeight.bold),
),
正文(
“Mot编号1/24”,
样式:TextStyle(
颜色:颜色。靛蓝[900],
字体大小:17.0,
),
),
],
),
圆滑滑道(
外观:圆形滑动外观(
InfoProperty:InfoProperty(
修饰语:(重复使用站点){
返回“${reussite.toInt()}/5”;
},
底部标签文字:“Réussite”,
底部标签样式:
TextStyle(字体大小:12,颜色:Colors.red[900]),
),
尺码:90,
自定义颜色:自定义幻灯片颜色(
progressBarColor:Colors.green[900]),
自定义宽度:
自定义滑块宽度(progressBarWidth:8)),
分:0,,
最高:5,
initialValue:reussite您应该将中间的容器(高度为0.8*MediaQuery的容器)替换为Expanded,这样它将占用其他两个容器之间的可用空间。非常感谢!:)我觉得很愚蠢;)