Beautiful UI design in flutter

In project home page import velocity and put the previous lecture list with the following properties
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'dart:convert';
import 'package:flutter_catalog/models/catalog.dart';
import 'package:flutter_catalog/widgets/drawer.dart';
import 'package:flutter_catalog/widgets/item_widget.dart';
import 'package:flutter_catalog/widgets/themes.dart';
import 'package:velocity_x/velocity_x.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final int days = 30;
final String name = "Codepur";
@override
void initState() {
super.initState();
loadData();
}
loadData() async {
await Future.delayed(Duration(seconds: 2));
final catalogJson =
await rootBundle.loadString("assets/files/catalog.json");
final decodedData = jsonDecode(catalogJson);
var productsData = decodedData["products"];
CatalogModel.items = List.from(productsData)
.map<Item>((item) => Item.fromMap(item))
.toList();
setState(() {});
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: MyTheme.creamColor,
body: SafeArea(
child: Container(
padding: Vx.m32,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
CatalogHeader(),
if (CatalogModel.items != null && CatalogModel.items.isNotEmpty)
CatalogList().expand()
else
Center(
child: CircularProgressIndicator(),
)
],
),
),
));
}
}
class CatalogHeader extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
"Catalog App".text.xl5.bold.color(MyTheme.darkBluishColor).make(),
"Trending products".text.xl2.make(),
],
);
}
}
class CatalogList extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListView.builder(
shrinkWrap: true,
itemCount: CatalogModel.items.length,
itemBuilder: (context, index) {
final catalog = CatalogModel.items[index];
return CatalogItem(catalog: catalog);
},
);
}
}
class CatalogItem extends StatelessWidget {
final Item catalog;
const CatalogItem({Key key, @required this.catalog})
: assert(catalog != null),
super(key: key);
@override
Widget build(BuildContext context) {
return VxBox(
child: Row(
children: [
CatalogImage(
image: catalog.image,
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
catalog.name.text.lg.color(MyTheme.darkBluishColor).bold.make(),
catalog.desc.text.textStyle(context.captionStyle).make(),
10.heightBox,
ButtonBar(
alignment: MainAxisAlignment.spaceBetween,
buttonPadding: EdgeInsets.zero,
children: [
"\$${catalog.price}".text.bold.xl.make(),
ElevatedButton(
onPressed: () {},
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(
MyTheme.darkBluishColor,
),
shape: MaterialStateProperty.all(
StadiumBorder(),
)),
child: "Buy".text.make(),
)
],
).pOnly(right: 8.0)
],
))
],
),
).white.rounded.square(150).make().py16();
}
}
class CatalogImage extends StatelessWidget {
final String image;
const CatalogImage({Key key, @required this.image}) : super(key: key);
@override
Widget build(BuildContext context) {
return Image.network(
image,
).box.rounded.p8.color(MyTheme.creamColor).make().p16().w40(context);
}
}
In your themes.dart file write the following theme
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
class MyTheme {
static ThemeData lightTheme(BuildContext context) => ThemeData(
primarySwatch: Colors.deepPurple,
fontFamily: GoogleFonts.poppins().fontFamily,
appBarTheme: AppBarTheme(
color: Colors.white,
elevation: 0.0,
iconTheme: IconThemeData(color: Colors.black),
textTheme: Theme.of(context).textTheme,
));
static ThemeData darkTheme(BuildContext context) => ThemeData(
brightness: Brightness.dark,
);
//Colors
static Color creamColor = Color(0xfff5f5f5);
static Color darkBluishColor = Color(0xff403b58);
}