diff --git a/lib/pages/basket.dart b/lib/pages/basket.dart index 81c9965..3d70823 100644 --- a/lib/pages/basket.dart +++ b/lib/pages/basket.dart @@ -60,12 +60,12 @@ class _BasketPageState extends State { List cartItems = []; double totalPrice = 0; List gymCart = []; + bool _isLoading = true; @override void initState() { super.initState(); Future.microtask(() => getCart().then((value) async { - //TODO: Сделать через получение конкретных товаров через getItemsByIds final itemIds = value.map((element) => element['id'] as String).toList(); final items = await getItemsByIds(context, itemIds); @@ -78,6 +78,7 @@ class _BasketPageState extends State { }).toList(); totalPrice = cartItems.fold( 0, (sum, item) => sum + item.price * item.localCount); + _isLoading = false; }); })); } @@ -230,7 +231,7 @@ class _BasketPageState extends State { body: Column( children: [ const GymLinkHeader(title: "Корзина"), - gymCart.isEmpty + _isLoading ? const Expanded( child: Center(child: CircularProgressIndicator())) : cartItems.isEmpty diff --git a/lib/pages/order_confirmation.dart b/lib/pages/order_confirmation.dart index bd4424f..853c9e1 100644 --- a/lib/pages/order_confirmation.dart +++ b/lib/pages/order_confirmation.dart @@ -61,12 +61,15 @@ class _OrderConfirmationPageState extends State { List cartItems = []; double totalPrice = 0; List gymCart = []; + bool _isLoading = true; @override void initState() { super.initState(); Future.microtask(() => getCart().then((value) async { - final items = await getItems(context); + final itemIds = + value.map((element) => element['id'] as String).toList(); + final items = await getItemsByIds(context, itemIds); setState(() { gymCart = items; cartItems = value.map((element) { @@ -76,6 +79,7 @@ class _OrderConfirmationPageState extends State { }).toList(); totalPrice = cartItems.fold( 0, (sum, item) => sum + item.price * item.localCount); + _isLoading = false; }); })); } @@ -98,24 +102,26 @@ class _OrderConfirmationPageState extends State { const GymLinkHeader(title: 'Оформление заказа'), const MarkdownBody(data: '## Состав заказа:'), Expanded( - child: ConstrainedBox( - constraints: const BoxConstraints(maxHeight: 350), - child: ListView.builder( - itemCount: cartItems.length, - itemBuilder: (context, index) { - final item = cartItems[index]; - return OrderConfirmItemCard( - name: item.title, - image: Image( - image: NetworkImage(item.images[0].url), - width: 50, - height: 50), - price: item.price, - count: item.localCount, - ); - }, - ), - ), + child: _isLoading + ? const Center(child: CircularProgressIndicator()) + : ConstrainedBox( + constraints: const BoxConstraints(maxHeight: 350), + child: ListView.builder( + itemCount: cartItems.length, + itemBuilder: (context, index) { + final item = cartItems[index]; + return OrderConfirmItemCard( + name: item.title, + image: Image( + image: NetworkImage(item.images[0].url), + width: 50, + height: 50), + price: item.price, + count: item.localCount, + ); + }, + ), + ), ), const SizedBox( height: 10, diff --git a/lib/tools/items.dart b/lib/tools/items.dart index 414f47b..5918df6 100644 --- a/lib/tools/items.dart +++ b/lib/tools/items.dart @@ -37,15 +37,19 @@ Future> getItemsByIds( BuildContext context, List ids) async { final token = context.read().token; if (token != '') { + if (ids.isEmpty) { + return []; + } final Uri url = Uri.http('gymlink.freemyip.com:8080', 'api/product/get-products'); try { final response = await http.post(url, headers: { 'Authorization': 'Bearer $token', + 'Content-Type': 'application/json' }, - body: jsonEncode(ids.toList())); - if (response.statusCode == 200) { + body: jsonEncode({"ids": ids})); + if (response.statusCode == 201) { final data = jsonDecode(utf8.decode(response.bodyBytes)) as List; final items = data.map((e) => GymItem.fromJson(e)).toList();