Even after specifying the height for Container GridView, my code is producing square widgets.
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(),
),
),
);
}
}
The output of the code above is as shown on the left. How can I get a GridView with custom height widget as shown on the right?
Few days ago I came here to find a way to dynamically change height when images are loaded from internet and using
childAspectRatio
cannot do that because its apply to all widget in GridView(same height for each).This answer may help someone who want different height according to each and every widget content:
I found a package called Flutter Staggered GridView by Romain Rastel. Using this package we can do so many things check examples here.
To get what we want we can use
StaggeredGridView.count()
and its propertystaggeredTiles:
and for its value you can map all widget and applyStaggeredTile.fit(2)
.Example code:
You can find complete example(copy,paste and run) here.
The key is the childAspectRatio. This value is use to determine the layout in GridView. In order to get the desired aspect you have to set it to the (itemWidth / itemHeight). The solution would be this: