如何使整个屏幕在颤振中滚动
How to make whole screen scrollable in flutter
这是我的屏幕支架主体代码
Container(
child: Column(
children: <Widget>[
Expanded(
child: SingleChildScrollView(
child: Column(
children: <Widget>[
VideoPlay(widget: widget),
TitleVideo(widget: widget),
Padding(
padding: const EdgeInsets.only(top: 1.0, left: 10),
child: Opacity(
opacity: 0.5,
child: Row(
children: <Widget>[
Text(widget.video.viewCount + " views "),
SizedBox(
width: 5,
child: Text("|"),
),
Text(" ${timeago.format(widget.video.timestamp)}"),
],
),
),
),
SizedBox(
height: 15,
),
IconRow(
video: widget.video,
),
//User Panel
subscribe_panel(),
SizedBox(
height: 310,
child: suggestedVideo(),
),
// Suggestions list
],
),
),
),
],
),
);
}
“建议列表”包含此代码
class suggestedVideo extends StatelessWidget {
const suggestedVideo({Key? key,}) : super(key: key);
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: suggestedVideos.length,
itemBuilder: (context, index) => VideoCard(
video: suggestedVideos[index],
press: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
VideoScreen(video: suggestedVideos[index])));
},
),
);
}
}
但是屏幕只滚动 ListView Builder 部分而不是整个屏幕,
我正在尝试重新创建 youtube UI 并且对于 VideoScrolling 屏幕,我想滚动屏幕,方法是将视频保持在顶部并且每个其他小部件都可以滚动。
发生这种情况是因为当您尝试滚动时,它滚动的是 ListView 而不是 SingleChildScrollView。
为了解决这个问题,添加
physics: const NeverScrollableScrollPhysics()
到您的 ListView。
您还可以删除包裹 suggestedVideo()
的 SizedBox
并添加
shrinkWrap: true,
scrollDirection: Axis.vertical,
到您的 ListView。
您可以将 top-most Container
换成 SingleChildScrollView
,这将使您的所有 Widget 都可以滚动,您也可以将 SingleChildScrollView(child: Column(...
替换为 ListView(...)
, 它会给你同样的结果
这是我的屏幕支架主体代码
Container(
child: Column(
children: <Widget>[
Expanded(
child: SingleChildScrollView(
child: Column(
children: <Widget>[
VideoPlay(widget: widget),
TitleVideo(widget: widget),
Padding(
padding: const EdgeInsets.only(top: 1.0, left: 10),
child: Opacity(
opacity: 0.5,
child: Row(
children: <Widget>[
Text(widget.video.viewCount + " views "),
SizedBox(
width: 5,
child: Text("|"),
),
Text(" ${timeago.format(widget.video.timestamp)}"),
],
),
),
),
SizedBox(
height: 15,
),
IconRow(
video: widget.video,
),
//User Panel
subscribe_panel(),
SizedBox(
height: 310,
child: suggestedVideo(),
),
// Suggestions list
],
),
),
),
],
),
);
}
“建议列表”包含此代码
class suggestedVideo extends StatelessWidget {
const suggestedVideo({Key? key,}) : super(key: key);
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: suggestedVideos.length,
itemBuilder: (context, index) => VideoCard(
video: suggestedVideos[index],
press: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
VideoScreen(video: suggestedVideos[index])));
},
),
);
}
}
但是屏幕只滚动 ListView Builder 部分而不是整个屏幕, 我正在尝试重新创建 youtube UI 并且对于 VideoScrolling 屏幕,我想滚动屏幕,方法是将视频保持在顶部并且每个其他小部件都可以滚动。
发生这种情况是因为当您尝试滚动时,它滚动的是 ListView 而不是 SingleChildScrollView。 为了解决这个问题,添加
physics: const NeverScrollableScrollPhysics()
到您的 ListView。
您还可以删除包裹 suggestedVideo()
的 SizedBox
并添加
shrinkWrap: true,
scrollDirection: Axis.vertical,
到您的 ListView。
您可以将 top-most Container
换成 SingleChildScrollView
,这将使您的所有 Widget 都可以滚动,您也可以将 SingleChildScrollView(child: Column(...
替换为 ListView(...)
, 它会给你同样的结果