Flutter - 屏幕不滚动
Flutter - The screen is not scrolling
我插入了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.'),
),
],
),
),
...
...
...
],
)
);
}
一列中的一列使得布局无法在不设置高度的情况下进行计算。
第二列没有用,因为它只包含一个元素,尝试将ListTile直接作为Card的主体。
列不滚动。尝试用 ListView 替换外部 Column。您可能需要在上面加上 shrinkWrap: true
。
你必须把它放在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,
);
要使列可滚动,只需将其包裹在 SingleChildScrollView 中即可。
我需要将 SingleChildScrollView
放在 Column
中。 SingleChildScrollView
小时候也需要 Column
,但在那种情况下卷轴对我不起作用。解决方案是用 Expanded
包裹 SingleChildScrollView
。所以这是它的样子:
Column(
children: <Widget>[
MyFirstWidget(),
Expanded(
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
// Scrollable content.
],
),
),
),
],
),
您还可以将父列包装在容器中,然后使用 SingleChildscrollView 小部件包装容器。 (这解决了我的问题)。
这可能会奏效,对我来说很有魅力:
shrinkWrap: true, physics: ClampingScrollPhysics(),
您应该使用 ListView.builder 代替内部列(正如我在上面建议的,列不可滚动)。
在 ListView.builder 内设置 shrinkWrap: true 和 physics: ClampingScrollPhysics()。仅仅使用 shrinkWrap: true 并没有解决我的问题。但是将物理设置为 ClampingScrollPhysics() 开始使其滚动。
通常有两种方法可以使屏幕可滚动。一种是使用 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
属性.
只需添加物理:ClampingScrollPhysics(),
我插入了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.'),
),
],
),
),
...
...
...
],
)
);
}
一列中的一列使得布局无法在不设置高度的情况下进行计算。 第二列没有用,因为它只包含一个元素,尝试将ListTile直接作为Card的主体。
列不滚动。尝试用 ListView 替换外部 Column。您可能需要在上面加上 shrinkWrap: true
。
你必须把它放在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,
);
要使列可滚动,只需将其包裹在 SingleChildScrollView 中即可。
我需要将 SingleChildScrollView
放在 Column
中。 SingleChildScrollView
小时候也需要 Column
,但在那种情况下卷轴对我不起作用。解决方案是用 Expanded
包裹 SingleChildScrollView
。所以这是它的样子:
Column(
children: <Widget>[
MyFirstWidget(),
Expanded(
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
// Scrollable content.
],
),
),
),
],
),
您还可以将父列包装在容器中,然后使用 SingleChildscrollView 小部件包装容器。 (这解决了我的问题)。
这可能会奏效,对我来说很有魅力:
shrinkWrap: true, physics: ClampingScrollPhysics(),
您应该使用 ListView.builder 代替内部列(正如我在上面建议的,列不可滚动)。 在 ListView.builder 内设置 shrinkWrap: true 和 physics: ClampingScrollPhysics()。仅仅使用 shrinkWrap: true 并没有解决我的问题。但是将物理设置为 ClampingScrollPhysics() 开始使其滚动。
通常有两种方法可以使屏幕可滚动。一种是使用 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
属性.
只需添加物理:ClampingScrollPhysics(),