Skip to content

Commit

Permalink
fetchData 기능 추가, Dummy data 삭제 #15
Browse files Browse the repository at this point in the history
  • Loading branch information
korca0220 committed Mar 15, 2021
1 parent 835648b commit e20763c
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 36 deletions.
62 changes: 27 additions & 35 deletions shop_app/lib/providers/products.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,40 +4,7 @@ import 'package:http/http.dart' as http;
import 'package:shop_app/providers/product.dart';

class Products with ChangeNotifier {
List<Product> _items = [
Product(
id: 'p1',
title: 'Red Shirt',
description: 'A red shirt - it is pretty red!',
price: 29.99,
imageUrl: 'https://img.wizwid.com/PImg/706473/bsc/706473122.jpg',
),
Product(
id: 'p2',
title: 'Trousers',
description: 'A nice pair of trousers.',
price: 59.99,
imageUrl:
'https://upload.wikimedia.org/wikipedia/commons/thumb/e/e8/Trousers%2C_dress_%28AM_1960.022-8%29.jpg/512px-Trousers%2C_dress_%28AM_1960.022-8%29.jpg',
),
Product(
id: 'p3',
title: 'Yellow Scarf',
description:
'Warm and cozy - exactly what you need for the winter GoodGood Gooooooooooood!.',
price: 19.99,
imageUrl:
'https://live.staticflickr.com/4043/4438260868_cc79b3369d_z.jpg',
),
Product(
id: 'p4',
title: 'A Pan',
description: 'Prepare any meal you want.',
price: 49.99,
imageUrl:
'https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Cast-Iron-Pan.jpg/1024px-Cast-Iron-Pan.jpg',
),
];
List<Product> _items = [];

List<Product> get items {
// _items 를 그대로 반환하면 포인터를 반환하게됨 -> 외부에서 수정이 가능
Expand All @@ -53,8 +20,33 @@ class Products with ChangeNotifier {
return _items.firstWhere((element) => element.id == id);
}

Future<void> fetchAndSetProducts() async {
const url = '';
try {
final response = await http.get(Uri.parse(url));
final extractedData = json.decode(response.body) as Map<String, dynamic>;
final List<Product> loadedProducts = [];
extractedData.forEach((prodId, prodData) {
loadedProducts.add(
Product(
id: prodId,
title: prodData['title'],
description: prodData['description'],
price: prodData['price'],
imageUrl: prodData['imageUrl'],
),
);
});
_items = loadedProducts;
notifyListeners();
} catch (error) {
print(error);
throw (error);
}
}

Future<void> addProduct(Product product) async {
const url = 'https://ttt.com';
const url = '';
try {
final response = await http.post(Uri.parse(url),
body: json.encode({
Expand Down
27 changes: 26 additions & 1 deletion shop_app/lib/screens/products_overview_screen.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:shop_app/providers/cart.dart';
import 'package:shop_app/providers/products.dart';
import 'package:shop_app/screens/cart_screen.dart';
import 'package:shop_app/widgets/app_drawer.dart';
import 'package:shop_app/widgets/badge.dart';
Expand All @@ -20,6 +21,26 @@ class ProdulctsOverviewScreen extends StatefulWidget {

class _ProdulctsOverviewScreenState extends State<ProdulctsOverviewScreen> {
bool _showOnlyFavorites = false;
bool _isLoading = false;
bool _isInit = false;

@override
void didChangeDependencies() async {
if (!_isInit) {
setState(() {
_isLoading = true;
});
await Provider.of<Products>(context).fetchAndSetProducts().then((value) {
setState(() {
_isLoading = false;
});
});
}
setState(() {
_isInit = true;
});
super.didChangeDependencies();
}

@override
Widget build(BuildContext context) {
Expand Down Expand Up @@ -63,7 +84,11 @@ class _ProdulctsOverviewScreenState extends State<ProdulctsOverviewScreen> {
)
],
),
body: ProductsGrid(_showOnlyFavorites),
body: _isLoading
? Center(
child: CircularProgressIndicator(),
)
: ProductsGrid(_showOnlyFavorites),
drawer: AppDrawer(),
);
}
Expand Down

0 comments on commit e20763c

Please sign in to comment.