gridview - 如何在 Flutter 的 GridView 中为 Widget 设置自定义高

即使在为 Container GridView 指定高度之后,我的代码仍会生成方形小部件。

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<String> widgetList = ['A', 'B', 'C'];

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: new Container(
        child: new GridView.count(
          crossAxisCount: 2,
          controller: new ScrollController(keepScrollOffset: false),
          shrinkWrap: true,
          scrollDirection: Axis.vertical,
          children: widgetList.map((String value) {
            return new Container(
              height: 250.0,
              color: Colors.green,
              margin: new EdgeInsets.all(1.0),
              child: new Center(
                child: new Text(
                  value,
                  style: new TextStyle(fontSize: 50.0,color: Colors.white),
                ),
              ),
            );
          }).toList(),
        ),
      ),
    );
  }
}

上面代码的输出如左图所示。如何获得带有自定义高度小部件的 GridView,如右图所示?

最佳答案

关键是childAspectRatio。此值用于确定 GridView 中的布局。为了获得所需的方面,您必须将其设置为 (itemWidth/itemHeight)。解决方案是这样的:

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<String> widgetList = ['A', 'B', 'C'];

  @override
  Widget build(BuildContext context) {
    var size = MediaQuery.of(context).size;

    /*24 is for notification bar on Android*/
    final double itemHeight = (size.height - kToolbarHeight - 24) / 2;
    final double itemWidth = size.width / 2;

    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: new Container(
        child: new GridView.count(
          crossAxisCount: 2,
          childAspectRatio: (itemWidth / itemHeight),
          controller: new ScrollController(keepScrollOffset: false),
          shrinkWrap: true,
          scrollDirection: Axis.vertical,
          children: widgetList.map((String value) {
            return new Container(
              color: Colors.green,
              margin: new EdgeInsets.all(1.0),
              child: new Center(
                child: new Text(
                  value,
                  style: new TextStyle(
                    fontSize: 50.0,
                    color: Colors.white,
                  ),
                ),
              ),
            );
          }).toList(),
        ),
      ),
    );
  }
}

关于gridview - 如何在 Flutter 的 GridView 中为 Widget 设置自定义高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48405123/

相关文章:

ios - 使用 Flutter 在 Windows 环境下开发 iOS 设备

android - 如何构建符合 Google Play 64 位要求的应用程序?

java - Flutter 应用程序体积太大

flutter - 未找到 Material 小部件

function - 如何在 Dart/Flutter 中使用另一个文件的函数?

dart - 如何使用 Flutter 在 iOS 和 Android 上共享图像?

flutter - 如何修复 HttpException : Connection closed b

dart - 如何在 Flutter 中更改键盘上的文本输入操作按钮(返回/回车键)?

json - 如何在 Flutter 中解码 JSON?

dart - 如何在 flutter 中使用 url 编码的主体发出 HTTP POST 请求?