如何在Flutter中的GridView中为窗口小部件设置自定义高度?

即使在指定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(),

),

),

);

}

}

以上是 如何在Flutter中的GridView中为窗口小部件设置自定义高度? 的全部内容, 来源链接: utcz.com/qa/431751.html

回到顶部