Flutter: Create an E-Commerce Home Page UI

Flutter UI page home

In this blog, We will design a simple E-Commerce home page ui.

Start by creating a new Flutter project in either of VS Code or Android Studio. Replace the Flutter default counter application in main.dart with your own stateful widget.

You should have something like this:

import 'package:ecommerceui/pages/home.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Home(),
    );
  }
}

Before Create Widgets stateless widget create homeappbar.dart, categorieswidgets.dart, itemwidgets.dart file in widgets folder, then inside of it with the following code:

homeappbar.dart widget code:

import 'package:badges/badges.dart';
import 'package:flutter/material.dart';

class HomeAppBar extends StatelessWidget {
  const HomeAppBar({super.key});

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.white,
      padding: EdgeInsets.all(25),
      child: Row(
        children: [
            Icon(
              Icons.sort,
              size: 30,
              color: Colors.blueAccent,
            ),
            Padding(padding: EdgeInsets.only(left: 20), 
            child:Text("DevHub Shop", style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold, color: Colors.blueAccent)) ,),
            Spacer(),
            Badge(
              badgeColor: Colors.red,
              padding: EdgeInsets.all(10),
              child: InkWell(
                onTap: (){},
                child: Icon(Icons.shopping_bag_outlined, size: 35, color: Colors.blueAccent),
              ),
            )
        ],
      ),
    );
  }
}

categorieswidget.dart widget code:


import 'package:flutter/material.dart';

class CategoriesWidget extends StatelessWidget {
  const CategoriesWidget({super.key});

  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      scrollDirection: Axis.horizontal,
      child: Row(children: [
        for(int i =1; i < 8; i++)
          Container(
            margin: EdgeInsets.symmetric(horizontal: 10),
            padding: EdgeInsets.symmetric(vertical: 5, horizontal: 10),
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.circular(20)
            ),
            child: Row(
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
                Image.asset("assets/images/shoe.jpg", width: 59, height: 50),
                Padding(
                  padding: EdgeInsets.only(left: 5),
                  child: Text("Shoes", style: TextStyle(fontSize: 18, fontWeight: FontWeight.w600, color: Colors.blueAccent),
                )
                )
              ],
            ),
          )

      ]),
    );
  }
}

itemwidget.dart widget code:

import 'package:flutter/material.dart';

class ItemsWidget extends StatelessWidget {
  const ItemsWidget({super.key});

  @override
  Widget build(BuildContext context) {
    return GridView.count(
      childAspectRatio: 0.68,
      physics: NeverScrollableScrollPhysics(),
      crossAxisCount: 2,
      shrinkWrap: true,
      children: [
        for( int i=1; i < 11; i++)
        Container(
          padding: EdgeInsets.only(left: 15, right: 15, top: 10),
          margin: EdgeInsets.symmetric(vertical: 10, horizontal: 10),
          decoration: BoxDecoration(
            color: Colors.white,
            borderRadius: BorderRadius.circular(20)
          ),
          child: Column(
            children: [
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  Container(
                    padding:EdgeInsets.all(5),
                    decoration: BoxDecoration(
                      color: Colors.blueAccent,
                      borderRadius: BorderRadius.circular(20)
                    ),
                    child: Text("-40%", style: TextStyle(fontSize: 14, color: Colors.white, fontWeight: FontWeight.bold),),
                  ),
                  Icon(
                    Icons.favorite_border,
                    color: Colors.red, 
                  )
                ],
              ),

              InkWell(
                onTap: (){},
                child: Container(
                  margin: EdgeInsets.all(10),
                  child: Image.asset("assets/images/shoe.jpg", height: 130, width: 130),
                ),
              ),
              Container(
                padding: EdgeInsets.only(bottom: 8),
                alignment: Alignment.centerLeft,
                child: Text("Product Title", style: TextStyle(fontSize: 18, color: Colors.blueAccent, fontWeight: FontWeight.bold),),
              ),

              Container(
                alignment: Alignment.centerLeft,
                child: Text("show here discription of the product", style: TextStyle(fontSize: 15, color: Colors.grey[400]),),
              ),

              Padding(
                padding: EdgeInsets.symmetric(vertical: 10),
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    Text("\$50", style: TextStyle(fontSize: 16, color: Colors.blueAccent, fontWeight: FontWeight.w600)),
                    Icon(Icons.shopping_cart_checkout, color: Colors.blueAccent)
                  ],
                ),
              )
            ],
          ),
        )
      ],
    );
  }
}

After Create Home stateful widget create home.dart file in home folder, then inside of it with the following code:

import 'package:ecommerceui/widget/categorieswidget.dart';
import 'package:ecommerceui/widget/homeappbar.dart';
import 'package:ecommerceui/widget/itemwidget.dart';
import 'package:flutter/material.dart';

class Home extends StatefulWidget {
  const Home({super.key});

  @override
  State<Home> createState() => _HomeState();
}

class _HomeState extends State<Home> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
          child:ListView(
            children: [
              HomeAppBar(),
              Container(
                // height: 500,
                padding: EdgeInsets.only(top: 15),
                decoration: BoxDecoration(
                  color: Colors.grey[200],
                  borderRadius: BorderRadius.only(
                    topLeft: Radius.circular(30),
                    topRight: Radius.circular(30)
                  )
                ),
                child: Column(
                  children: [
                    Container(
                      margin: EdgeInsets.symmetric(horizontal: 15),
                      padding: EdgeInsets.symmetric(horizontal: 15),
                      decoration: BoxDecoration(
                        color: Colors.white,
                        borderRadius: BorderRadius.circular(30)
                      ),
                      child: Row(
                        children: [
                          Container(
                            margin: EdgeInsets.only(left: 5),
                            height: 50,
                            width: 300,
                            child: TextFormField(
                              decoration: InputDecoration(
                                border: InputBorder.none,
                                hintText: "Search..."
                              ),
                            ),
                          ),
                          Spacer(),
                          Icon(Icons.camera_alt, size: 25, color: Colors.blueAccent)
                        ],
                      ),
                    ),
                    Container(
                      alignment: Alignment.centerLeft,
                      margin: EdgeInsets.symmetric(vertical: 20, horizontal: 10),
                      child: Text("Categories", style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold, color: Colors.blueAccent)),
                    ),

                    CategoriesWidget(),


                    Container(
                      alignment: Alignment.centerLeft,
                      margin: EdgeInsets.symmetric(horizontal: 10, vertical: 10),
                      child: Text("Best Selling", style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold, color: Colors.blueAccent)),
                    ),

                    ItemsWidget()

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

Output:


Flutter UI page home
Comments

AdBlock Detected!

Our website is made possible by displaying ads to our visitors. Please supporting us by whitelisting our website.