Skip to content

Commit b03a572

Browse files
committed
order data to server
1 parent 4e7c9d3 commit b03a572

File tree

2 files changed

+62
-15
lines changed

2 files changed

+62
-15
lines changed

ShopApp/lib/providers/orders.dart

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
import 'dart:convert';
2+
13
import 'package:ShopApp/providers/cart.dart';
24
import 'package:flutter/widgets.dart';
5+
import 'package:http/http.dart' as http;
36

47
class OrderItem {
58
final String id;
@@ -22,12 +25,29 @@ class Order with ChangeNotifier {
2225
return [..._orders];
2326
}
2427

25-
void addOrder(List<CartItem> cartItem, double total) {
28+
Future<void> addOrder(List<CartItem> cartItem, double total) async {
29+
final url = 'https://fluttershopapp-f979d.firebaseio.com/orders/$id.json';
30+
final timeStamp = DateTime.now();
31+
final response = await http.post(url,
32+
body: json.encode({
33+
'amount': total,
34+
'dateTime': timeStamp.toIso8601String(),
35+
'products': cartItem
36+
.map((e) => {
37+
'id': e.id,
38+
'title': e.title,
39+
'quantity': e.quantity,
40+
'price': e.price,
41+
})
42+
.toList(),
43+
}));
44+
45+
//use the server generated id
2646
_orders.insert(
2747
0,
2848
OrderItem(
29-
id: DateTime.now().toString(),
30-
dateTime: DateTime.now(),
49+
id: json.decode(response.body)['name'],
50+
dateTime: timeStamp,
3151
amount: total,
3252
products: cartItem));
3353
notifyListeners();

ShopApp/lib/screens/cartScreen.dart

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,7 @@ class CartScreen extends StatelessWidget {
3636
),
3737
backgroundColor: Theme.of(context).primaryColor,
3838
),
39-
FlatButton(
40-
onPressed: () {
41-
Provider.of<Order>(context, listen: false).addOrder(
42-
cartProvider.cartItems.values.toList(),
43-
cartProvider.getTotalAmount,
44-
);
45-
cartProvider.clear();
46-
},
47-
child: Text(
48-
'Order Now',
49-
style: TextStyle(color: Theme.of(context).primaryColor),
50-
)),
39+
OrderButton(cartProvider: cartProvider),
5140
],
5241
),
5342
),
@@ -72,3 +61,41 @@ class CartScreen extends StatelessWidget {
7261
);
7362
}
7463
}
64+
65+
class OrderButton extends StatefulWidget {
66+
const OrderButton({
67+
Key key,
68+
@required this.cartProvider,
69+
}) : super(key: key);
70+
71+
final Cart cartProvider;
72+
73+
@override
74+
_OrderButtonState createState() => _OrderButtonState();
75+
}
76+
77+
class _OrderButtonState extends State<OrderButton> {
78+
var _isLoading = false;
79+
80+
@override
81+
Widget build(BuildContext context) {
82+
return FlatButton(
83+
onPressed: (widget.cartProvider.getTotalAmount <= 0 || _isLoading) ? null:() async {
84+
setState(() {
85+
_isLoading = true;
86+
});
87+
await Provider.of<Order>(context, listen: false).addOrder(
88+
widget.cartProvider.cartItems.values.toList(),
89+
widget.cartProvider.getTotalAmount,
90+
);
91+
setState(() {
92+
_isLoading = false;
93+
});
94+
widget.cartProvider.clear();
95+
},
96+
child: _isLoading? CircularProgressIndicator():Text(
97+
'Order Now',
98+
style: TextStyle(color: Theme.of(context).primaryColor),
99+
));
100+
}
101+
}

0 commit comments

Comments
 (0)