收缩包裹特性在颤振中起什么作用?

时间:2019-01-02 13:16:22

标签: flutter

我是Flutter的新手,非常渴望学习这项技术。我无法理解列表视图中的收缩包装属性的工作。我听不懂Flutter文档。有人可以帮忙吗?预先感谢。

4 个答案:

答案 0 :(得分:12)

通常ListView(以及GridViewPageViewCustomScrollView)试图填充父元素给定的所有可用空间,即使列表项将需要更少的空间。

使用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

without shrinkWrap

使用shrinkWrap: true

with shrinkWrap

您可以在AlertDialog s中使用它:如果只有几个项目,则使对话框尽可能小。如果有很多项目,请填充屏幕高度并使列表可滚动:

Dialog

Dialog

答案 1 :(得分:3)

每个ScrollView(ListView,GridView,CustomScrollView)都有一个rinkWrap属性,用于确定 scrollDirection 的大小。

因此ScrollView的scrollDirection可以具有02个大小。

  1. 与父代大小相同。
  2. 与内容大小相同(所有子项大小)。

如果ScrollView的 shrinkWrap:false ,则ScrollView的scrollDirection大小为与父大小相同

如果ScrollView的 shrinkWrap:true ,则ScrollView的scrollDirection大小为与内容大小(所有子项大小)相同

但是为什么需要ScrollView scrollDirection在这02个大小之间进行切换?

原因是ScrollView的父约束。

  • 如果ScrollView的父级给出了 Tight或Loose约束,则ScrollView的scrollDirection大小与其父级大小相同。 [shrinkWrap:false]。
  • 如果ScrollView的父级给出 Unbound约束,则ScrollView的scrollDirection大小必须与其“内容”大小相同。 [shrinkWrap:true]。 否则,它将给出一个不受限制的高度运行时异常

答案 2 :(得分:0)

如果您设置shrinkWrap属性,则您的ListView将与其父属性一样大。

如果将其设置为true,则列表将包装其内容,并使其大小达到子级允许的大小。

答案 3 :(得分:0)

顺便说一句,您可以将此属性添加到其他小部件(例如RisedButton)中,以将点击目标尺寸缩小到Material规范提供的最小值。

materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,