Skip to content

Commit a6e4f44

Browse files
Add product page
1 parent a27a53f commit a6e4f44

17 files changed

+346
-67
lines changed

lib/common_widget/AppBarWidget.dart

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:flutter_ecommerce_app/components/AppSignIn.dart';
3+
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
4+
5+
Widget appBarWidget(context) {
6+
return AppBar(
7+
elevation: 0.0,
8+
centerTitle: true,
9+
title: Image.asset(
10+
"assets/images/ic_app_icon.png",
11+
width: 80,
12+
height: 40,
13+
),
14+
actions: <Widget>[
15+
IconButton(
16+
onPressed: () {
17+
Navigator.push(
18+
context,
19+
MaterialPageRoute(builder: (context) => AppSignIn()),
20+
);
21+
},
22+
icon: Icon(FontAwesomeIcons.user),
23+
color: Color(0xFF323232),
24+
),
25+
],
26+
);
27+
}

lib/common_widget/DrawerWidget.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_ecommerce_app/main.dart';
33
import 'package:flutter_ecommerce_app/screens/WishListScreen.dart';
4-
import 'package:flutter_ecommerce_app/sign_in_up/SignIn.dart';
4+
import 'package:flutter_ecommerce_app/components/AppSignIn.dart';
55
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
66

77
class DrawerWidget extends StatefulWidget {

lib/common_widget/GridTilesCategory.dart

+23-6
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,44 @@
11
import 'dart:developer';
22
import 'package:flutter/material.dart';
3-
import 'package:flutter_ecommerce_app/category/SubCategoryPage.dart';
3+
import 'package:flutter_ecommerce_app/screens/ProductsScreen.dart';
4+
import 'package:flutter_ecommerce_app/screens/SubCategoryScreen.dart';
45

56
class GridTilesCategory extends StatelessWidget {
67
String name;
78
String imageUrl;
89
String slug;
10+
bool fromSubProducts = false;
911

1012
GridTilesCategory(
1113
{Key key,
1214
@required this.name,
1315
@required this.imageUrl,
14-
@required this.slug})
16+
@required this.slug,
17+
this.fromSubProducts})
1518
: super(key: key);
1619

1720
@override
1821
Widget build(BuildContext context) {
1922
return InkWell(
2023
onTap: () {
21-
Navigator.push(
22-
context,
23-
MaterialPageRoute(builder: (context) => SubCategoryPage(slug: slug,)),
24-
);
24+
if (fromSubProducts) {
25+
Navigator.push(
26+
context,
27+
MaterialPageRoute(
28+
builder: (context) => ProductsScreen(
29+
slug: "products/?page=1&limit=12&category=" + slug,
30+
name: name,
31+
)),
32+
);
33+
} else {
34+
Navigator.push(
35+
context,
36+
MaterialPageRoute(
37+
builder: (context) => SubCategoryScreen(
38+
slug: slug,
39+
)),
40+
);
41+
}
2542
},
2643
child: Card(
2744
color: Colors.white,
+93
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
import 'dart:developer';
2+
import 'package:flutter/material.dart';
3+
import 'package:flutter_ecommerce_app/screens/ProductsScreen.dart';
4+
import 'package:flutter_ecommerce_app/screens/SubCategoryScreen.dart';
5+
6+
class GridTilesProducts extends StatelessWidget {
7+
String name;
8+
String imageUrl;
9+
String slug;
10+
String price;
11+
bool fromSubProducts = false;
12+
13+
GridTilesProducts(
14+
{Key key,
15+
@required this.name,
16+
@required this.imageUrl,
17+
@required this.slug,
18+
@required this.price,
19+
this.fromSubProducts})
20+
: super(key: key);
21+
22+
@override
23+
Widget build(BuildContext context) {
24+
return InkWell(
25+
onTap: () {
26+
/* if (fromSubProducts) {
27+
Navigator.push(
28+
context,
29+
MaterialPageRoute(
30+
builder: (context) => ProductsScreen(
31+
slug: "products/?page=1&limit=12&category=" + slug,
32+
name: name,
33+
)),
34+
);
35+
} else {
36+
Navigator.push(
37+
context,
38+
MaterialPageRoute(
39+
builder: (context) => SubCategoryScreen(
40+
slug: slug,
41+
)),
42+
);
43+
}*/
44+
},
45+
child: Container(
46+
padding: EdgeInsets.only(top: 5),
47+
child: Card(
48+
color: Colors.white,
49+
shape: RoundedRectangleBorder(
50+
borderRadius: const BorderRadius.all(
51+
Radius.circular(8.0),
52+
),
53+
),
54+
elevation: 0,
55+
child: Center(
56+
child: Column(
57+
children: <Widget>[
58+
Image.network(
59+
imageUrl,
60+
width: 150,
61+
height: 150,
62+
),
63+
Container(
64+
alignment: Alignment.center,
65+
padding: EdgeInsets.only(left: 10, right: 10, top: 15),
66+
child: Text(
67+
(name.length <= 40 ? name : name.substring(0, 40)),
68+
textAlign: TextAlign.left,
69+
style: TextStyle(
70+
color: Color(0xFF444444),
71+
fontFamily: 'Roboto-Light.ttf',
72+
fontSize: 15,
73+
fontWeight: FontWeight.w400)),
74+
),
75+
Container(
76+
alignment: Alignment.bottomLeft,
77+
padding: EdgeInsets.only(left: 10, right: 10, top: 10),
78+
child: Text("৳ ${(price != null) ? price : 'Unavailable'}",
79+
style: TextStyle(
80+
color: (price != null)
81+
? Color(0xFFf67426)
82+
: Color(0xFF0dc2cd),
83+
fontFamily: 'Roboto-Light.ttf',
84+
fontSize: 20,
85+
fontWeight: FontWeight.w500)),
86+
)
87+
],
88+
),
89+
)),
90+
),
91+
);
92+
}
93+
}

lib/sign_in_up/SignIn.dart lib/components/AppSignIn.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter/rendering.dart';
3-
import 'package:flutter_ecommerce_app/sign_in_up/SignUp.dart';
3+
import 'package:flutter_ecommerce_app/components/AppSingUp.dart';
44

55
class AppSignIn extends StatefulWidget {
66
@override

lib/sign_in_up/SignUp.dart lib/components/AppSingUp.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'package:flutter/material.dart';
2-
import 'package:flutter_ecommerce_app/sign_in_up/SignIn.dart';
2+
import 'package:flutter_ecommerce_app/components/AppSignIn.dart';
33

44
class AppSingUp extends StatelessWidget {
55
@override

lib/brands/BrandHomePage.dart lib/components/BrandHomePage.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import 'package:flutter_ecommerce_app/common_widget/GridTilesCategory.dart';
66
import 'package:flutter_ecommerce_app/utils/Urls.dart';
77
import 'package:http/http.dart';
88

9-
import 'BrandModel.dart';
9+
import '../models/BrandModel.dart';
1010

1111
BrandModel brandModel;
1212

lib/category/CategorySlider.dart lib/components/CategorySlider.dart

+10-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'dart:convert';
22
import 'package:flutter/material.dart';
3-
import 'package:flutter_ecommerce_app/category/CategoryModel.dart';
3+
import 'package:flutter_ecommerce_app/models/CategoryModel.dart';
44
import 'package:flutter_ecommerce_app/common_widget/CircularProgress.dart';
55
import 'package:flutter_ecommerce_app/common_widget/GridTilesCategory.dart';
66
import 'package:flutter_ecommerce_app/utils/Urls.dart';
@@ -11,6 +11,7 @@ List<CategoryModel> categories;
1111
class CategoryPage extends StatefulWidget {
1212
String slug;
1313
bool isSubList;
14+
1415
CategoryPage({Key key, this.slug, this.isSubList = false}) : super(key: key);
1516

1617
@override
@@ -36,14 +37,15 @@ class _CategoryPageState extends State<CategoryPage> {
3637
if (snapshot.hasError)
3738
return Text('Error: ${snapshot.error}');
3839
else
39-
return createListView(context, snapshot);
40+
return createListView(context, snapshot, widget.isSubList);
4041
}
4142
},
4243
);
4344
}
4445
}
4546

46-
Widget createListView(BuildContext context, AsyncSnapshot snapshot) {
47+
Widget createListView(
48+
BuildContext context, AsyncSnapshot snapshot, bool isSubList) {
4749
List<CategoryModel> values = snapshot.data;
4850
return GridView.count(
4951
crossAxisCount: 3,
@@ -53,9 +55,11 @@ Widget createListView(BuildContext context, AsyncSnapshot snapshot) {
5355
children: List<Widget>.generate(values.length, (index) {
5456
return GridTile(
5557
child: GridTilesCategory(
56-
name: values[index].name,
57-
imageUrl: values[index].imageUrl,
58-
slug: values[index].slug));
58+
name: values[index].name,
59+
imageUrl: values[index].imageUrl,
60+
slug: values[index].slug,
61+
fromSubProducts: isSubList,
62+
));
5963
}),
6064
);
6165
}

lib/shop/ShopHomePage.dart lib/components/ShopHomePage.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import 'dart:developer';
44
import 'package:flutter/material.dart';
55
import 'package:flutter_ecommerce_app/common_widget/CircularProgress.dart';
66
import 'package:flutter_ecommerce_app/common_widget/GridTilesCategory.dart';
7-
import 'package:flutter_ecommerce_app/shop/ShopModel.dart';
7+
import 'package:flutter_ecommerce_app/models/ShopModel.dart';
88
import 'package:flutter_ecommerce_app/utils/Urls.dart';
99
import 'package:http/http.dart';
1010

lib/main.dart

+3-22
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import 'package:flutter/cupertino.dart';
22
import 'package:flutter/material.dart';
3+
import 'package:flutter_ecommerce_app/common_widget/AppBarWidget.dart';
34
import 'package:flutter_ecommerce_app/common_widget/BottomNavBarWidget.dart';
45
import 'package:flutter_ecommerce_app/common_widget/DrawerWidget.dart';
56
import 'package:flutter_ecommerce_app/screens/HomeScreen.dart';
67
import 'package:flutter_ecommerce_app/screens/ShoppingCartScreen.dart';
78
import 'package:flutter_ecommerce_app/screens/WishListScreen.dart';
8-
import 'package:flutter_ecommerce_app/sign_in_up/SignIn.dart';
9+
import 'package:flutter_ecommerce_app/components/AppSignIn.dart';
910
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
1011

1112
void main() => runApp(MyApp());
@@ -48,27 +49,7 @@ class _MyHomePageNewState extends State<MyHomePage> {
4849
return DefaultTabController(
4950
length: 3,
5051
child: Scaffold(
51-
appBar: AppBar(
52-
elevation: 0.0,
53-
centerTitle: true,
54-
title: Image.asset(
55-
"assets/images/ic_app_icon.png",
56-
width: 80,
57-
height: 40,
58-
),
59-
actions: <Widget>[
60-
IconButton(
61-
onPressed: () {
62-
Navigator.push(
63-
context,
64-
MaterialPageRoute(builder: (context) => AppSignIn()),
65-
);
66-
},
67-
icon: Icon(FontAwesomeIcons.user),
68-
color: Color(0xFF323232),
69-
),
70-
],
71-
),
52+
appBar: appBarWidget(context),
7253
drawer: DrawerWidget(),
7354
body: IndexedStack(
7455
index: currentIndex,
File renamed without changes.
File renamed without changes.

lib/models/ProductsModel.dart

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
class ProductsModels {
2+
int count;
3+
String next;
4+
Null previous;
5+
List<Results> results;
6+
7+
ProductsModels({this.count, this.next, this.previous, this.results});
8+
9+
ProductsModels.fromJson(Map<String, dynamic> json) {
10+
count = json['count'];
11+
next = json['next'];
12+
previous = json['previous'];
13+
if (json['results'] != null) {
14+
results = new List<Results>();
15+
json['results'].forEach((v) {
16+
results.add(new Results.fromJson(v));
17+
});
18+
}
19+
}
20+
21+
Map<String, dynamic> toJson() {
22+
final Map<String, dynamic> data = new Map<String, dynamic>();
23+
data['count'] = this.count;
24+
data['next'] = this.next;
25+
data['previous'] = this.previous;
26+
if (this.results != null) {
27+
data['results'] = this.results.map((v) => v.toJson()).toList();
28+
}
29+
return data;
30+
}
31+
}
32+
33+
class Results {
34+
String name;
35+
String slug;
36+
List<String> imageUrls;
37+
String priceType;
38+
String maxPrice;
39+
String minPrice;
40+
String minDiscountedPrice;
41+
42+
Results(
43+
{this.name,
44+
this.slug,
45+
this.imageUrls,
46+
this.priceType,
47+
this.maxPrice,
48+
this.minPrice,
49+
this.minDiscountedPrice});
50+
51+
Results.fromJson(Map<String, dynamic> json) {
52+
name = json['name'];
53+
slug = json['slug'];
54+
imageUrls = json['image_urls'].cast<String>();
55+
priceType = json['price_type'];
56+
maxPrice = json['max_price'];
57+
minPrice = json['min_price'];
58+
minDiscountedPrice = json['min_discounted_price'];
59+
}
60+
61+
Map<String, dynamic> toJson() {
62+
final Map<String, dynamic> data = new Map<String, dynamic>();
63+
data['name'] = this.name;
64+
data['slug'] = this.slug;
65+
data['image_urls'] = this.imageUrls;
66+
data['price_type'] = this.priceType;
67+
data['max_price'] = this.maxPrice;
68+
data['min_price'] = this.minPrice;
69+
data['min_discounted_price'] = this.minDiscountedPrice;
70+
return data;
71+
}
72+
}
File renamed without changes.

lib/screens/HomeScreen.dart

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import 'package:flutter/material.dart';
2-
import 'package:flutter_ecommerce_app/brands/BrandHomePage.dart';
3-
import 'package:flutter_ecommerce_app/category/CategorySlider.dart';
2+
import 'package:flutter_ecommerce_app/components/BrandHomePage.dart';
3+
import 'package:flutter_ecommerce_app/components/CategorySlider.dart';
44
import 'package:flutter_ecommerce_app/common_widget/PopularMenu.dart';
55
import 'package:flutter_ecommerce_app/common_widget/SearchWidget.dart';
66
import 'package:flutter_ecommerce_app/common_widget/TopPromoSlider.dart';
7-
import 'package:flutter_ecommerce_app/shop/ShopHomePage.dart';
7+
import 'package:flutter_ecommerce_app/components/ShopHomePage.dart';
88

99
class HomeScreen extends StatefulWidget {
1010
@override

0 commit comments

Comments
 (0)