我插入了6张卡片,但是无法滚动屏幕。
根据下图,页脚中出现红色条纹,屏幕不会滚动。
能够滚动屏幕缺少什么?
main.dart
import 'package:flutter/material.dart';
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: "Myapp",
home: new HomePage(),
);
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) => new Scaffold(
appBar: new AppBar(
backgroundColor: new Color(0xFF26C6DA),
),
body: new Column(
children: <Widget>[
new Card(
child: new Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
const ListTile(
leading: const Icon(Icons.album),
title: const Text('The Enchanted Nightingale'),
subtitle: const Text('Music by Julie Gable. Lyrics by Sidney Stein.'),
),
],
),
),
...
...
...
],
)
);
}
答案 0 :(得分:23)
列不要滚动。尝试使用ListView替换外部列。你可能需要把shrinkWrap:true放在上面。
答案 1 :(得分:11)
要使列可滚动,只需将其包装在SingleChildScrollView中。
答案 2 :(得分:5)
我需要将SingleChildScrollView
放在Column
内。 SingleChildScrollView
小时候还需要Column
,但在这种情况下,滚动条对我不起作用。解决方案是用SingleChildScrollView
包装Expanded
。所以这是它的外观:
Column(
children: <Widget>[
MyFirstWidget(),
Expanded(
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
// Scrollable content.
],
),
),
),
],
),
答案 3 :(得分:4)
您必须将其放在ListView.builder上
ListView.builder(
itemBuilder: (BuildContext context, int index){
final item = yourItemLists[index];
new Card(
child: new Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
const ListTile(
leading: const Icon(Icons.album),
title: const Text('The Enchanted Nightingale'),
subtitle: const Text('Music by Julie Gable. Lyrics by Sidney Stein.'),
),
],
),
);
},
itemCount: yourItemLists.length,
);
答案 4 :(得分:4)
这可能会达到目的,对我来说就像魅力:
shrinkWrap: true, physics: ClampingScrollPhysics(),
答案 5 :(得分:2)
列中的列使得无需设置高度就无法计算布局。 第二列是无用的,因为它只包含一个元素,尝试将ListTile直接作为卡的主体。
答案 6 :(得分:1)
您应该使用ListView.builder代替内部列(正如我上面建议的那样,这些列不可滚动)。 在ListView.builder中设置rinkleWrap:true,并设置物理:ClampingScrollPhysics()。仅使用shrinkWrap:true不能解决我的问题。但是将物理学设置为ClampingScrollPhysics()开始使它滚动。
答案 7 :(得分:0)
还可以将父列包装在容器中,然后使用SingleChildscrollView小部件包装容器。 (这解决了我的问题)。
答案 8 :(得分:0)
通常有两种方法可以使屏幕滚动。一种是使用Column
,另一种是使用ListView
。
使用列(用SingleChildScrollView
包装):
SingleChildScrollView( // Don't forget this.
child: Column(
children: [
Text('First'),
//... other children
Text('Last'),
],
),
)
使用ListView
:
ListView(
children: [
Text('First'),
//... other children
Text('Last'),
],
)
这种方法使用起来更简单,但是会丢失诸如crossAxisAlignment
之类的功能。对于这种情况,您可以将孩子的小部件包装在Align
内并设置alignment
属性。
答案 9 :(得分:-1)
只需添加物理:ClampingScrollPhysics(),