Skip to main content

Command Palette

Search for a command to run...

Flutter App Tutorial

Updated
4 min read

flutter create appname Explain folder structure Create assets/images folder Add images Add

flutter...
  assets:
   - assets/images/

in pubspec.yaml

Clear all main.dart

import 'package:flutter/material.dart';
void main() => runApp(MyApp());

create MyApp Class

class MyApp extends StatelessWidget {

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: homescreen(),
    );
  }
}

Create home.dart for homescreen() class

import 'package:flutter/material.dart';

Import home.dart in main.dart

import 'home.dart';

Work on home.dart now, Create homescreen class appbar then body : body has image , textinput, and a button. For textinput a new dart file Then implement drawer

import 'explore.dart';
import 'secondscreen.dart';
import 'package:flutter/material.dart';
import 'textInput.dart';

class homescreen extends StatelessWidget{
  @override 
  Widget build(BuildContext context){
    double h= MediaQuery.of(context).size.height ;
    return Scaffold(
      appBar: AppBar(title: Text('Tourism App'),
      ),
      drawer: Drawer(
        child: ListView(
          children: <Widget>[
            DrawerHeader(
              child: Text("Tourism App"),
              decoration: BoxDecoration(
                color: Colors.transparent,
                image: DecorationImage(
                  image: AssetImage("assets/drawerheader.jpg"),
                     fit: BoxFit.cover)
              ),
            ),
            ListTile(
              title: Text("Home"),
              trailing: Icon(Icons.arrow_forward),
              onTap: () {
                Navigator.of(context).pop();
                Navigator.of(context).push(MaterialPageRoute(
                    builder: (BuildContext context) => homescreen()));
              },
            ),
            ListTile(
              title: Text("Explore"),
              trailing: Icon(Icons.arrow_forward),
              onTap: () {
                Navigator.of(context).pop();
                Navigator.of(context).push(MaterialPageRoute(
                    builder: (BuildContext context) => Explore()));
              },
            ),
          ],
        ),
      ),
      body: Container(
        height: MediaQuery.of(context).size.height,
        child: Column(
            //mainAxisAlignment: MainAxisAlignment.start,
            //crossAxisAlignment: CrossAxisAlignment.stretch,
            children: [
              Image.asset('assets/images/homeimg.jpg', alignment: Alignment.center),
              textInput(),
              ElevatedButton(
                child: Text("Explore"),
                onPressed:(){
                  Navigator.push(context, MaterialPageRoute(builder: (context) => SecondScreen(),)
                  );
                } ,),
              ]
            ),
      ),
    ); 
  }
}

in textinput.dart

import 'package:flutter/material.dart';

class textInput extends StatefulWidget{
  @override 
  input createState() => new input();
}

class input extends State<textInput> {

  String result="";

  @override 
  Widget build(BuildContext context){
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
      const Padding(
          padding: EdgeInsets.symmetric(horizontal: 8, vertical: 16),
          child: TextField(
            decoration: InputDecoration(
              border: OutlineInputBorder(),
              hintText: "Place"
            ),
          ),
      ),
      ],
    );
  }
}

If time permits then button navigation: create secondscreen for navigation:

import 'package:flutter/material.dart';

class SecondScreen extends StatelessWidget{
  @override 
  Widget build(BuildContext context){
    return MaterialApp(
      title:"Tourism App" ,
      home: Scaffold(
      appBar: AppBar(title: Text("Yet to come"),),
      body: Center(
        child: ElevatedButton(
          child: Text("Home"),
          onPressed: (){
            Navigator.pop(context);
          } ),
      )
      ),);
  }
}

Explore section (Incomplete)

import 'package:flutter/material.dart';

class Explore extends StatelessWidget{

  List<String> images= ['https://4.bp.blogspot.com/-j1rGJ7HQn1M/UtfKuF3yPRI/AAAAAAAAEVU/N2lUwaTodtw/s1600/alappuzha-in-kerala.jpg',
  'https://assets.traveltriangle.com/blog/wp-content/uploads/2016/11/Suntemple-Konark.jpg',
  'https://spiderimg.amarujala.com/assets/images/2021/02/11/beautiful-tourist-places-in-the-world_1613035930.jpeg',
  'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRLyXWTSZuogUeSZ8K2MUCDPG8WwByGrIHBAg&usqp=CAU',
  'https://4.bp.blogspot.com/-j1rGJ7HQn1M/UtfKuF3yPRI/AAAAAAAAEVU/N2lUwaTodtw/s1600/alappuzha-in-kerala.jpg',
  'https://assets.traveltriangle.com/blog/wp-content/uploads/2016/11/Suntemple-Konark.jpg',
  'https://spiderimg.amarujala.com/assets/images/2021/02/11/beautiful-tourist-places-in-the-world_1613035930.jpeg',
  'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRLyXWTSZuogUeSZ8K2MUCDPG8WwByGrIHBAg&usqp=CAU',
  'https://4.bp.blogspot.com/-j1rGJ7HQn1M/UtfKuF3yPRI/AAAAAAAAEVU/N2lUwaTodtw/s1600/alappuzha-in-kerala.jpg',
  'https://assets.traveltriangle.com/blog/wp-content/uploads/2016/11/Suntemple-Konark.jpg',
  'https://spiderimg.amarujala.com/assets/images/2021/02/11/beautiful-tourist-places-in-the-world_1613035930.jpeg',
  'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRLyXWTSZuogUeSZ8K2MUCDPG8WwByGrIHBAg&usqp=CAU'
  ];
  @override 
  Widget build(BuildContext context){
    return MaterialApp(
      title:"Tourism App" ,
      home: Scaffold(
      appBar: AppBar(title: Text("Explore"),),
      body: GridView.count(
          // Create a grid with 2 columns. If you change the scrollDirection to
          // horizontal, this produces 2 rows.
          crossAxisCount: 2,
          // Generate 100 widgets that display their index in the List.
          children: List.generate(12, (index) {
            return Center(
              child: Padding(
              padding: const EdgeInsets.all(8.0),

              // Image.network(src)             
              child: Image.network(images[index],fit: BoxFit.cover,),

            ),
            );
          }),
        ),
      ),
      );
  }
}

For Day 2: Corrections in image name textInput correction

return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
      const Padding(
          padding: EdgeInsets.symmetric(horizontal: 8, vertical: 16),
          child: TextField(
            decoration: InputDecoration(
              border: OutlineInputBorder(),
              hintText: "Place"
            ),
          ),
      ),
      ],
    );

Add button in home.dart

ElevatedButton(
                child: Text("Explore"),
                onPressed:(){
                  Navigator.push(context, MaterialPageRoute(builder: (context) => SecondScreen(),)
                  );
                } ,),

Create secondscreen.dart

import 'package:flutter/material.dart';

class SecondScreen extends StatelessWidget{
  @override 
  Widget build(BuildContext context){
    return MaterialApp(
      title:"Tourism App" ,
      home: Scaffold(
      appBar: AppBar(title: Text("Yet to come"),),
      body: Center(
        child: ElevatedButton(
          child: Text("Home"),
          onPressed: (){
            Navigator.pop(context);
          } ),
      )
      ),);
  }
}

From drawer header, add navigation, first to home item:

ListTile(
              title: Text("Home"),
              trailing: Icon(Icons.arrow_forward),
              onTap: () {
                Navigator.of(context).pop();
                Navigator.of(context).push(MaterialPageRoute(
                    builder: (BuildContext context) => homescreen()));
              },
            ),

Create a new page for explore section. explore.dart:

import 'package:flutter/material.dart';

class Explore extends StatelessWidget{
 @override 
  Widget build(BuildContext context){
    return MaterialApp(
      title:"Tourism App" ,
      home: Scaffold(
      appBar: AppBar(title: Text("Explore"),),
      );
  }
}

Route the explore page from navigation drawer:

ListTile(
              title: Text("Explore"),
              trailing: Icon(Icons.arrow_forward),
              onTap: () {
                Navigator.of(context).pop();
                Navigator.of(context).push(MaterialPageRoute(
                    builder: (BuildContext context) => Explore()));
              },
            ),

Complete the Explore section:

import 'package:flutter/material.dart';

class Explore extends StatelessWidget{

  List<String> images= ['https://4.bp.blogspot.com/-j1rGJ7HQn1M/UtfKuF3yPRI/AAAAAAAAEVU/N2lUwaTodtw/s1600/alappuzha-in-kerala.jpg',
  'https://assets.traveltriangle.com/blog/wp-content/uploads/2016/11/Suntemple-Konark.jpg',
  'https://spiderimg.amarujala.com/assets/images/2021/02/11/beautiful-tourist-places-in-the-world_1613035930.jpeg',
  'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRLyXWTSZuogUeSZ8K2MUCDPG8WwByGrIHBAg&usqp=CAU',
  'https://4.bp.blogspot.com/-j1rGJ7HQn1M/UtfKuF3yPRI/AAAAAAAAEVU/N2lUwaTodtw/s1600/alappuzha-in-kerala.jpg',
  'https://assets.traveltriangle.com/blog/wp-content/uploads/2016/11/Suntemple-Konark.jpg',
  'https://spiderimg.amarujala.com/assets/images/2021/02/11/beautiful-tourist-places-in-the-world_1613035930.jpeg',
  'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRLyXWTSZuogUeSZ8K2MUCDPG8WwByGrIHBAg&usqp=CAU',
  'https://4.bp.blogspot.com/-j1rGJ7HQn1M/UtfKuF3yPRI/AAAAAAAAEVU/N2lUwaTodtw/s1600/alappuzha-in-kerala.jpg',
  'https://assets.traveltriangle.com/blog/wp-content/uploads/2016/11/Suntemple-Konark.jpg',
  'https://spiderimg.amarujala.com/assets/images/2021/02/11/beautiful-tourist-places-in-the-world_1613035930.jpeg',
  'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRLyXWTSZuogUeSZ8K2MUCDPG8WwByGrIHBAg&usqp=CAU'
  ];
  @override 
  Widget build(BuildContext context){
    return MaterialApp(
      title:"Tourism App" ,
      home: Scaffold(
      appBar: AppBar(title: Text("Explore"),),
      body: GridView.count(
          // Create a grid with 2 columns. If you change the scrollDirection to
          // horizontal, this produces 2 rows.
          crossAxisCount: 2,
          // Generate 100 widgets that display their index in the List.
          children: List.generate(12, (index) {
            return Center(
              child: Padding(
              padding: const EdgeInsets.all(8.0),

              // Image.network(src)             
              child: Image.network(images[index],fit: BoxFit.cover,),

            ),
            );
          }),
        ),
      ),
      );
  }
}