强制ListView缩小以包含子项

时间:2018-07-25 23:34:13

标签: dart flutter

我能找到的最相似的问题是'how to create a row of scrollable text boxes or widgets in flutter inside a ListView?',但是他们的解决方案只是为ListView的容器分配高度:

import 'package:flutter/material.dart';

// Define a 'main' function to run when our app starts
void main() {
  var app = new MaterialApp(
    home: new SafeArea(
      left: false,
      top: true,
      right: false,
      bottom: false,
      child: new Scaffold(
        body: new Container(
          color: Colors.green,
          height: 50.0,
          child: new ListView(
            scrollDirection: Axis.horizontal,
            children: <Widget>[
              new Icon(Icons.check_circle, size: 50.0),
              new Icon(Icons.add, size: 50.0),
              new Icon(Icons.add, size: 50.0),
              new Icon(Icons.add, size: 50.0),
              new Icon(Icons.add, size: 50.0),
              new Icon(Icons.add, size: 50.0),
              new Icon(Icons.add, size: 50.0),
              new Icon(Icons.add, size: 50.0),
              new Icon(Icons.add, size: 50.0),
              new Icon(Icons.add, size: 50.0),
              new Icon(Icons.add, size: 50.0),
              new Icon(Icons.add, size: 50.0),
              new Icon(Icons.close, size: 50.0),
            ],
          ),
        ),
        appBar: AppBar(
          title: new Text("Hello")
        ),
      ),
    ),
  );

  runApp(app);
}

根据Julien Louage,除非添加子项,否则容器将扩展以填充其父项,在这种情况下,它将收缩以适应子项的尺寸。如果要删除Container的height属性,它将返回到填充其父级,就像它没有子级一样。

合理的结论是ListView引起了问题; ListView希望尽可能地大,并且没有明显的方法来更改它。

Row之类的其他小部件具有缩小方法以包含子代的方法,但ListView没有吗?要查看此示例以及Container的大小约定,请删除一些Icon以避免像素溢出,并进行以下更改:

//height: 50.0,
child: new Row(
  crossAxisAlignment: CrossAxisAlignment.center,
//child: new ListView(
//  scrollDirection: Axis.horizontal,

那么如何在不设置Container高度的情况下使ListView缩小以包含子项(例如Row可以使用CrossAxisAlignment.center)?应该有办法!

0 个答案:

没有答案