Flutter GridView Tutorial and Example.
We will see how to render items in a GridView in this tutorial and how to handle item click events.
A GridView is a scrollable, 2D array of widgets.
The main axis direction of a grid is the direction in which it scrolls (the scrollDirection).
The most commonly used grid layouts are GridView.count, which creates a layout with a fixed number of tiles in the cross axis, andGridView.extent
, which creates a layout with tiles that have a maximum cross-axis extent. A custom SliverGridDelegate
can produce an arbitrary 2D arrangement of children, including arrangements that are unaligned or overlapping.
To create a grid with a large (or infinite) number of children, use the GridView.builder
constructor with either a SliverGridDelegateWithFixedCrossAxisCount
or a SliverGridDelegateWithMaxCrossAxisExtent
for the gridDelegate.
To use a custom SliverChildDelegate
, use GridView.custom
.
To create a linear array of children, use a ListView.
To control the initial scroll offset of the scroll view, provide a controller with its ScrollController.initialScrollOffset property set.
new GridView.count(
primary: false,
padding: const EdgeInsets.all(20.0),
crossAxisSpacing: 10.0,
crossAxisCount: 2,
children: <Widget>[
const Text('He'd have you all unravel at the'),
const Text('Heed not the rabble'),
const Text('Sound of screams but the'),
const Text('Who scream'),
const Text('Revolution is coming...'),
const Text('Revolution, they...'),
],
)
Video tutorial(ProgrammingWizards TV Channel)
Well we have a video tutorial as an alternative to this. If you prefer tutorials like this one then it would be good you subscribe to our YouTube channel.
Basically we have a TV for programming where do daily tutorials especially android.
Let's look a flutter GridView example with onClick.
Flutter Simple GridView with OnClick Example
This is a simple flutter gridview example to display items from a flutter fixed-length list, otherwise known as an array in other languages. Obviously we write our app in Dart programming language.
If the user clicks a single cardview, a CupertinoAlertDialog
will be rendered with the clicked item.
The dialog will have some text and icon.
Here are the files we explore:
- pubspec.yaml
- lib/main.dart
(a). pubspec.yaml
name: mr_simple_gridview
description: A new Flutter project.
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.2
dev_dependencies:
flutter_test:
sdk: flutter
# The following section is specific to Flutter.
flutter:
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
(b). main.dart
This is where we write our flutter code in dart programming language. In Dart it is very common to write several classes in a single file. So this simple file will have three classes.
Importing Packages in Flutter/Dart
But first we need to import some packages and we do that using the import
keyword in dart.
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
Here are the packages we are importing:
- material.dart : will give us material design widgets and theme.
- cupertino.dart : Will give us
CupertinoAlertDialog
as well as cupertino icons.
Creating classes in Flutter/Dart
In Dart like in most C style programming languages you create a class using the class
keyword. Classes are encapsulation mechanism in Object Oriented Programming languages.
In this case we create three classes:
1.class MyApp extends StatelessWidget {..}
class Home extends StatefulWidget {..}
class _HomeState extends State<Home> {..}
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter GridView',
home: new Home(),
theme: new ThemeData(primaryColor: Colors.deepOrange),
);
}
}
class Home extends StatefulWidget {
@override
_HomeState createState() => new _HomeState();
}
class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
var spacecrafts = ["James Web","Enterprise","Hubble","Kepler","Juno","Casini","Columbia","Challenger","Huygens","Galileo","Apollo","Spitzer","WMAP","Swift","Atlantis"];
var myGridView = new GridView.builder(
itemCount: spacecrafts.length,
gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3),
itemBuilder: (BuildContext context, int index) {
return new GestureDetector(
child: new Card(
elevation: 5.0,
child: new Container(
alignment: Alignment.centerLeft,
margin: new EdgeInsets.only(top: 10.0, bottom: 10.0,left: 10.0),
child: new Text(spacecrafts[index]),
),
),
onTap: () {
showDialog(
barrierDismissible: false,
context: context,
child: new CupertinoAlertDialog(
title: new Column(
children: <Widget>[
new Text("GridView"),
new Icon(
Icons.favorite,
color: Colors.red,
),
],
),
content: new Text( spacecrafts[index]),
actions: <Widget>[
new FlatButton(
onPressed: () {
Navigator.of(context).pop();
},
child: new Text("OK"))
],
));
},
);
},
);
return new Scaffold(
appBar: new AppBar(
title: new Text("Flutter GridView")
),
body: myGridView,
);
}
}
void main() {
runApp(new MyApp());
}
Download
You can download full source code below.
No. | Location | Link |
---|---|---|
1. | GitHub | Direct Download |
2. | GitHub | Browse |
Best Regards,