Flutter: Create Timeline Event Home Page UI

Flutter UI home event timelineview timeline

In this blog, We will design a simple event home page ui with timeline view and search bar.

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:flutter/material.dart';
import 'package:timelineview/pages/home.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 Home stateful widget create home.dart file in home folder, then inside of it with the following code:


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(
      backgroundColor: Colors.grey[100],
        appBar: AppBar(
          backgroundColor: Colors.pinkAccent,
          elevation: 0,
          leading: Icon(Icons.menu, color: Colors.white),
          actions: [
            Padding(
              padding: EdgeInsets.all(10.0),
              child: Container(
                width: 35,
                height: 35,
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(10),
                  image: DecorationImage(image: AssetImage('assets/t.jpg'), fit: BoxFit.cover)
                ),
                child: Transform.translate(
                  offset: Offset(10, -10),
                  child: Container(
                    margin: EdgeInsets.all(10),
                    decoration: BoxDecoration(
                      border: Border.all(width: 3, color: Colors.white),
                      shape: BoxShape.circle,
                      color: Colors.yellow[800]
                    ),
                  ),
                ),
              ),
            )
          ],
        ),
        body: SafeArea(
        
          child: Padding(padding: EdgeInsets.only(left: 20.0, right: 20.0),
              child: SingleChildScrollView(
               child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: <Widget>[
                  Padding(padding: EdgeInsets.all(15.0),
                  child: Container(
                    // padding: EdgeInsets.symmetric(vertical: 5),
                    decoration: BoxDecoration(
                      borderRadius: BorderRadius.circular(50),
                      color: Colors.white
                    ),
                    child: TextField(
                        decoration: InputDecoration(
                          border: InputBorder.none,
                          prefixIcon: Icon(Icons.search, color:Colors.grey),
                          hintText: "Search Event",
                          hintStyle: TextStyle(color: Colors.grey)
                        ),
                    ),
                  ),
                  ),
                  SizedBox(height: 30),
                  makeItem(image:'assets/t.jpg', date:18),
                  SizedBox(height: 30),
                  makeItem(image:'assets/t.jpg', date:19),
                  SizedBox(height: 30),
                  makeItem(image:'assets/t.jpg', date:20),
                  SizedBox(height: 30),
                  makeItem(image:'assets/t.jpg', date:21),
                  SizedBox(height: 30),
                  makeItem(image:'assets/t.jpg', date:22),
              ],
            ),
          ),
          
          ),
        ),
    );
  }


  Widget makeItem({image, date}){
    return Row(
      children: [
        Container(
          width: 50,
          height: 200,
          margin: EdgeInsets.only(right: 20),
          child: Padding(
            padding: EdgeInsets.only(top: 10),
            child: Column(
              children: [
                Text(date.toString(), style: TextStyle(color: Colors.pinkAccent, fontSize: 25, fontWeight: FontWeight.bold)),
                Text('JAN', style: TextStyle(color: Colors.black, fontSize: 18, fontWeight: FontWeight.bold))
              ],
            ),
          ),
        ),
        Expanded(
          child: Container(
            height: 200,
            decoration: BoxDecoration(
              borderRadius: BorderRadius.circular(20),
              image: DecorationImage(
                image: AssetImage(image),
                fit: BoxFit.cover
              )
            ),
            child: Container(
              padding: EdgeInsets.all(20),
              decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(20),
                gradient: LinearGradient(
                  colors: [Colors.black.withOpacity(0.4), Colors.black.withOpacity(0.1 )]
                )
              ),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                mainAxisAlignment: MainAxisAlignment.end,
                children: [
                  Text("DevhubSpot Event", style: TextStyle(color: Colors.white, fontSize: 25, fontWeight: FontWeight.bold)),
                  SizedBox(height: 10),
                  Row(
                    children: [
                      Icon(Icons.access_time, color: Colors.white),
                      SizedBox(width: 10,),
                      Text("7:00 PM", style: TextStyle(color: Colors.white))
                    ],
                  )
                ],
              ),
            ),
          ),
        )
      ],
    ); 
  }
}

Output:


Flutter UI home event timelineview timeline
Comments

AdBlock Detected!

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