我是Flutter的新手,非常渴望学习这项技术。我无法理解列表视图中的收缩包装属性的工作。我听不懂Flutter文档。有人可以帮忙吗?预先感谢。
答案 0 :(得分:12)
通常ListView
(以及GridView
,PageView
和CustomScrollView
)试图填充父元素给定的所有可用空间,即使列表项将需要更少的空间。
使用shrinkWrap: true
,您可以更改此行为,以便ListView
仅占用其所需的空间(当有更多项目时,它仍会滚动)。
看看这个例子:
import 'package:flutter/material.dart';
void main() => runApp(App());
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(),
body: Center(
child: Container(
margin: EdgeInsets.all(32),
decoration: BoxDecoration(border: Border.all(color: Colors.red)),
child: ListView(
shrinkWrap: false,
children: <Widget>[
ListTile(title: Text('Item 1')),
ListTile(title: Text('Item 2')),
ListTile(title: Text('Item 3')),
],
),
),
),
),
);
}
}
使用shrinkWrap: false
:
使用shrinkWrap: true
:
您可以在AlertDialog
s中使用它:如果只有几个项目,则使对话框尽可能小。如果有很多项目,请填充屏幕高度并使列表可滚动:
答案 1 :(得分:3)
每个ScrollView(ListView,GridView,CustomScrollView)都有一个rinkWrap属性,用于确定 scrollDirection 的大小。
因此ScrollView的scrollDirection可以具有02个大小。
如果ScrollView的 shrinkWrap:false ,则ScrollView的scrollDirection大小为与父大小相同。
如果ScrollView的 shrinkWrap:true ,则ScrollView的scrollDirection大小为与内容大小(所有子项大小)相同。
但是为什么需要ScrollView scrollDirection在这02个大小之间进行切换?
原因是ScrollView的父约束。
答案 2 :(得分:0)
如果您不设置shrinkWrap
属性,则您的ListView
将与其父属性一样大。
如果将其设置为true
,则列表将包装其内容,并使其大小达到子级允许的大小。
答案 3 :(得分:0)
顺便说一句,您可以将此属性添加到其他小部件(例如RisedButton)中,以将点击目标尺寸缩小到Material规范提供的最小值。
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,