Flutter ListView不是';t在颤振中滚动
ListView在这里不起作用,首先我使用了Positioned()代替padding,但github上也有类似的问题,我知道可滚动小部件不应该放在Positioned()中,所以我用padding()替换了它,但没有成功 这是我的密码Flutter ListView不是';t在颤振中滚动,flutter,flutter-listview,Flutter,Flutter Listview,ListView在这里不起作用,首先我使用了Positioned()代替padding,但github上也有类似的问题,我知道可滚动小部件不应该放在Positioned()中,所以我用padding()替换了它,但没有成功 这是我的密码 import 'package:flutter/material.dart'; import 'package:cpblog/webview.dart'; import 'package:flutter/rendering.dart'; class Detai
import 'package:flutter/material.dart';
import 'package:cpblog/webview.dart';
import 'package:flutter/rendering.dart';
class DetailsPage extends StatefulWidget {
final heroTag;
final foodName;
final url;
final text;
DetailsPage({this.heroTag, this.foodName,this.url,this.text});
@override
_DetailsPageState createState() => _DetailsPageState();
}
class _DetailsPageState extends State<DetailsPage> {
var selectedCard = 'WEIGHT';
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color(0xFF7A9BEE),
appBar: AppBar(
leading: IconButton(
onPressed: () {
Navigator.of(context).pop();
},
icon: Icon(Icons.arrow_back_ios),
color: Colors.white,
),
backgroundColor: Colors.transparent,
elevation: 0.0,
title: Text('Here You Go!!',
style: TextStyle(
fontFamily: 'Montserrat',
fontSize: 18.0,
color: Colors.white)),
centerTitle: true,
actions: <Widget>[
IconButton(
icon: Icon(Icons.more_horiz),
onPressed: () {},
color: Colors.white,
)
],
),
body: ListView(children: [
Stack(children: [
Container(
height: MediaQuery.of(context).size.height - 82.0,
width: MediaQuery.of(context).size.width,
color: Colors.transparent),
Padding(
padding: const EdgeInsets.only(top: 75.0),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(45.0),
topRight: Radius.circular(45.0),
),
color: Colors.white),
height: MediaQuery.of(context).size.height - 100.0,
width: MediaQuery.of(context).size.width),
),
Padding(
padding: EdgeInsets.only(top: 30.0,
left: (MediaQuery.of(context).size.width / 2) - 100.0,),
child: Hero(
tag: widget.heroTag,
child: Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
image: DecorationImage(
image: NetworkImage(widget.heroTag),
fit: BoxFit.cover)),
height: 200.0,
width: 200.0)),
),
Padding(
padding: const EdgeInsets.only(top:250.0,right:25.0,left: 25.0),
child: ListView(
shrinkWrap: true,
children: <Widget>[
Text(widget.foodName,
style: TextStyle(
fontFamily: 'Montserrat',
fontSize: 22.0,
fontWeight: FontWeight.bold)),
SizedBox(height: 20.0),
Text(widget.text,
style: TextStyle(
fontFamily: 'Montserrat',
fontSize: 20.0,
)),
SizedBox(height: 20.0),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Container(
width: 125.0,
height: 40.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(17.0),
color: Color(0xFF7A9BEE)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => WebView(widget.url, widget.foodName)));
},
child:Text('View More',
style: TextStyle(
color: Colors.white,
fontFamily: 'Montserrat',
fontSize: 15.0)),
)
],
),
)
],
),
SizedBox(height: 20.0),
Container(
height: 150.0,
child: ListView(
scrollDirection: Axis.horizontal,
children: <Widget>[
_buildInfoCard('WEIGHT', '300', 'G'),
SizedBox(width: 10.0),
_buildInfoCard('CALORIES', '267', 'CAL'),
SizedBox(width: 10.0),
_buildInfoCard('VITAMINS', 'A, B6', 'VIT'),
SizedBox(width: 10.0),
_buildInfoCard('AVAIL', 'NO', 'AV')
],
)
),
SizedBox(height: 20.0),
Padding(
padding: EdgeInsets.only(bottom:5.0),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.only(topLeft: Radius.circular(10.0), topRight: Radius.circular(10.0), bottomLeft: Radius.circular(25.0), bottomRight: Radius.circular(25.0)),
color: Colors.black
),
height: 50.0,
child:
InkWell(
onTap: () {
Navigator.pop(context);
},
child: Center(
child: Text(
'Back',
style: TextStyle(
color: Colors.white,
fontFamily: 'Montserrat'
)
),
),
)
),
)
],
),
)
])
]));
}
Widget _buildInfoCard(String cardTitle, String info, String unit) {
return InkWell(
onTap: () {
selectCard(cardTitle);
},
child: AnimatedContainer(
duration: Duration(milliseconds: 500),
curve: Curves.easeIn,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
color: cardTitle == selectedCard ? Color(0xFF7A9BEE) : Colors.white,
border: Border.all(
color: cardTitle == selectedCard ?
Colors.transparent :
Colors.grey.withOpacity(0.3),
style: BorderStyle.solid,
width: 0.75
),
),
height: 100.0,
width: 100.0,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.only(top: 8.0, left: 15.0),
child: Text(cardTitle,
style: TextStyle(
fontFamily: 'Montserrat',
fontSize: 12.0,
color:
cardTitle == selectedCard ? Colors.white : Colors.grey.withOpacity(0.7),
)),
),
Padding(
padding: const EdgeInsets.only(left: 15.0, bottom: 8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(info,
style: TextStyle(
fontFamily: 'Montserrat',
fontSize: 14.0,
color: cardTitle == selectedCard
? Colors.white
: Colors.black,
fontWeight: FontWeight.bold)),
Text(unit,
style: TextStyle(
fontFamily: 'Montserrat',
fontSize: 12.0,
color: cardTitle == selectedCard
? Colors.white
: Colors.black,
))
],
),
)
]
)
)
);
}
selectCard(cardTitle) {
setState(() {
selectedCard = cardTitle;
});
}
}
导入“包装:颤振/材料.省道”;
导入“包:cpblog/webview.dart”;
导入“package:flatter/rendering.dart”;
类DetailsPage扩展StatefulWidget{
最终heroTag;
最终食品名称;
最终网址;
最后文本;
DetailsPage({this.heroTag,this.foodName,this.url,this.text});
@凌驾
_DetailsPageState createState()=>_DetailsPageState();
}
类\u DetailsPageState扩展状态{
var selectedCard=‘重量’;
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景颜色:颜色(0xFF7A9BEE),
appBar:appBar(
领先:IconButton(
已按下:(){
Navigator.of(context.pop();
},
图标:图标(图标、箭头、背面),
颜色:颜色,白色,
),
背景颜色:颜色。透明,
标高:0.0,
标题:Text('给你!!',
样式:TextStyle(
fontFamily:“蒙特塞拉特”,
字体大小:18.0,
颜色:颜色。白色),
标题:对,
行动:[
图标按钮(
图标:图标(更多图标),
按下:(){},
颜色:颜色,白色,
)
],
),
正文:列表视图(子项:[
堆栈(子对象:[
容器(
高度:MediaQuery.of(context).size.height-82.0,
宽度:MediaQuery.of(context).size.width,
颜色:颜色。透明),
填充物(
填充:仅限常量边集(顶部:75.0),
子:容器(
装饰:盒子装饰(
borderRadius:仅限borderRadius(
左上:半径。圆形(45.0),
右上角:半径。圆形(45.0),
),
颜色:颜色。白色),
高度:MediaQuery.of(context).size.height-100.0,
宽度:MediaQuery.of(context.size.width),
),
填充物(
填充:仅限边缘设置(顶部:30.0,
左:(MediaQuery.of(context.size.width/2)-100.0,),
孩子:英雄(
标签:widget.heroTag,
子:容器(
装饰:盒子装饰(
形状:BoxShape.circle,
图像:装饰图像(
image:NetworkImage(widget.heroTag),
安装:BoxFit.盖),
高度:200.0,
宽度:200.0毫米),
),
填充物(
填充:仅限常量边集(顶部:250.0,右侧:25.0,左侧:25.0),
子:ListView(
收缩膜:对,
儿童:[
文本(widget.foodName,
样式:TextStyle(
fontFamily:“蒙特塞拉特”,
字体大小:22.0,
fontWeight:fontWeight.bold),
尺寸箱(高度:20.0),
Text(widget.Text,
样式:TextStyle(
fontFamily:“蒙特塞拉特”,
字体大小:20.0,
)),
尺寸箱(高度:20.0),
划船(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
容器(
宽度:125.0,
身高:40.0,
装饰:盒子装饰(
边界半径:边界半径。圆形(17.0),
颜色:颜色(0xFF7A9BEE)),
孩子:排(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
墨水池(
onTap:(){
导航器。推(
上下文
MaterialPage路由(生成器:(上下文)=>WebView(widget.url,widget.foodName));
},
子项:文本('查看更多',
样式:TextStyle(
颜色:颜色,白色,
fontFamily:“蒙特塞拉特”,
字体大小:15.0),
)
],
),
)
],
),
尺寸箱(高度:20.0),
容器(
高度:150.0,
子:ListView(
滚动方向:轴水平,
儿童:[
_buildInfoCard(“重量”、“300”、“克”),
尺寸箱(宽度:10.0),
_buildInfoCard('Carries','267','CAL'),
尺寸箱(宽度:10.0),
_构建信息卡(“维生素”、“A、B6”、“维生素”),
尺寸箱(宽度:10.0),
_buildInfoCard('AVAIL'、'NO'、'AV')
],
)
),
尺寸箱(高度:20.0),
填充物(
填充:仅限边缘设置(底部:5.0),
子:容器(
装饰:盒子装饰(